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; }
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4