diff options
author | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2007-04-26 09:15:08 (GMT) |
---|---|---|
committer | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2007-04-26 09:15:08 (GMT) |
commit | 0a440d41844aac25178400d33d714d8e479b86d4 (patch) | |
tree | 85932752a2f3ec1070e5cf231717a50fb603630a /Modules | |
parent | 452f5df64a09e6e50a2d861fa1d18e0bbea7ca4a (diff) | |
download | cpython-0a440d41844aac25178400d33d714d8e479b86d4.zip cpython-0a440d41844aac25178400d33d714d8e479b86d4.tar.gz cpython-0a440d41844aac25178400d33d714d8e479b86d4.tar.bz2 |
Export function sanitize_the_mode from fileobject.c as _PyFile_SanitizeMode(). Use this function in posixmodule.c when implementing fdopen(). This fixes test_subprocess.py for a VisualStudio 2005 compile.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/posixmodule.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index bb1dc4f..29ef1dc 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -6259,16 +6259,23 @@ static PyObject * posix_fdopen(PyObject *self, PyObject *args) { int fd; - char *mode = "r"; + char *orgmode = "r"; int bufsize = -1; FILE *fp; PyObject *f; - if (!PyArg_ParseTuple(args, "i|si", &fd, &mode, &bufsize)) + char *mode; + if (!PyArg_ParseTuple(args, "i|si", &fd, &orgmode, &bufsize)) return NULL; - if (mode[0] != 'r' && mode[0] != 'w' && mode[0] != 'a') { - PyErr_Format(PyExc_ValueError, - "invalid file mode '%s'", mode); + /* Sanitize mode. See fileobject.c */ + mode = PyMem_MALLOC(strlen(orgmode)+3); + if (!mode) { + PyErr_NoMemory(); + return NULL; + } + strcpy(mode, orgmode); + if (_PyFile_SanitizeMode(mode)) { + PyMem_FREE(mode); return NULL; } Py_BEGIN_ALLOW_THREADS @@ -6289,10 +6296,11 @@ posix_fdopen(PyObject *self, PyObject *args) #else fp = fdopen(fd, mode); #endif + PyMem_FREE(mode); Py_END_ALLOW_THREADS if (fp == NULL) return posix_error(); - f = PyFile_FromFile(fp, "<fdopen>", mode, fclose); + f = PyFile_FromFile(fp, "<fdopen>", orgmode, fclose); if (f != NULL) PyFile_SetBufSize(f, bufsize); return f; |