use pep 383 decoding for mknod and mkfifo #9570

Patch by David Watson.
This commit is contained in:
Benjamin Peterson 2010-08-11 19:20:42 +00:00
parent f0f45142d5
commit d4efbf90d2
2 changed files with 12 additions and 2 deletions

View file

@ -30,6 +30,8 @@ Core and Builtins
Extensions Extensions
---------- ----------
- Issue #9570: Use PEP 383 decoding in os.mknod and os.mkfifo.
- Issue #6915: Under Windows, os.listdir() didn't release the Global - Issue #6915: Under Windows, os.listdir() didn't release the Global
Interpreter Lock around all system calls. Original patch by Ryan Kelly. Interpreter Lock around all system calls. Original patch by Ryan Kelly.

View file

@ -5702,14 +5702,18 @@ Create a FIFO (a POSIX named pipe).");
static PyObject * static PyObject *
posix_mkfifo(PyObject *self, PyObject *args) posix_mkfifo(PyObject *self, PyObject *args)
{ {
PyObject *opath;
char *filename; char *filename;
int mode = 0666; int mode = 0666;
int res; int res;
if (!PyArg_ParseTuple(args, "s|i:mkfifo", &filename, &mode)) if (!PyArg_ParseTuple(args, "O&|i:mkfifo", PyUnicode_FSConverter, &opath,
&mode))
return NULL; return NULL;
filename = PyBytes_AS_STRING(opath);
Py_BEGIN_ALLOW_THREADS Py_BEGIN_ALLOW_THREADS
res = mkfifo(filename, mode); res = mkfifo(filename, mode);
Py_END_ALLOW_THREADS Py_END_ALLOW_THREADS
Py_DECREF(opath);
if (res < 0) if (res < 0)
return posix_error(); return posix_error();
Py_INCREF(Py_None); Py_INCREF(Py_None);
@ -5732,15 +5736,19 @@ os.makedev()), otherwise it is ignored.");
static PyObject * static PyObject *
posix_mknod(PyObject *self, PyObject *args) posix_mknod(PyObject *self, PyObject *args)
{ {
PyObject *opath;
char *filename; char *filename;
int mode = 0600; int mode = 0600;
int device = 0; int device = 0;
int res; int res;
if (!PyArg_ParseTuple(args, "s|ii:mknod", &filename, &mode, &device)) if (!PyArg_ParseTuple(args, "O&|ii:mknod", PyUnicode_FSConverter, &opath,
&mode, &device))
return NULL; return NULL;
filename = PyBytes_AS_STRING(opath);
Py_BEGIN_ALLOW_THREADS Py_BEGIN_ALLOW_THREADS
res = mknod(filename, mode, device); res = mknod(filename, mode, device);
Py_END_ALLOW_THREADS Py_END_ALLOW_THREADS
Py_DECREF(opath);
if (res < 0) if (res < 0)
return posix_error(); return posix_error();
Py_INCREF(Py_None); Py_INCREF(Py_None);