diff options
author | Gregory P. Smith <greg@krypto.org> | 2013-03-21 01:51:33 (GMT) |
---|---|---|
committer | Gregory P. Smith <greg@krypto.org> | 2013-03-21 01:51:33 (GMT) |
commit | 16ea14a690720c0cd09a3f0a7357e909f87e659c (patch) | |
tree | 85580f444c0b0ec451159cc077aa3ae1e3e2c7d9 /Modules | |
parent | e25df59427df97c40da28ce469e1be46a2643e4a (diff) | |
download | cpython-16ea14a690720c0cd09a3f0a7357e909f87e659c.zip cpython-16ea14a690720c0cd09a3f0a7357e909f87e659c.tar.gz cpython-16ea14a690720c0cd09a3f0a7357e909f87e659c.tar.bz2 |
Refactor the Windows specific and POSIX specific implementations of
listdir into two separate coherent functions rather than interleaved
#ifdef's.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/posixmodule.c | 65 |
1 files changed, 44 insertions, 21 deletions
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 3ddeef4..870da8a 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -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 */ |