os2 patch by Jeff Rush

This commit is contained in:
Guido van Rossum 1997-11-22 21:53:48 +00:00
parent c0b93191e6
commit 8e9ebfd337
12 changed files with 459 additions and 28 deletions

View file

@ -47,6 +47,7 @@ PERFORMANCE OF THIS SOFTWARE.
_AIX -- AIX style dynamic linking
MS_WIN32 -- Windows NT style dynamic linking (using DLLs)
MS_WIN16 -- Windows 16-bit dynamic linking (using DLLs)
PYOS_OS2 -- IBM OS/2 dynamic linking (using DLLs)
_DL_FUNCPTR_DEFINED -- if the typedef dl_funcptr has been defined
USE_MAC_DYNAMIC_LOADING -- Mac CFM shared libraries
SHORT_EXT -- short extension for dynamic module, e.g. ".so"
@ -76,6 +77,17 @@ typedef void (*dl_funcptr)();
#define LONG_EXT "module.sl"
#endif
#if defined(PYOS_OS2)
#define DYNAMIC_LINK
#define INCL_DOSERRORS
#define INCL_DOSMODULEMGR
#include <os2.h>
typedef int (* APIENTRY dl_funcptr)();
#define _DL_FUNCPTR_DEFINED 1
#define SHORT_EXT ".pyd"
#define LONG_EXT ".dll"
#endif
#if defined(__NetBSD__)
#define DYNAMIC_LINK
#define USE_SHLIB
@ -458,6 +470,32 @@ _PyImport_LoadDynamicModule(name, pathname, fp)
p = GetProcAddress(hDLL, funcname);
}
#endif /* MS_WIN16 */
#if defined(PYOS_OS2)
{
APIRET rc;
HMODULE hDLL;
char failreason[256];
rc = DosLoadModule(failreason,
sizeof(failreason),
pathname,
&hDLL);
if (rc != NO_ERROR) {
char errBuf[256];
sprintf(errBuf,
"DLL load failed, rc = %d, problem '%s': %s", rc, failreason);
PyErr_SetString(PyExc_ImportError, errBuf);
return NULL;
}
rc = DosQueryProcAddr(hDLL, 0L, funcname, &p);
if (rc != NO_ERROR)
p = NULL; /* Signify Failure to Acquire Entrypoint */
}
#endif /* PYOS_OS2 */
#ifdef USE_DL
p = dl_loadmod(Py_GetProgramName(), pathname, funcname);
#endif /* USE_DL */

View file

@ -149,6 +149,10 @@ void init_thread _P0()
#include "thread_nt.h"
#endif
#ifdef OS2_THREADS
#include "thread_os2.h"
#endif
/*
#ifdef FOOBAR_THREADS
#include "thread_foobar.h"

View file

@ -56,7 +56,7 @@ int start_new_thread(void (*func)(void *), void *arg)
int aThread;
int success = 1;
aThread = _beginthread(func,4096,arg);
aThread = _beginthread(func,NULL,65536,arg);
if( aThread == -1 ) {
success = 0;
@ -210,7 +210,7 @@ void free_sema(type_sema aSemaphore)
}
void down_sema(type_sema aSemaphore, int waitflag)
int down_sema(type_sema aSemaphore, int waitflag)
{
return -1;
}