summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorKristján Valur Jónsson <kristjan@ccpgames.com>2007-04-26 09:15:08 (GMT)
committerKristján Valur Jónsson <kristjan@ccpgames.com>2007-04-26 09:15:08 (GMT)
commit0a440d41844aac25178400d33d714d8e479b86d4 (patch)
tree85932752a2f3ec1070e5cf231717a50fb603630a /Modules
parent452f5df64a09e6e50a2d861fa1d18e0bbea7ca4a (diff)
downloadcpython-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.c20
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;