summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'Modules')
-rw-r--r--Modules/clinic/posixmodule.c.h40
-rw-r--r--Modules/posixmodule.c32
2 files changed, 71 insertions, 1 deletions
diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h
index fc39ab7..0238d3a 100644
--- a/Modules/clinic/posixmodule.c.h
+++ b/Modules/clinic/posixmodule.c.h
@@ -1848,6 +1848,40 @@ exit:
#if defined(MS_WINDOWS)
+PyDoc_STRVAR(os__findfirstfile__doc__,
+"_findfirstfile($module, path, /)\n"
+"--\n"
+"\n"
+"A function to get the real file name without accessing the file in Windows.");
+
+#define OS__FINDFIRSTFILE_METHODDEF \
+ {"_findfirstfile", (PyCFunction)os__findfirstfile, METH_O, os__findfirstfile__doc__},
+
+static PyObject *
+os__findfirstfile_impl(PyObject *module, path_t *path);
+
+static PyObject *
+os__findfirstfile(PyObject *module, PyObject *arg)
+{
+ PyObject *return_value = NULL;
+ path_t path = PATH_T_INITIALIZE("_findfirstfile", "path", 0, 0);
+
+ if (!path_converter(arg, &path)) {
+ goto exit;
+ }
+ return_value = os__findfirstfile_impl(module, &path);
+
+exit:
+ /* Cleanup for path */
+ path_cleanup(&path);
+
+ return return_value;
+}
+
+#endif /* defined(MS_WINDOWS) */
+
+#if defined(MS_WINDOWS)
+
PyDoc_STRVAR(os__getvolumepathname__doc__,
"_getvolumepathname($module, /, path)\n"
"--\n"
@@ -11451,6 +11485,10 @@ exit:
#define OS__GETFINALPATHNAME_METHODDEF
#endif /* !defined(OS__GETFINALPATHNAME_METHODDEF) */
+#ifndef OS__FINDFIRSTFILE_METHODDEF
+ #define OS__FINDFIRSTFILE_METHODDEF
+#endif /* !defined(OS__FINDFIRSTFILE_METHODDEF) */
+
#ifndef OS__GETVOLUMEPATHNAME_METHODDEF
#define OS__GETVOLUMEPATHNAME_METHODDEF
#endif /* !defined(OS__GETVOLUMEPATHNAME_METHODDEF) */
@@ -11986,4 +12024,4 @@ exit:
#ifndef OS_WAITSTATUS_TO_EXITCODE_METHODDEF
#define OS_WAITSTATUS_TO_EXITCODE_METHODDEF
#endif /* !defined(OS_WAITSTATUS_TO_EXITCODE_METHODDEF) */
-/*[clinic end generated code: output=8b60de6ddb925bc3 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=a36904281a8a7507 input=a9049054013a1b77]*/
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index d3c0aa6..2c32a45 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -4809,6 +4809,37 @@ cleanup:
return result;
}
+/*[clinic input]
+os._findfirstfile
+ path: path_t
+ /
+A function to get the real file name without accessing the file in Windows.
+[clinic start generated code]*/
+
+static PyObject *
+os__findfirstfile_impl(PyObject *module, path_t *path)
+/*[clinic end generated code: output=106dd3f0779c83dd input=0734dff70f60e1a8]*/
+{
+ PyObject *result;
+ HANDLE hFindFile;
+ WIN32_FIND_DATAW wFileData;
+ WCHAR *wRealFileName;
+
+ Py_BEGIN_ALLOW_THREADS
+ hFindFile = FindFirstFileW(path->wide, &wFileData);
+ Py_END_ALLOW_THREADS
+
+ if (hFindFile == INVALID_HANDLE_VALUE) {
+ path_error(path);
+ return NULL;
+ }
+
+ wRealFileName = wFileData.cFileName;
+ result = PyUnicode_FromWideChar(wRealFileName, wcslen(wRealFileName));
+ FindClose(hFindFile);
+ return result;
+}
+
/*[clinic input]
os._getvolumepathname
@@ -15961,6 +15992,7 @@ static PyMethodDef posix_methods[] = {
OS__GETFULLPATHNAME_METHODDEF
OS__GETDISKUSAGE_METHODDEF
OS__GETFINALPATHNAME_METHODDEF
+ OS__FINDFIRSTFILE_METHODDEF
OS__GETVOLUMEPATHNAME_METHODDEF
OS__PATH_SPLITROOT_METHODDEF
OS__PATH_NORMPATH_METHODDEF