summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2003-05-03 09:14:54 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2003-05-03 09:14:54 (GMT)
commitc16f3bd8a391a68427a95e15a3c1894198ff0377 (patch)
tree113dca8c40c8a42cb665e6bcc4af44f9f68bd230 /Python
parente59e2bab8fe0fc3d20e815ac0f9b83d361d0d715 (diff)
downloadcpython-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.c28
-rw-r--r--Python/sysmodule.c19
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;