diff --git a/src/connobject.c b/src/connobject.c index 6f029a44..6c62bada 100644 --- a/src/connobject.c +++ b/src/connobject.c @@ -40,7 +40,7 @@ PyObject * MpConn_FromConn(conn_rec *c) { connobject *result; - + MpConn_Type.ob_type = &PyType_Type; result = PyObject_New(connobject, &MpConn_Type); if (! result) return PyErr_NoMemory(); @@ -325,7 +325,7 @@ static PyObject * conn_getattr(connobject *self, char *name) { PyObject *res; - + PyMemberDef *md; PyMethodDef *ml = connobjectmethods; for (; ml->ml_name != NULL; ml++) { if (name[0] == ml->ml_name[0] && @@ -404,7 +404,7 @@ static PyObject * conn_getattr(connobject *self, char *name) "use req.useragent_ip or conn.client_ip"); } #endif - PyMemberDef *md = find_memberdef(conn_memberlist, name); + md = find_memberdef(conn_memberlist, name); if (!md) { PyErr_SetString(PyExc_AttributeError, name); return NULL; @@ -446,7 +446,7 @@ static int conn_setattr(connobject *self, char* name, PyObject* value) } PyTypeObject MpConn_Type = { - PyVarObject_HEAD_INIT(&PyType_Type, 0) + PyVarObject_HEAD_INIT(NULL, 0) "mp_conn", /* tp_name */ sizeof(connobject), /* tp_basicsize */ 0, /* tp_itemsize */ diff --git a/src/filterobject.c b/src/filterobject.c index 966d2f8b..98256c81 100644 --- a/src/filterobject.c +++ b/src/filterobject.c @@ -78,7 +78,7 @@ PyObject *MpFilter_FromFilter(ap_filter_t *f, apr_bucket_brigade *bb, int is_inp char * handler, char *dir) { filterobject *result; - + MpFilter_Type.ob_type = &PyType_Type; result = PyObject_New(filterobject, &MpFilter_Type); if (! result) return PyErr_NoMemory(); @@ -540,12 +540,13 @@ static PyObject * filter_getattr(filterobject *self, char *name) static int filter_setattr(filterobject *self, char *name, PyObject *v) { + PyMemberDef *md; if (v == NULL) { PyErr_SetString(PyExc_AttributeError, "can't delete filter attributes"); return -1; } - PyMemberDef *md = find_memberdef(filter_memberlist, name); + md = find_memberdef(filter_memberlist, name); if (!md) { PyErr_SetString(PyExc_AttributeError, name); return -1; @@ -554,7 +555,7 @@ static int filter_setattr(filterobject *self, char *name, PyObject *v) } PyTypeObject MpFilter_Type = { - PyVarObject_HEAD_INIT(&PyType_Type, 0) + PyVarObject_HEAD_INIT(NULL, 0) "mp_filter", /* tp_name */ sizeof(filterobject), /* tp_basicsize */ 0, /* tp_itemsize */ diff --git a/src/finfoobject.c b/src/finfoobject.c index cf3b226e..0aa9aa35 100644 --- a/src/finfoobject.c +++ b/src/finfoobject.c @@ -35,7 +35,7 @@ PyObject * MpFinfo_FromFinfo(apr_finfo_t *f) { finfoobject *result; - + MpFinfo_Type.ob_type = &PyType_Type; result = PyObject_New(finfoobject, &MpFinfo_Type); if (! result) return PyErr_NoMemory(); @@ -377,7 +377,7 @@ static PyObject *finfo_repr(finfoobject *self) } PyTypeObject MpFinfo_Type = { - PyVarObject_HEAD_INIT(&PyType_Type, 0) + PyVarObject_HEAD_INIT(NULL, 0) "mp_finfo", /* tp_name */ sizeof(finfoobject), /* tp_basicsize */ 0, /* tp_itemsize */ diff --git a/src/hlistobject.c b/src/hlistobject.c index ede227a2..af956c1c 100644 --- a/src/hlistobject.c +++ b/src/hlistobject.c @@ -36,7 +36,7 @@ PyObject *MpHList_FromHLEntry(hl_entry *hle) { hlistobject *result; - + MpHList_Type.ob_type = &PyType_Type; result = PyObject_New(hlistobject, &MpHList_Type); if (! result) PyErr_NoMemory(); @@ -92,6 +92,7 @@ static void hlist_dealloc(hlistobject *self) static PyObject *hlist_getattr(hlistobject *self, char *name) { PyObject *res; + PyMemberDef *md; PyMethodDef *ml = hlistmethods; for (; ml->ml_name != NULL; ml++) { @@ -109,7 +110,7 @@ static PyObject *hlist_getattr(hlistobject *self, char *name) return Py_None; } - PyMemberDef *md = find_memberdef(hlist_memberlist, name); + md = find_memberdef(hlist_memberlist, name); if (!md) { PyErr_SetString(PyExc_AttributeError, name); return NULL; @@ -164,7 +165,7 @@ static PyObject *hlist_repr(hlistobject *self) } PyTypeObject MpHList_Type = { - PyVarObject_HEAD_INIT(&PyType_Type, 0) + PyVarObject_HEAD_INIT(NULL, 0) "mp_hlist", /* tp_name */ sizeof(hlistobject), /* tp_basicsize */ 0, /* tp_itemsize */ diff --git a/src/mod_python.c b/src/mod_python.c index 5404084e..759b9147 100644 --- a/src/mod_python.c +++ b/src/mod_python.c @@ -1153,6 +1153,7 @@ static const char *python_directive_handler(cmd_parms *cmd, py_config* conf, char d_is_fnmatch = 0; char d_is_location = 0; ap_regex_t *regex = NULL; + const char *exts; determine_context(cmd->pool, cmd, &directory, &d_is_fnmatch, &d_is_location, ®ex); @@ -1169,7 +1170,7 @@ static const char *python_directive_handler(cmd_parms *cmd, py_config* conf, * PythonHandler.ext2 foo */ - const char *exts = val; + exts = val; val = ap_getword(cmd->pool, &exts, '|'); if (*exts == '\0') { @@ -2609,6 +2610,7 @@ static void PythonChildInitHandler(apr_pool_t *p, server_rec *s) const apr_array_header_t *ah; apr_table_entry_t *elts; int i; + interpreterdata *idata; py_config *conf = ap_get_module_config(s->module_config, &python_module); py_global_config *glb; @@ -2618,7 +2620,7 @@ static void PythonChildInitHandler(apr_pool_t *p, server_rec *s) PyEval_RestoreThread(global_tstate); PyOS_AfterFork(); - interpreterdata *idata = save_interpreter(MAIN_INTERPRETER, PyThreadState_Get()); + idata = save_interpreter(MAIN_INTERPRETER, PyThreadState_Get()); if (!idata) ap_log_error(APLOG_MARK, APLOG_ERR, 0, main_server, "PythonChildInitHandler: save_interpreter() returned NULL. No more memory?"); diff --git a/src/mod_python.sln b/src/mod_python.sln new file mode 100644 index 00000000..7aa324c6 --- /dev/null +++ b/src/mod_python.sln @@ -0,0 +1,17 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_python", "mod_python.vcxproj", "{91935325-716F-4776-825B-7A2250320FC1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {91935325-716F-4776-825B-7A2250320FC1}.Release|Win32.ActiveCfg = Release|Win32 + {91935325-716F-4776-825B-7A2250320FC1}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/src/mod_python.vcxproj b/src/mod_python.vcxproj new file mode 100644 index 00000000..a1d882d0 --- /dev/null +++ b/src/mod_python.vcxproj @@ -0,0 +1,102 @@ + + + + + Release + Win32 + + + + {91935325-716F-4776-825B-7A2250320FC1} + + + + + + DynamicLibrary + Static + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + .\Release\ + .\Release\ + false + AllRules.ruleset + + + + + + OnlyExplicitInline + include;$(PYTHONSRC)\include;$(APACHESRC)\include;C:\Python27\include;C:\tools\httpd-2.4.6\include;C:\tools\apr-1.4.8\include;C:\tools\apr-util-1.5.2\include;C:\tools\httpd-2.4.6\os\win32;C:\tools\httpd-2.4.6\modules\filters;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MultiThreaded + true + + + .\Release/mod_python.pch + .\Release/ + .\Release/ + .\Release/ + Level3 + true + Default + + + /MACHINE:I386 %(AdditionalOptions) + libhttpd.lib;apr-1.lib;libapriconv-1.lib;libapr-1.lib;libaprutil-1.lib;ws2_32.lib;%(AdditionalDependencies) + .\Release/mod_python.so + true + $(APACHESRC)\lib;$(PYTHONSRC)\libs;C:\tools\Apache24\lib;C:\Python27\libs;%(AdditionalLibraryDirectories) + .\Release/mod_python.pdb + .\Release/mod_python.lib + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/mod_python.tlb + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/mod_python.vcxproj.filters b/src/mod_python.vcxproj.filters new file mode 100644 index 00000000..e65b6494 --- /dev/null +++ b/src/mod_python.vcxproj.filters @@ -0,0 +1,51 @@ + + + + + {a90f906b-139f-461b-9179-9f6767afec72} + + + + + include + + + include + + + include + + + include + + + include + + + include + + + include + + + include + + + include + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/requestobject.c b/src/requestobject.c index 7569335c..035a06b9 100644 --- a/src/requestobject.c +++ b/src/requestobject.c @@ -47,7 +47,7 @@ static APR_OPTIONAL_FN_TYPE(ssl_is_https) *optfn_is_https = NULL; PyObject * MpRequest_FromRequest(request_rec *req) { requestobject *result; - + MpRequest_Type.ob_type = &PyType_Type; result = PyObject_GC_New(requestobject, &MpRequest_Type); if (! result) return PyErr_NoMemory(); @@ -221,13 +221,13 @@ static PyObject *req_build_wsgi_env(requestobject *self) apr_table_t *e = r->subprocess_env; PyObject *env, *v; const char *val; - int i, j; + int i, j, rc; env = PyDict_New(); if (!env) return NULL; - int rc = set_wsgi_path_info(self); + rc = set_wsgi_path_info(self); if (rc == 1) { /* bad base_uri, the error is already set */ Py_DECREF(env); @@ -984,6 +984,10 @@ static PyObject * req_get_remote_host(requestobject *self, PyObject *args) static PyObject * req_get_options(requestobject *self, PyObject *args) { + const apr_array_header_t* ah; + apr_table_entry_t* elts; + int i; + py_config *conf = (py_config *) ap_get_module_config(self->request_rec->per_dir_config, &python_module); @@ -993,9 +997,9 @@ static PyObject * req_get_options(requestobject *self, PyObject *args) if (((tableobject*)self->options)->table != conf->options) ((tableobject*)self->options)->table = conf->options; - const apr_array_header_t* ah = apr_table_elts(conf->options); - apr_table_entry_t* elts = (apr_table_entry_t *) ah->elts; - int i; + ah = apr_table_elts(conf->options); + elts = (apr_table_entry_t *) ah->elts; + /* Remove the empty values as a way to unset values. * See https://issues.apache.org/jira/browse/MODPYTHON-6 */ @@ -1899,6 +1903,7 @@ static PyObject *getreq_recmbr(requestobject *self, void *name) static int setreq_recmbr(requestobject *self, PyObject *val, void *name) { char *v; + PyMemberDef *md; if (strcmp(name, "content_type") == 0) { MP_ANYSTR_AS_STR(v, val, 1); if (!v) { @@ -2037,7 +2042,7 @@ static int setreq_recmbr(requestobject *self, PyObject *val, void *name) return 0; } - PyMemberDef *md = find_memberdef(request_rec_mbrs, name); + md = find_memberdef(request_rec_mbrs, name); if (!md) { PyErr_SetString(PyExc_AttributeError, name); return -1; @@ -2377,7 +2382,7 @@ static char request_doc[] = "Apache request_rec structure\n"; PyTypeObject MpRequest_Type = { - PyVarObject_HEAD_INIT(&PyType_Type, 0) + PyVarObject_HEAD_INIT(NULL, 0) "mp_request", /* tp_name */ sizeof(requestobject), /* tp_basicsize */ 0, /* tp_itemsize */ diff --git a/src/serverobject.c b/src/serverobject.c index d540988a..8e953032 100644 --- a/src/serverobject.c +++ b/src/serverobject.c @@ -36,7 +36,7 @@ PyObject * MpServer_FromServer(server_rec *s) { serverobject *result; - + MpServer_Type.ob_type = &PyType_Type; result = PyObject_New(serverobject, &MpServer_Type); if (! result) return PyErr_NoMemory(); @@ -237,6 +237,7 @@ static PyMemberDef server_rec_mbrs[] = { static PyObject *getsrv_recmbr(serverobject *self, void *name) { + PyMemberDef *md; if (strcmp(name, "_server_rec") == 0) { #if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 7 return PyCObject_FromVoidPtr(self->server, 0); @@ -246,7 +247,7 @@ static PyObject *getsrv_recmbr(serverobject *self, void *name) } - PyMemberDef *md = find_memberdef(server_rec_mbrs, name); + md = find_memberdef(server_rec_mbrs, name); if (!md) { PyErr_SetString(PyExc_AttributeError, name); return NULL; @@ -374,7 +375,7 @@ static char server_doc[] = "Apache server_rec structure\n"; PyTypeObject MpServer_Type = { - PyVarObject_HEAD_INIT(&PyType_Type, 0) + PyVarObject_HEAD_INIT(NULL, 0) "mp_server", /* tp_name */ sizeof(serverobject), /* tp_basicsize */ 0, /* tp_itemsize */ diff --git a/src/tableobject.c b/src/tableobject.c index 49ce4b99..ee12bc84 100644 --- a/src/tableobject.c +++ b/src/tableobject.c @@ -50,7 +50,7 @@ PyObject * MpTable_FromTable(apr_table_t *t) tableobject *result; TABLE_DEBUG("MpTable_FromTable"); - + MpTable_Type.ob_type = &PyType_Type; result = PyObject_New(tableobject, &MpTable_Type); if (! result) return PyErr_NoMemory(); @@ -1183,7 +1183,7 @@ static char mp_table_doc[] = " d[k] = v"; PyTypeObject MpTable_Type = { - PyVarObject_HEAD_INIT(&PyType_Type, 0) + PyVarObject_HEAD_INIT(NULL, 0) "mp_table", /* tp_name */ sizeof(tableobject), /* tp_basicsize */ 0, /* tp_itemsize */ @@ -1247,7 +1247,7 @@ static PyObject *tableiter_new(tableobject *table, tableselectfunc select) tableiterobject *ti; TABLE_DEBUG("tableiter_new"); - + MpTableIter_Type.ob_type = &PyType_Type; ti = PyObject_NEW(tableiterobject, &MpTableIter_Type); if (ti == NULL) return NULL; @@ -1333,7 +1333,7 @@ static PyObject *tableiter_iternext(tableiterobject *ti) } PyTypeObject MpTableIter_Type = { - PyVarObject_HEAD_INIT(&PyType_Type, 0) + PyVarObject_HEAD_INIT(NULL, 0) "dictionary-iterator", /* tp_name */ sizeof(tableiterobject), /* tp_basicsize */ 0, /* tp_itemsize */ diff --git a/src/version.c b/src/version.c new file mode 100644 index 00000000..eb040e62 --- /dev/null +++ b/src/version.c @@ -0,0 +1,8 @@ +/* THIS FILE IS AUTO-GENERATED BY Makefile */ +#include "mp_version.h" +const char * const mp_git_sha = "54d42b1"; +const int mp_version_major = MP_VERSION_MAJOR; +const int mp_version_minor = MP_VERSION_MINOR; +const int mp_version_patch = MP_VERSION_PATCH; +const char * const mp_version_string = MP_VERSION_STRING(MP_VERSION_MAJOR,MP_VERSION_MINOR,MP_VERSION_PATCH) "-54d42b1"; +const char * const mp_version_component = "mod_python/" MP_VERSION_STRING(MP_VERSION_MAJOR,MP_VERSION_MINOR,MP_VERSION_PATCH) "-54d42b1"; \ No newline at end of file