[Python-checkins] python/dist/src/Modules posixmodule.c,2.263,2.264 (original) (raw)
loewis@users.sourceforge.net loewis@users.sourceforge.net
Sun, 06 Oct 2002 23:44:24 -0700
- Previous message: [Python-checkins] python/dist/src configure,1.279.6.13,1.279.6.14 configure.in,1.288.6.13,1.288.6.14
- Next message: [Python-checkins] python/dist/src/Python ceval.c,2.301.4.5,2.301.4.6
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Update of /cvsroot/python/python/dist/src/Modules In directory usw-pr-cvs1:/tmp/cvs-serv1042
Modified Files: posixmodule.c Log Message: Apply file system default encoding to exec and spawn path and arguments.
Index: posixmodule.c
RCS file: /cvsroot/python/python/dist/src/Modules/posixmodule.c,v retrieving revision 2.263 retrieving revision 2.264 diff -C2 -d -r2.263 -r2.264 *** posixmodule.c 5 Oct 2002 01:47:34 -0000 2.263 --- posixmodule.c 7 Oct 2002 06:44:21 -0000 2.264
*** 1853,1856 **** --- 1853,1867 ---- }
#if defined(HAVE_EXECV) || defined(HAVE_SPAWNV)
static void
free_string_array(char **array, int count)
{
int i;
for (i = 0; i < count; i++)
PyMem_Free(array[i]);
PyMem_DEL(array);
}
#endif
#ifdef HAVE_EXECV
*** 1874,1878 **** argv is a list or tuple of strings. */
! if (!PyArg_ParseTuple(args, "sO:execv", &path, &argv)) return NULL; if (PyList_Check(argv)) { --- 1885,1891 ---- argv is a list or tuple of strings. */
! if (!PyArg_ParseTuple(args, "etO:execv", ! Py_FileSystemDefaultEncoding, ! &path, &argv)) return NULL; if (PyList_Check(argv)) {
*** 1886,1889 **** --- 1899,1903 ---- else { PyErr_SetString(PyExc_TypeError, "execv() arg 2 must be a tuple or list");
PyMem_Free(path); return NULL; }
*** 1891,1905 **** if (argc == 0) { PyErr_SetString(PyExc_ValueError, "execv() arg 2 must not be empty"); return NULL; }
argvlist = PyMem_NEW(char *, argc+1);
! if (argvlist == NULL) return NULL; for (i = 0; i < argc; i++) { ! if (!PyArg_Parse((*getitem)(argv, i), "s", &argvlist[i])) { ! PyMem_DEL(argvlist); PyErr_SetString(PyExc_TypeError, "execv() arg 2 must contain only strings"); return NULL;
--- 1905,1925 ---- if (argc == 0) { PyErr_SetString(PyExc_ValueError, "execv() arg 2 must not be empty");
PyMem_Free(path); return NULL; } argvlist = PyMem_NEW(char *, argc+1);
! if (argvlist == NULL) { ! PyMem_Free(path); return NULL;
} for (i = 0; i < argc; i++) {
! if (!PyArg_Parse((*getitem)(argv, i), "et", ! Py_FileSystemDefaultEncoding, ! &argvlist[i])) { ! free_string_array(argvlist, i); PyErr_SetString(PyExc_TypeError, "execv() arg 2 must contain only strings");
PyMem_Free(path); return NULL;
*** 1916,1920 **** /* If we get here it's definitely an error */
! PyMem_DEL(argvlist); return posix_error(); } --- 1936,1941 ---- /* If we get here it's definitely an error */
! free_string_array(argvlist, argc); ! PyMem_Free(path); return posix_error(); }
*** 1939,1942 **** --- 1960,1964 ---- int i, pos, argc, envc; PyObject *(*getitem)(PyObject *, int);
int lastarg = 0; /* execve has three arguments: (path, argv, env), where
*** 1944,1948 **** like posix.environ. */
! if (!PyArg_ParseTuple(args, "sOO:execve", &path, &argv, &env)) return NULL; if (PyList_Check(argv)) { --- 1966,1972 ---- like posix.environ. */
! if (!PyArg_ParseTuple(args, "etOO:execve", ! Py_FileSystemDefaultEncoding, ! &path, &argv, &env)) return NULL; if (PyList_Check(argv)) {
*** 1956,1964 **** else { PyErr_SetString(PyExc_TypeError, "execve() arg 2 must be a tuple or list"); ! return NULL; } if (!PyMapping_Check(env)) { PyErr_SetString(PyExc_TypeError, "execve() arg 3 must be a mapping object"); ! return NULL; }
--- 1980,1988 ---- else { PyErr_SetString(PyExc_TypeError, "execve() arg 2 must be a tuple or list"); ! goto fail_0; } if (!PyMapping_Check(env)) { PyErr_SetString(PyExc_TypeError, "execve() arg 3 must be a mapping object"); ! goto fail_0; }
*** 1966,1970 **** PyErr_SetString(PyExc_ValueError, "execve() arg 2 must not be empty"); ! return NULL; }
--- 1990,1994 ---- PyErr_SetString(PyExc_ValueError, "execve() arg 2 must not be empty"); ! goto fail_0; }
*** 1972,1985 **** if (argvlist == NULL) { PyErr_NoMemory(); ! return NULL; } for (i = 0; i < argc; i++) { if (!PyArg_Parse((*getitem)(argv, i), ! "s;execve() arg 2 must contain only strings", &argvlist[i])) { goto fail_1; } } argvlist[argc] = NULL;
--- 1996,2011 ---- if (argvlist == NULL) { PyErr_NoMemory(); ! goto fail_0; } for (i = 0; i < argc; i++) { if (!PyArg_Parse((*getitem)(argv, i), ! "et;execve() arg 2 must contain only strings", &argvlist[i])) {
lastarg = i; goto fail_1; } }
lastarg = argc; argvlist[argc] = NULL;
*** 2045,2051 **** PyMem_DEL(envlist); fail_1: ! PyMem_DEL(argvlist); Py_XDECREF(vals); Py_XDECREF(keys); return NULL; } --- 2071,2079 ---- PyMem_DEL(envlist); fail_1: ! free_string_array(argvlist,lastarg); Py_XDECREF(vals); Py_XDECREF(keys);
- fail_0:
}PyMem_Free(path); return NULL;
*** 2075,2079 **** argv is a list or tuple of strings. */
! if (!PyArg_ParseTuple(args, "isO:spawnv", &mode, &path, &argv)) return NULL; if (PyList_Check(argv)) { --- 2103,2109 ---- argv is a list or tuple of strings. */
! if (!PyArg_ParseTuple(args, "ietO:spawnv", &mode, ! Py_FileSystemDefaultEncoding, ! &path, &argv)) return NULL; if (PyList_Check(argv)) {
*** 2087,2101 **** else { PyErr_SetString(PyExc_TypeError, "spawnv() arg 2 must be a tuple or list"); return NULL; }
argvlist = PyMem_NEW(char *, argc+1);
! if (argvlist == NULL) return NULL; for (i = 0; i < argc; i++) { ! if (!PyArg_Parse((*getitem)(argv, i), "s", &argvlist[i])) { ! PyMem_DEL(argvlist); PyErr_SetString(PyExc_TypeError, "spawnv() arg 2 must contain only strings"); return NULL; } --- 2117,2137 ---- else { PyErr_SetString(PyExc_TypeError, "spawnv() arg 2 must be a tuple or list");
PyMem_Free(path); return NULL; } argvlist = PyMem_NEW(char *, argc+1);
! if (argvlist == NULL) { ! PyMem_Free(path); return NULL;
} for (i = 0; i < argc; i++) {
! if (!PyArg_Parse((*getitem)(argv, i), "et", ! Py_FileSystemDefaultEncoding, ! &argvlist[i])) { ! free_string_array(argvlist, i); PyErr_SetString(PyExc_TypeError, "spawnv() arg 2 must contain only strings");
PyMem_Free(path); return NULL; }
*** 2116,2120 **** #endif
! PyMem_DEL(argvlist);
if (spawnval == -1)
--- 2152,2157 ---- #endif
! free_string_array(argvlist, argc); ! PyMem_Free(path);
if (spawnval == -1)
*** 2149,2152 **** --- 2186,2190 ---- Py_intptr_t spawnval; PyObject *(*getitem)(PyObject *, int);
int lastarg = 0; /* spawnve has four arguments: (mode, path, argv, env), where
*** 2154,2158 **** like posix.environ. */
! if (!PyArg_ParseTuple(args, "isOO:spawnve", &mode, &path, &argv, &env)) return NULL; if (PyList_Check(argv)) { --- 2192,2198 ---- like posix.environ. */
! if (!PyArg_ParseTuple(args, "ietOO:spawnve", &mode, ! Py_FileSystemDefaultEncoding, ! &path, &argv, &env)) return NULL; if (PyList_Check(argv)) {
*** 2166,2174 **** else { PyErr_SetString(PyExc_TypeError, "spawnve() arg 2 must be a tuple or list"); ! return NULL; } if (!PyMapping_Check(env)) { PyErr_SetString(PyExc_TypeError, "spawnve() arg 3 must be a mapping object"); ! return NULL; }
--- 2206,2214 ---- else { PyErr_SetString(PyExc_TypeError, "spawnve() arg 2 must be a tuple or list"); ! goto fail_0; } if (!PyMapping_Check(env)) { PyErr_SetString(PyExc_TypeError, "spawnve() arg 3 must be a mapping object"); ! goto fail_0; }
*** 2176,2189 **** if (argvlist == NULL) { PyErr_NoMemory(); ! return NULL; } for (i = 0; i < argc; i++) { if (!PyArg_Parse((*getitem)(argv, i), ! "s;spawnve() arg 2 must contain only strings", &argvlist[i])) { goto fail_1; } } argvlist[argc] = NULL;
--- 2216,2232 ---- if (argvlist == NULL) { PyErr_NoMemory(); ! goto fail_0; } for (i = 0; i < argc; i++) { if (!PyArg_Parse((*getitem)(argv, i), ! "et;spawnve() arg 2 must contain only strings", ! Py_FileSystemDefaultEncoding, &argvlist[i])) {
lastarg = i; goto fail_1; } }
lastarg = argc; argvlist[argc] = NULL;
*** 2252,2258 **** PyMem_DEL(envlist); fail_1: ! PyMem_DEL(argvlist); Py_XDECREF(vals); Py_XDECREF(keys); return res; } --- 2295,2303 ---- PyMem_DEL(envlist); fail_1: ! free_string_array(argvlist, lastarg); Py_XDECREF(vals); Py_XDECREF(keys);
- fail_0:
}PyMem_Free(path); return res;
- Previous message: [Python-checkins] python/dist/src configure,1.279.6.13,1.279.6.14 configure.in,1.288.6.13,1.288.6.14
- Next message: [Python-checkins] python/dist/src/Python ceval.c,2.301.4.5,2.301.4.6
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]