]> granicus.if.org Git - python/commitdiff
Refactor the Windows specific and POSIX specific implementations of
authorGregory P. Smith <greg@krypto.org>
Thu, 21 Mar 2013 01:51:33 +0000 (18:51 -0700)
committerGregory P. Smith <greg@krypto.org>
Thu, 21 Mar 2013 01:51:33 +0000 (18:51 -0700)
listdir into two separate coherent functions rather than interleaved
#ifdef's.

Modules/posixmodule.c

index 3ddeef455e3b1f5841c5ea93b2588bd18f906dbc..870da8a1d7efd6f7a265ba59217788e236eba145 100644 (file)
@@ -3249,15 +3249,14 @@ On some platforms, path may also be specified as an open file descriptor;\n\
   the file descriptor must refer to a directory.\n\
   If this functionality is unavailable, using it raises NotImplementedError.");
 
+#if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR)
 static PyObject *
-posix_listdir(PyObject *self, PyObject *args, PyObject *kwargs)
+_listdir_windows_no_opendir(PyObject *self, PyObject *args, PyObject *kwargs)
 {
     path_t path;
     PyObject *list = NULL;
     static char *keywords[] = {"path", NULL};
     int fd = -1;
-
-#if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR)
     PyObject *v;
     HANDLE hFindFile = INVALID_HANDLE_VALUE;
     BOOL result;
@@ -3268,28 +3267,16 @@ posix_listdir(PyObject *self, PyObject *args, PyObject *kwargs)
     Py_ssize_t len = sizeof(namebuf)-5;
     PyObject *po = NULL;
     wchar_t *wnamebuf = NULL;
-#else
-    PyObject *v;
-    DIR *dirp = NULL;
-    struct dirent *ep;
-    int return_str; /* if false, return bytes */
-#endif
 
     memset(&path, 0, sizeof(path));
     path.function_name = "listdir";
     path.nullable = 1;
-#ifdef HAVE_FDOPENDIR
-    path.allow_fd = 1;
-    path.fd = -1;
-#endif
+
     if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O&:listdir", keywords,
-        path_converter, &path
-        ))
+                                     path_converter, &path)) {
         return NULL;
+    }
 
-    /* XXX Should redo this putting the (now four) versions of opendir
-       in separate files instead of having them all here... */
-#if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR)
     if (!path.narrow) {
         WIN32_FIND_DATAW wFileData;
         wchar_t *po_wchars;
@@ -3429,7 +3416,34 @@ exit:
 
     return list;
 
-#else
+}  /* end of _listdir_windows_no_opendir */
+
+#else  /* thus POSIX, ie: not (MS_WINDOWS and not HAVE_OPENDIR) */
+
+static PyObject *
+_posix_listdir(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+    path_t path;
+    PyObject *list = NULL;
+    static char *keywords[] = {"path", NULL};
+    int fd = -1;
+
+    PyObject *v;
+    DIR *dirp = NULL;
+    struct dirent *ep;
+    int return_str; /* if false, return bytes */
+
+    memset(&path, 0, sizeof(path));
+    path.function_name = "listdir";
+    path.nullable = 1;
+#ifdef HAVE_FDOPENDIR
+    path.allow_fd = 1;
+    path.fd = -1;
+#endif
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|O&:listdir", keywords,
+                                     path_converter, &path)) {
+        return NULL;
+    }
 
     errno = 0;
 #ifdef HAVE_FDOPENDIR
@@ -3522,9 +3536,18 @@ exit:
     path_cleanup(&path);
 
     return list;
+}  /* end of _posix_listdir */
+#endif  /* which OS */
 
-#endif /* which OS */
-}  /* end of posix_listdir */
+static PyObject *
+posix_listdir(PyObject *self, PyObject *args, PyObject *kwargs)
+{
+#if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR)
+    return _listdir_windows_no_opendir(self, args, kwargs);
+#else
+    return _posix_listdir(self, args, kwargs);
+#endif
+}
 
 #ifdef MS_WINDOWS
 /* A helper function for abspath on win32 */