From 7bf6833e178696b9815fd4e4c6d1cecc8b46bdd2 Mon Sep 17 00:00:00 2001 From: Andrew MacIntyre Date: Sun, 3 Mar 2002 02:59:16 +0000 Subject: [PATCH] OS/2 EMX port changes (Modules part of patch #450267): Modules/ _hotshot.c dbmmodule.c fcntlmodule.c main.c pwdmodule.c readline.c selectmodule.c signalmodule.c termios.c timemodule.c unicodedata.c --- Modules/_hotshot.c | 8 ++++++-- Modules/dbmmodule.c | 4 ++++ Modules/fcntlmodule.c | 8 +++++++- Modules/main.c | 6 +++++- Modules/pwdmodule.c | 4 ++++ Modules/readline.c | 4 ++++ Modules/selectmodule.c | 2 +- Modules/signalmodule.c | 2 +- Modules/termios.c | 4 ++++ Modules/timemodule.c | 8 +++++++- Modules/unicodedata.c | 8 ++++---- 11 files changed, 47 insertions(+), 11 deletions(-) diff --git a/Modules/_hotshot.c b/Modules/_hotshot.c index 1eecc7efcc0..97037ac4ed8 100644 --- a/Modules/_hotshot.c +++ b/Modules/_hotshot.c @@ -26,7 +26,7 @@ typedef __int64 hs_time; #ifndef HAVE_GETTIMEOFDAY #error "This module requires gettimeofday() on non-Windows platforms!" #endif -#ifdef macintosh +#if defined(macintosh) || (defined(PYOS_OS2) && defined(PYCC_GCC)) #include #else #include @@ -51,6 +51,10 @@ typedef struct timeval hs_time; #define PATH_MAX 254 #endif +#if defined(PYOS_OS2) && defined(PYCC_GCC) +#define PATH_MAX 260 +#endif + #ifndef PATH_MAX # ifdef MAX_PATH # define PATH_MAX MAX_PATH @@ -987,7 +991,7 @@ calibrate(void) } #endif } -#if defined(MS_WIN32) || defined(macintosh) +#if defined(MS_WIN32) || defined(macintosh) || defined(PYOS_OS2) rusage_diff = -1; #else { diff --git a/Modules/dbmmodule.c b/Modules/dbmmodule.c index 233487d6122..056af4986b2 100644 --- a/Modules/dbmmodule.c +++ b/Modules/dbmmodule.c @@ -13,7 +13,11 @@ */ #if defined(HAVE_NDBM_H) #include +#if defined(PYOS_OS2) && !defined(PYCC_GCC) static char *which_dbm = "ndbm"; +#else +static char *which_dbm = "GNU gdbm"; /* EMX port of GDBM */ +#endif #elif defined(HAVE_DB1_NDBM_H) #include static char *which_dbm = "BSD db"; diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c index 9f84a2c1432..13cd0f76e4c 100644 --- a/Modules/fcntlmodule.c +++ b/Modules/fcntlmodule.c @@ -222,12 +222,17 @@ fcntl_lockf(PyObject *self, PyObject *args) &lenobj, &startobj, &whence)) return NULL; +#if defined(PYOS_OS2) && defined(PYCC_GCC) + PyErr_SetString(PyExc_NotImplementedError, + "lockf not supported on OS/2 (EMX)"); + return NULL; +#else #ifndef LOCK_SH #define LOCK_SH 1 /* shared lock */ #define LOCK_EX 2 /* exclusive lock */ #define LOCK_NB 4 /* don't block when locking */ #define LOCK_UN 8 /* unlock */ -#endif +#endif /* LOCK_SH */ { struct flock l; if (code == LOCK_UN) @@ -275,6 +280,7 @@ fcntl_lockf(PyObject *self, PyObject *args) } Py_INCREF(Py_None); return Py_None; +#endif /* defined(PYOS_OS2) && defined(PYCC_GCC) */ } static char lockf_doc [] = diff --git a/Modules/main.c b/Modules/main.c index b36714c14d9..9ce8bef79fa 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -8,11 +8,15 @@ #include #endif -#if defined(PYOS_OS2) || defined(MS_WINDOWS) +#if (defined(PYOS_OS2) && !defined(PYCC_GCC)) || defined(MS_WINDOWS) #define PYTHONHOMEHELP "\\lib" #else +#if defined(PYOS_OS2) && defined(PYCC_GCC) +#define PYTHONHOMEHELP "/Lib" +#else #define PYTHONHOMEHELP "/pythonX.X" #endif +#endif #include "pygetopt.h" diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c index 35afc4ef28a..91989b710ea 100644 --- a/Modules/pwdmodule.c +++ b/Modules/pwdmodule.c @@ -128,8 +128,12 @@ pwd_getpwall(PyObject *self, PyObject *args) return NULL; if ((d = PyList_New(0)) == NULL) return NULL; +#if defined(PYOS_OS2) && defined(PYCC_GCC) + if ((p = getpwuid(0)) != NULL) { +#else setpwent(); while ((p = getpwent()) != NULL) { +#endif PyObject *v = mkpwent(p); if (v == NULL || PyList_Append(d, v) != 0) { Py_XDECREF(v); diff --git a/Modules/readline.c b/Modules/readline.c index 9b4d9522b0e..94aa1dbcabc 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -507,6 +507,10 @@ static void setup_readline(void) { rl_readline_name = "python"; +#if defined(PYOS_OS2) && defined(PYCC_GCC) + /* Allow $if term= in .inputrc to work */ + rl_terminal_name = getenv("TERM"); +#endif /* Force rebind of TAB to insert-tab */ rl_bind_key('\t', rl_insert); /* Bind both ESC-TAB and ESC-ESC to the completion function */ diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index ceaf3fa92d2..0a29f2efd5c 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -33,7 +33,7 @@ extern void bzero(void *, int); #include #endif -#if defined(PYOS_OS2) +#if defined(PYOS_OS2) && !defined(PYCC_GCC) #include #include #endif diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c index e34f051398c..b27c4b74a79 100644 --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -16,7 +16,7 @@ #define SIG_ERR ((PyOS_sighandler_t)(-1)) #endif -#if defined(PYOS_OS2) +#if defined(PYOS_OS2) && !defined(PYCC_GCC) #define NSIG 12 #include #endif diff --git a/Modules/termios.c b/Modules/termios.c index aaabe6034f9..0c5697f2851 100644 --- a/Modules/termios.c +++ b/Modules/termios.c @@ -384,7 +384,9 @@ static struct constant { #ifdef OLCUC {"OLCUC", OLCUC}, #endif +#ifdef ONLCR {"ONLCR", ONLCR}, +#endif #ifdef OCRNL {"OCRNL", OCRNL}, #endif @@ -552,7 +554,9 @@ static struct constant { #ifdef VLNEXT {"VLNEXT", VLNEXT}, #endif +#ifdef VEOL2 {"VEOL2", VEOL2}, +#endif #ifdef B460800 diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 6647ecc8690..5d7fa51e998 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -54,6 +54,12 @@ extern int ftime(struct timeb *); #undef HAVE_CLOCK /* We have our own version down below */ #endif /* MS_WIN32 && !MS_WIN64 */ +#if defined(PYOS_OS2) +#define INCL_DOS +#define INCL_ERRORS +#include +#endif + #if defined(PYCC_VACPP) #include #endif @@ -752,7 +758,7 @@ static int floatsleep(double secs) { /* XXX Should test for MS_WIN32 first! */ -#if defined(HAVE_SELECT) && !defined(__BEOS__) +#if defined(HAVE_SELECT) && !defined(__BEOS__) && !defined(__EMX__) struct timeval t; double frac; frac = fmod(secs, 1.0); diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index 36c96e4a633..20b53a7cc4d 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -277,7 +277,7 @@ _gethash(const char *s, int len, int scale) } static int -_getname(Py_UCS4 code, char* buffer, int buflen) +_Py_getname(Py_UCS4 code, char* buffer, int buflen) { int offset; int i; @@ -334,7 +334,7 @@ _cmpname(int code, const char* name, int namelen) /* check if code corresponds to the given name */ int i; char buffer[NAME_MAXLEN]; - if (!_getname(code, buffer, sizeof(buffer))) + if (!_Py_getname(code, buffer, sizeof(buffer))) return 0; for (i = 0; i < namelen; i++) { if (toupper(name[i]) != buffer[i]) @@ -384,7 +384,7 @@ _getcode(const char* name, int namelen, Py_UCS4* code) static const _PyUnicode_Name_CAPI hashAPI = { sizeof(_PyUnicode_Name_CAPI), - _getname, + _Py_getname, _getcode }; @@ -407,7 +407,7 @@ unicodedata_name(PyObject* self, PyObject* args) return NULL; } - if (!_getname((Py_UCS4) *PyUnicode_AS_UNICODE(v), + if (!_Py_getname((Py_UCS4) *PyUnicode_AS_UNICODE(v), name, sizeof(name))) { if (defobj == NULL) { PyErr_SetString(PyExc_ValueError, "no such name");