]> granicus.if.org Git - python/commitdiff
use pep 383 decoding for mknod and mkfifo #9570
authorBenjamin Peterson <benjamin@python.org>
Wed, 11 Aug 2010 19:20:42 +0000 (19:20 +0000)
committerBenjamin Peterson <benjamin@python.org>
Wed, 11 Aug 2010 19:20:42 +0000 (19:20 +0000)
Patch by David Watson.

Misc/NEWS
Modules/posixmodule.c

index 24f9684823ff1156529087211406c884c651ed2f..418f8dd65ec2f6077f7edcfe86a6dd8b6cf7bc3d 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -30,6 +30,8 @@ Core and Builtins
 Extensions
 ----------
 
+- Issue #9570: Use PEP 383 decoding in os.mknod and os.mkfifo.
+
 - Issue #6915: Under Windows, os.listdir() didn't release the Global
   Interpreter Lock around all system calls.  Original patch by Ryan Kelly.
 
index 449093a7fc859bdfa1d58783cf4cba631989a003..087457ec4ba60227a13e7cf88e012f3d458c373f 100644 (file)
@@ -5702,14 +5702,18 @@ Create a FIFO (a POSIX named pipe).");
 static PyObject *
 posix_mkfifo(PyObject *self, PyObject *args)
 {
+    PyObject *opath;
     char *filename;
     int mode = 0666;
     int res;
-    if (!PyArg_ParseTuple(args, "s|i:mkfifo", &filename, &mode))
+    if (!PyArg_ParseTuple(args, "O&|i:mkfifo", PyUnicode_FSConverter, &opath,
+                          &mode))
         return NULL;
+    filename = PyBytes_AS_STRING(opath);
     Py_BEGIN_ALLOW_THREADS
     res = mkfifo(filename, mode);
     Py_END_ALLOW_THREADS
+    Py_DECREF(opath);
     if (res < 0)
         return posix_error();
     Py_INCREF(Py_None);
@@ -5732,15 +5736,19 @@ os.makedev()), otherwise it is ignored.");
 static PyObject *
 posix_mknod(PyObject *self, PyObject *args)
 {
+    PyObject *opath;
     char *filename;
     int mode = 0600;
     int device = 0;
     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;
+    filename = PyBytes_AS_STRING(opath);
     Py_BEGIN_ALLOW_THREADS
     res = mknod(filename, mode, device);
     Py_END_ALLOW_THREADS
+    Py_DECREF(opath);
     if (res < 0)
         return posix_error();
     Py_INCREF(Py_None);