summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_ctypes/_ctypes.c8
-rw-r--r--Modules/_ctypes/cfield.c18
-rw-r--r--Modules/_ctypes/ctypes.h13
-rw-r--r--Modules/_testcapimodule.c13
-rw-r--r--Modules/cStringIO.c3
-rw-r--r--Modules/main.c79
-rw-r--r--Modules/xxmodule.c14
7 files changed, 87 insertions, 61 deletions
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index 7c5da64..926c85b 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -3674,7 +3674,11 @@ CreateArrayType(PyObject *itemtype, Py_ssize_t length)
if (cache == NULL)
return NULL;
}
+#if (PY_VERSION_HEX < 0x02050000)
+ key = Py_BuildValue("(Oi)", itemtype, length);
+#else
key = Py_BuildValue("(On)", itemtype, length);
+#endif
if (!key)
return NULL;
result = PyDict_GetItem(cache, key);
@@ -3698,7 +3702,11 @@ CreateArrayType(PyObject *itemtype, Py_ssize_t length)
#endif
result = PyObject_CallFunction((PyObject *)&ArrayType_Type,
+#if (PY_VERSION_HEX < 0x02050000)
+ "s(O){s:i,s:O}",
+#else
"s(O){s:n,s:O}",
+#endif
name,
&Array_Type,
"_length_",
diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c
index de41571..336f265 100644
--- a/Modules/_ctypes/cfield.c
+++ b/Modules/_ctypes/cfield.c
@@ -250,11 +250,21 @@ CField_repr(CFieldObject *self)
name = ((PyTypeObject *)self->proto)->tp_name;
if (bits)
- result = PyString_FromFormat("<Field type=%s, ofs=%d:%d, bits=%d>",
- name, (int)self->offset, size, bits);
+ result = PyString_FromFormat(
+#if (PY_VERSION_HEX < 0x02050000)
+ "<Field type=%s, ofs=%d:%d, bits=%d>",
+#else
+ "<Field type=%s, ofs=%zd:%d, bits=%d>",
+#endif
+ name, self->offset, size, bits);
else
- result = PyString_FromFormat("<Field type=%s, ofs=%d, size=%d>",
- name, (int)self->offset, size);
+ result = PyString_FromFormat(
+#if (PY_VERSION_HEX < 0x02050000)
+ "<Field type=%s, ofs=%d, size=%d>",
+#else
+ "<Field type=%s, ofs=%zd, size=%d>",
+#endif
+ name, self->offset, size);
return result;
}
diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h
index 9347c99..179dcf1 100644
--- a/Modules/_ctypes/ctypes.h
+++ b/Modules/_ctypes/ctypes.h
@@ -1,5 +1,18 @@
/******************************************************************/
+#if (PY_VERSION_HEX < 0x02050000)
+typedef int Py_ssize_t;
+#define lenfunc inquiry
+#define readbufferproc getreadbufferproc
+#define writebufferproc getwritebufferproc
+#define segcountproc getsegcountproc
+#define charbufferproc getcharbufferproc
+#define ssizeargfunc intargfunc
+#define ssizessizeargfunc intintargfunc
+#define ssizeobjargproc intobjargproc
+#define ssizessizeobjargproc intintobjargproc
+#endif
+
#ifndef MS_WIN32
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index 913c49a..6d8ea3c 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -522,6 +522,18 @@ test_long_numbits(PyObject *self)
return Py_None;
}
+/* Example passing NULLs to PyObject_Str(NULL) and PyObject_Unicode(NULL). */
+
+static PyObject *
+test_null_strings(PyObject *self)
+{
+ PyObject *o1 = PyObject_Str(NULL), *o2 = PyObject_Unicode(NULL);
+ PyObject *tuple = PyTuple_Pack(2, o1, o2);
+ Py_XDECREF(o1);
+ Py_XDECREF(o2);
+ return tuple;
+}
+
static PyObject *
raise_exception(PyObject *self, PyObject *args)
{
@@ -597,6 +609,7 @@ static PyMethodDef TestMethods[] = {
{"test_long_api", (PyCFunction)test_long_api, METH_NOARGS},
{"test_long_numbits", (PyCFunction)test_long_numbits, METH_NOARGS},
{"test_k_code", (PyCFunction)test_k_code, METH_NOARGS},
+ {"test_null_strings", (PyCFunction)test_null_strings, METH_NOARGS},
{"getargs_b", (PyCFunction)getargs_b, METH_VARARGS},
{"getargs_B", (PyCFunction)getargs_B, METH_VARARGS},
diff --git a/Modules/cStringIO.c b/Modules/cStringIO.c
index fd28aa9..bdc9f00 100644
--- a/Modules/cStringIO.c
+++ b/Modules/cStringIO.c
@@ -144,7 +144,8 @@ PyDoc_STRVAR(IO_isatty__doc__, "isatty(): always returns 0");
static PyObject *
IO_isatty(IOobject *self, PyObject *unused) {
- Py_INCREF(Py_False);
+ if (!IO__opencheck(self)) return NULL;
+ Py_INCREF(Py_False);
return Py_False;
}
diff --git a/Modules/main.c b/Modules/main.c
index c8298fb..b3ce16e 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -130,27 +130,42 @@ static void RunStartupFile(PyCompilerFlags *cf)
}
}
-/* Get the path to a top-level module */
-static struct filedescr * FindModule(const char *module,
- FILE **fp, char **filename)
-{
- struct filedescr *fdescr = NULL;
- *fp = NULL;
- *filename = malloc(MAXPATHLEN);
-
- if (*filename == NULL)
- return NULL;
-
- /* Find the actual module source code */
- fdescr = _PyImport_FindModule(module, NULL,
- *filename, MAXPATHLEN, fp, NULL);
- if (fdescr == NULL) {
- free(*filename);
- *filename = NULL;
+static int RunModule(char *module)
+{
+ PyObject *runpy, *runmodule, *runargs, *result;
+ runpy = PyImport_ImportModule("runpy");
+ if (runpy == NULL) {
+ fprintf(stderr, "Could not import runpy module\n");
+ return -1;
}
-
- return fdescr;
+ runmodule = PyObject_GetAttrString(runpy, "run_module");
+ if (runmodule == NULL) {
+ fprintf(stderr, "Could not access runpy.run_module\n");
+ Py_DECREF(runpy);
+ return -1;
+ }
+ runargs = Py_BuildValue("sOsO", module,
+ Py_None, "__main__", Py_True);
+ if (runargs == NULL) {
+ fprintf(stderr,
+ "Could not create arguments for runpy.run_module\n");
+ Py_DECREF(runpy);
+ Py_DECREF(runmodule);
+ return -1;
+ }
+ result = PyObject_Call(runmodule, runargs, NULL);
+ if (result == NULL) {
+ PyErr_Print();
+ }
+ Py_DECREF(runpy);
+ Py_DECREF(runmodule);
+ Py_DECREF(runargs);
+ if (result == NULL) {
+ return -1;
+ }
+ Py_DECREF(result);
+ return 0;
}
/* Main program */
@@ -410,28 +425,9 @@ Py_Main(int argc, char **argv)
}
if (module != NULL) {
- /* Backup _PyOS_optind and find the real file */
- struct filedescr *fdescr = NULL;
+ /* Backup _PyOS_optind and force sys.arv[0] = module */
_PyOS_optind--;
- if ((fdescr = FindModule(module, &fp, &filename))) {
- argv[_PyOS_optind] = filename;
- } else {
- fprintf(stderr, "%s: module %s not found\n",
- argv[0], module);
- return 2;
- }
- if (!fp) {
- fprintf(stderr,
- "%s: module %s has no associated file\n",
- argv[0], module);
- return 2;
- }
- if (!_PyImport_IsScript(fdescr)) {
- fprintf(stderr,
- "%s: module %s not usable as script\n (%s)\n",
- argv[0], module, filename);
- return 2;
- }
+ argv[_PyOS_optind] = module;
}
PySys_SetArgv(argc-_PyOS_optind, argv+_PyOS_optind);
@@ -450,9 +446,8 @@ Py_Main(int argc, char **argv)
sts = PyRun_SimpleStringFlags(command, &cf) != 0;
free(command);
} else if (module) {
- sts = PyRun_AnyFileExFlags(fp, filename, 1, &cf) != 0;
+ sts = RunModule(module);
free(module);
- free(filename);
}
else {
if (filename == NULL && stdin_is_interactive) {
diff --git a/Modules/xxmodule.c b/Modules/xxmodule.c
index df312eb..ea66eef 100644
--- a/Modules/xxmodule.c
+++ b/Modules/xxmodule.c
@@ -197,18 +197,6 @@ xx_bug(PyObject *self, PyObject *args)
return Py_None;
}
-/* Example passing NULLs to PyObject_Str(NULL) and PyObject_Unicode(NULL). */
-
-static PyObject *
-xx_null(PyObject *self, PyObject *noargs)
-{
- PyObject *o1 = PyObject_Str(NULL), *o2 = PyObject_Unicode(NULL);
- PyObject *tuple = PyTuple_Pack(2, o1, o2);
- Py_XDECREF(o1);
- Py_XDECREF(o2);
- return tuple;
-}
-
/* Test bad format character */
static PyObject *
@@ -343,8 +331,6 @@ static PyMethodDef xx_methods[] = {
PyDoc_STR("new() -> new Xx object")},
{"bug", xx_bug, METH_VARARGS,
PyDoc_STR("bug(o) -> None")},
- {"null", xx_null, METH_NOARGS,
- PyDoc_STR("null(o) -> ('NULL', u'NULL')")},
{NULL, NULL} /* sentinel */
};