summaryrefslogtreecommitdiffstats
path: root/PC/import_nt.c
diff options
context:
space:
mode:
Diffstat (limited to 'PC/import_nt.c')
-rw-r--r--PC/import_nt.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/PC/import_nt.c b/PC/import_nt.c
new file mode 100644
index 0000000..cac4734
--- /dev/null
+++ b/PC/import_nt.c
@@ -0,0 +1,44 @@
+/********************************************************************
+
+ importnt.c
+
+ Win32 specific import code.
+
+*/
+
+#include "allobjects.h"
+#include "osdefs.h"
+#include <windows.h>
+#include "import.h"
+#include "importdl.h"
+
+#ifndef WIN32_PATCH_LEVEL
+#define WIN32_PATCH_LEVEL "000"
+#endif
+
+extern BOOL PyWin_IsWin32s();
+
+FILE *PyWin_FindRegisteredModule( const char *moduleName, struct filedescr **ppFileDesc, char *pathBuf, int pathLen)
+{
+ char moduleKey[128];
+ struct filedescr *fdp = NULL;
+ FILE *fp;
+ int modNameSize = pathLen;
+ HKEY keyBase = PyWin_IsWin32s() ? HKEY_CLASSES_ROOT : HKEY_LOCAL_MACHINE;
+ strcpy(moduleKey, "Software\\Python\\PythonCore\\" WIN32_PATCH_LEVEL "\\Modules\\");
+ strcat(moduleKey, moduleName);
+ if (RegQueryValue(keyBase, moduleKey, pathBuf, &modNameSize)!=ERROR_SUCCESS)
+ return NULL;
+ // use the file extension to locate the type entry.
+ for (fdp = import_filetab; fdp->suffix != NULL; fdp++) {
+ int extLen=strlen(fdp->suffix);
+ if (modNameSize>extLen && strnicmp(pathBuf+(modNameSize-extLen-1),fdp->suffix,extLen)==0)
+ break;
+ }
+ if (fdp->suffix==NULL)
+ return NULL;
+ fp = fopen(pathBuf, fdp->mode);
+ if (fp != NULL)
+ *ppFileDesc = fdp;
+ return fp;
+}