summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1997-08-13 21:38:04 (GMT)
committerGuido van Rossum <guido@python.org>1997-08-13 21:38:04 (GMT)
commit00b299afea859017089328a4214b7eacb8c3b515 (patch)
tree132a24402c527d620eee2438cbd3c0448a15f689
parenteea1449a3426094d35c70a16f260d030624430ef (diff)
downloadcpython-00b299afea859017089328a4214b7eacb8c3b515.zip
cpython-00b299afea859017089328a4214b7eacb8c3b515.tar.gz
cpython-00b299afea859017089328a4214b7eacb8c3b515.tar.bz2
removed getpath_nt.c in favor of revamped getpathp.c
-rw-r--r--PC/getpath_nt.c203
1 files changed, 0 insertions, 203 deletions
diff --git a/PC/getpath_nt.c b/PC/getpath_nt.c
deleted file mode 100644
index d960d15..0000000
--- a/PC/getpath_nt.c
+++ /dev/null
@@ -1,203 +0,0 @@
-#include "Python.h"
-#include "osdefs.h"
-#include <windows.h>
-
-/* PREFIX and EXEC_PREFIX are meaningless on Windows */
-
-#ifndef PREFIX
-#define PREFIX ""
-#endif
-
-#ifndef EXEC_PREFIX
-#define EXEC_PREFIX ""
-#endif
-
-/*
-This is a special Win32 version of getpath.
-
-* There is no default path. There is nothing even remotely resembling
- a standard location. Maybe later "Program Files/Python", but not yet.
-
-* The Registry is used as the primary store for the Python path.
-
-* The environment variable PYTHONPATH _overrides_ the registry. This should
- allow a "standard" Python environment, but allow you to manually setup
- another (eg, a beta version).
-
-*/
-
-BOOL PyWin_IsWin32s()
-{
- static BOOL bIsWin32s = -1; // flag as "not yet looked"
-
- if (bIsWin32s==-1) {
- OSVERSIONINFO ver;
- ver.dwOSVersionInfoSize = sizeof(ver);
- GetVersionEx(&ver);
- bIsWin32s = ver.dwPlatformId == VER_PLATFORM_WIN32s;
- }
- return bIsWin32s;
-}
-
-/* Load a PYTHONPATH value from the registry
- Load from either HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER
-
- Returns NULL, or a pointer that should be free'd.
-*/
-static char *
-getpythonregpath(HKEY keyBase, BOOL bWin32s)
-{
- HKEY newKey = 0;
- DWORD nameSize = 0;
- DWORD dataSize = 0;
- DWORD numEntries = 0;
- LONG rc;
- char *retval = NULL;
- char *dataBuf;
- if ((rc=RegOpenKey(keyBase, "Software\\Python\\PythonCore\\" MS_DLL_ID "\\PythonPath",
- &newKey))==ERROR_SUCCESS) {
- RegQueryInfoKey(newKey, NULL, NULL, NULL, NULL, NULL, NULL,
- &numEntries, &nameSize, &dataSize, NULL, NULL );
- }
- if (bWin32s && numEntries==0 && dataSize==0) { /* must hardcode for Win32s */
- numEntries = 1;
- dataSize = 511;
- }
- if (numEntries) {
- /* Loop over all subkeys. */
- /* Win32s doesnt know how many subkeys, so we do
- it twice */
- char keyBuf[MAX_PATH+1];
- int index = 0;
- int off = 0;
- for(index=0;;index++) {
- long reqdSize = 0;
- DWORD rc = RegEnumKey(newKey, index, keyBuf,MAX_PATH+1);
- if (rc) break;
- rc = RegQueryValue(newKey, keyBuf, NULL, &reqdSize);
- if (rc) break;
- if (bWin32s && reqdSize==0) reqdSize = 512;
- dataSize += reqdSize + 1; /* 1 for the ";" */
- }
- dataBuf = malloc(dataSize+1);
- if (dataBuf==NULL) return NULL; /* pretty serious? Raise error? */
- /* Now loop over, grabbing the paths. Subkeys before main library */
- for(index=0;;index++) {
- int adjust;
- long reqdSize = dataSize;
- DWORD rc = RegEnumKey(newKey, index, keyBuf,MAX_PATH+1);
- if (rc) break;
- rc = RegQueryValue(newKey, keyBuf, dataBuf+off, &reqdSize);
- if (rc) break;
- if (reqdSize>1) { // If Nothing, or only '\0' copied.
- adjust = strlen(dataBuf+off);
- dataSize -= adjust;
- off += adjust;
- dataBuf[off++] = ';';
- dataBuf[off] = '\0';
- dataSize--;
- }
- }
- /* Additionally, win32s doesnt work as expected, so
- the specific strlen() is required for 3.1. */
- rc = RegQueryValue(newKey, "", dataBuf+off, &dataSize);
- if (rc==ERROR_SUCCESS) {
- if (strlen(dataBuf)==0)
- free(dataBuf);
- else
- retval = dataBuf; // caller will free
- }
- else
- free(dataBuf);
- }
-
- if (newKey)
- RegCloseKey(newKey);
- return retval;
-}
-/* Return the initial python search path. This is called once from
- initsys() to initialize sys.path. The environment variable
- PYTHONPATH is fetched and the default path appended. The default
- path may be passed to the preprocessor; if not, a system-dependent
- default is used. */
-
-char *
-Py_GetPath()
-{
- char *path = getenv("PYTHONPATH");
- char *defpath = PYTHONPATH;
- static char *buf = NULL;
- char *p;
- int n;
- extern char *Py_GetProgramName();
-
- if (buf != NULL) {
- free(buf);
- buf = NULL;
- }
-
- if (path == NULL) {
- char *machinePath, *userPath;
- int machineLen, userLen;
- /* lookup the registry */
- BOOL bWin32s = PyWin_IsWin32s();
-
- if (bWin32s) { /* are we running under Windows 3.1 Win32s */
- /* only CLASSES_ROOT is supported */
- machinePath = getpythonregpath(HKEY_CLASSES_ROOT, TRUE);
- userPath = NULL;
- } else {
- machinePath = getpythonregpath(HKEY_LOCAL_MACHINE, FALSE);
- userPath = getpythonregpath(HKEY_CURRENT_USER, FALSE);
- }
- if (machinePath==NULL && userPath==NULL) return defpath;
- machineLen = machinePath ? strlen(machinePath) : 0;
- userLen = userPath ? strlen(userPath) : 0;
- n = machineLen + userLen + 1;
- // this is a memory leak, as Python never frees it. Only ever called once, so big deal!
- buf = malloc(n);
- if (buf == NULL)
- Py_FatalError("not enough memory to copy module search path");
- p = buf;
- *p = '\0';
- if (machineLen) {
- strcpy(p, machinePath);
- p += machineLen;
- }
- if (userLen) {
- if (machineLen)
- *p++ = DELIM;
- strcpy(p, userPath);
- }
- if (userPath) free(userPath);
- if (machinePath) free(machinePath);
- } else {
-
- buf = malloc(strlen(path)+1);
- if (buf == NULL)
- Py_FatalError("not enough memory to copy module search path");
- strcpy(buf, path);
- }
- return buf;
-}
-
-/* Similar for Makefile variables $prefix and $exec_prefix */
-
-char *
-Py_GetPrefix()
-{
- return PREFIX;
-}
-
-char *
-Py_GetExecPrefix()
-{
- return EXEC_PREFIX;
-}
-
-char *
-Py_GetProgramFullPath()
-{
- extern char *Py_GetProgramName();
- return Py_GetProgramName();
-}