Patch #708495: Port more stuff to OpenVMS.

This commit is contained in:
Martin v. Löwis 2003-05-03 09:14:54 +00:00
parent e59e2bab8f
commit c16f3bd8a3
11 changed files with 90 additions and 84 deletions

View file

@ -39,17 +39,28 @@ const struct filedescr _PyImport_DynLoadFiletab[] = {
#if defined(PYOS_OS2) && defined(PYCC_GCC)
{".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) {

View file

@ -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;