mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
Patch #708495: Port more stuff to OpenVMS.
This commit is contained in:
parent
e59e2bab8f
commit
c16f3bd8a3
11 changed files with 90 additions and 84 deletions
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue