[Python-checkins] python/dist/src/Modules posixmodule.c,2.263,2.264
loewis@users.sourceforge.net
loewis@users.sourceforge.net
Sun, 06 Oct 2002 23:44:24 -0700
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;
}