diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2003-05-03 09:14:54 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2003-05-03 09:14:54 (GMT) |
commit | c16f3bd8a391a68427a95e15a3c1894198ff0377 (patch) | |
tree | 113dca8c40c8a42cb665e6bcc4af44f9f68bd230 /Python | |
parent | e59e2bab8fe0fc3d20e815ac0f9b83d361d0d715 (diff) | |
download | cpython-c16f3bd8a391a68427a95e15a3c1894198ff0377.zip cpython-c16f3bd8a391a68427a95e15a3c1894198ff0377.tar.gz cpython-c16f3bd8a391a68427a95e15a3c1894198ff0377.tar.bz2 |
Patch #708495: Port more stuff to OpenVMS.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/dynload_shlib.c | 28 | ||||
-rw-r--r-- | Python/sysmodule.c | 19 |
2 files changed, 47 insertions, 0 deletions
diff --git a/Python/dynload_shlib.c b/Python/dynload_shlib.c index 61674ba..af23f80 100644 --- a/Python/dynload_shlib.c +++ b/Python/dynload_shlib.c @@ -40,16 +40,27 @@ const struct filedescr _PyImport_DynLoadFiletab[] = { {".pyd", "rb", C_EXTENSION}, {".dll", "rb", C_EXTENSION}, #else +#ifdef __VMS + {".exe", "rb", C_EXTENSION}, + {".EXE", "rb", C_EXTENSION}, + {"module.exe", "rb", C_EXTENSION}, + {"MODULE.EXE", "rb", C_EXTENSION}, +#else {".so", "rb", C_EXTENSION}, {"module.so", "rb", C_EXTENSION}, #endif #endif +#endif {0, 0} }; static struct { dev_t dev; +#ifdef __VMS + ino_t ino[3]; +#else ino_t ino; +#endif void *handle; } handles[128]; static int nhandles = 0; @@ -87,7 +98,13 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname, } if (nhandles < 128) { handles[nhandles].dev = statb.st_dev; +#ifdef __VMS + handles[nhandles].ino[0] = statb.st_ino[0]; + handles[nhandles].ino[1] = statb.st_ino[1]; + handles[nhandles].ino[2] = statb.st_ino[2]; +#else handles[nhandles].ino = statb.st_ino; +#endif } } @@ -98,6 +115,17 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname, if (Py_VerboseFlag) printf("dlopen(\"%s\", %x);\n", pathname, dlopenflags); +#ifdef __VMS + /* VMS currently don't allow a pathname, use a logical name instead */ + /* Concatenate 'python_module_' and shortname */ + /* so "import vms.bar" will use the logical python_module_bar */ + /* As C module use only one name space this is probably not a */ + /* important limitation */ + PyOS_snprintf(pathbuf, sizeof(pathbuf), "python_module_%-.200s", + shortname); + pathname = pathbuf; +#endif + handle = dlopen(pathname, dlopenflags); if (handle == NULL) { diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 50b9912..d06d18a 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -32,6 +32,10 @@ extern void *PyWin_DLLhModule; extern const char *PyWin_DLLVersionString; #endif +#ifdef __VMS +#include <unixlib.h> +#endif + PyObject * PySys_GetObject(char *name) { @@ -1050,7 +1054,22 @@ makeargvobject(int argc, char **argv) if (av != NULL) { int i; for (i = 0; i < argc; i++) { +#ifdef __VMS + PyObject *v; + + /* argv[0] is the script pathname if known */ + if (i == 0) { + char* fn = decc$translate_vms(argv[0]); + if ((fn == (char *)0) || fn == (char *)-1) + v = PyString_FromString(argv[0]); + else + v = PyString_FromString( + decc$translate_vms(argv[0])); + } else + v = PyString_FromString(argv[i]); +#else PyObject *v = PyString_FromString(argv[i]); +#endif if (v == NULL) { Py_DECREF(av); av = NULL; |