mirror of https://github.com/python/cpython
RISCOS changes by dschwertberger.
This commit is contained in:
parent
1ca8bb374e
commit
48a680c097
|
@ -123,6 +123,21 @@ Socket methods:
|
|||
#include <os2.h>
|
||||
#endif
|
||||
|
||||
#ifdef RISCOS
|
||||
#define NO_DUP
|
||||
#undef off_t
|
||||
#undef uid_t
|
||||
#undef gid_t
|
||||
#undef errno
|
||||
#include <signal.h>
|
||||
#include "socklib.h"
|
||||
#include "inetlib.h"
|
||||
#include "netdb.h"
|
||||
#include "unixlib.h"
|
||||
#include "netinet/in.h"
|
||||
#include "sys/ioctl.h"
|
||||
#else /*RISCOS*/
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <signal.h>
|
||||
|
@ -148,6 +163,9 @@ Socket methods:
|
|||
#include <winsock.h>
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
|
||||
#endif /*RISCOS*/
|
||||
|
||||
#ifdef HAVE_SYS_UN_H
|
||||
#include <sys/un.h>
|
||||
#else
|
||||
|
@ -218,6 +236,12 @@ static PyObject *SSLErrorObject;
|
|||
#endif /* USE_SSL */
|
||||
|
||||
|
||||
#ifdef RISCOS
|
||||
/* Global variable which is !=0 if Python is running in a RISC OS taskwindow */
|
||||
static int taskwindow;
|
||||
#endif
|
||||
|
||||
|
||||
/* Convenience function to raise an error according to errno
|
||||
and return a NULL pointer from a function. */
|
||||
|
||||
|
@ -406,6 +430,9 @@ staticforward PyTypeObject PySocketSock_Type;
|
|||
static PySocketSockObject *
|
||||
PySocketSock_New(SOCKET_T fd, int family, int type, int proto)
|
||||
{
|
||||
#ifdef RISCOS
|
||||
int block = 1;
|
||||
#endif
|
||||
PySocketSockObject *s;
|
||||
PySocketSock_Type.ob_type = &PyType_Type;
|
||||
s = PyObject_New(PySocketSockObject, &PySocketSock_Type);
|
||||
|
@ -414,6 +441,11 @@ PySocketSock_New(SOCKET_T fd, int family, int type, int proto)
|
|||
s->sock_family = family;
|
||||
s->sock_type = type;
|
||||
s->sock_proto = proto;
|
||||
#ifdef RISCOS
|
||||
if(taskwindow) {
|
||||
socketioctl(s->sock_fd, 0x80046679, (u_long*)&block);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
@ -805,8 +837,10 @@ static PyObject *
|
|||
PySocketSock_setblocking(PySocketSockObject *s, PyObject *args)
|
||||
{
|
||||
int block;
|
||||
#ifndef RISCOS
|
||||
#ifndef MS_WINDOWS
|
||||
int delay_flag;
|
||||
#endif
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(args, "i:setblocking", &block))
|
||||
return NULL;
|
||||
|
@ -816,6 +850,7 @@ PySocketSock_setblocking(PySocketSockObject *s, PyObject *args)
|
|||
setsockopt( s->sock_fd, SOL_SOCKET, SO_NONBLOCK,
|
||||
(void *)(&block), sizeof( int ) );
|
||||
#else
|
||||
#ifndef RISCOS
|
||||
#ifndef MS_WINDOWS
|
||||
#ifdef PYOS_OS2
|
||||
block = !block;
|
||||
|
@ -833,6 +868,7 @@ PySocketSock_setblocking(PySocketSockObject *s, PyObject *args)
|
|||
ioctlsocket(s->sock_fd, FIONBIO, (u_long*)&block);
|
||||
#endif /* MS_WINDOWS */
|
||||
#endif /* __BEOS__ */
|
||||
#endif /* RISCOS */
|
||||
Py_END_ALLOW_THREADS
|
||||
|
||||
Py_INCREF(Py_None);
|
||||
|
@ -846,6 +882,30 @@ Set the socket to blocking (flag is true) or non-blocking (false).\n\
|
|||
This uses the FIONBIO ioctl with the O_NDELAY flag.";
|
||||
|
||||
|
||||
#ifdef RISCOS
|
||||
/* s.sleeptaskw(1 | 0) method */
|
||||
|
||||
static PyObject *
|
||||
PySocketSock_sleeptaskw(PySocketSockObject *s,PyObject *args)
|
||||
{
|
||||
int block;
|
||||
int delay_flag;
|
||||
if (!PyArg_GetInt(args, &block))
|
||||
return NULL;
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
socketioctl(s->sock_fd, 0x80046679, (u_long*)&block);
|
||||
Py_END_ALLOW_THREADS
|
||||
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
static char sleeptaskw_doc[] =
|
||||
"sleeptaskw(flag)\n\
|
||||
\n\
|
||||
Allow sleeps in taskwindows.";
|
||||
#endif
|
||||
|
||||
|
||||
/* s.setsockopt() method.
|
||||
With an integer third argument, sets an integer option.
|
||||
With a string third argument, sets an option from a buffer;
|
||||
|
@ -1464,6 +1524,10 @@ static PyMethodDef PySocketSock_methods[] = {
|
|||
setsockopt_doc},
|
||||
{"shutdown", (PyCFunction)PySocketSock_shutdown, METH_VARARGS,
|
||||
shutdown_doc},
|
||||
#ifdef RISCOS
|
||||
{"sleeptaskw", (PyCFunction)PySocketSock_sleeptaskw, METH_VARARGS,
|
||||
sleeptaskw_doc},
|
||||
#endif
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
|
@ -2445,6 +2509,12 @@ DL_EXPORT(void)
|
|||
init_socket(void)
|
||||
{
|
||||
PyObject *m, *d;
|
||||
#ifdef RISCOS
|
||||
_kernel_swi_regs r;
|
||||
r.r[0]=0;
|
||||
_kernel_swi(0x43380, &r, &r);
|
||||
taskwindow = r.r[0];
|
||||
#else
|
||||
#ifdef MS_WINDOWS
|
||||
if (!NTinit())
|
||||
return;
|
||||
|
@ -2454,6 +2524,7 @@ init_socket(void)
|
|||
return;
|
||||
#endif /* __TOS_OS2__ */
|
||||
#endif /* MS_WINDOWS */
|
||||
#endif /* RISCOS */
|
||||
#ifdef USE_SSL
|
||||
SSL_Type.ob_type = &PyType_Type;
|
||||
#endif
|
||||
|
|
|
@ -16,7 +16,9 @@
|
|||
#define GUSI_TO_MSL_EPOCH (4*365*24*60*60)
|
||||
#endif /* USE_GUSI2 */
|
||||
#else
|
||||
#ifndef RISCOS
|
||||
#include <sys/types.h>
|
||||
#endif /* RISCOS */
|
||||
#endif
|
||||
|
||||
#ifdef QUICKWIN
|
||||
|
@ -38,7 +40,7 @@ extern int ftime(struct timeb *);
|
|||
#include <i86.h>
|
||||
#else
|
||||
#ifdef MS_WINDOWS
|
||||
#include <windows.h>
|
||||
include <windows.h>
|
||||
#ifdef MS_WIN16
|
||||
/* These overrides not needed for Win32 */
|
||||
#define timezone _timezone
|
||||
|
@ -747,7 +749,9 @@ floatsleep(double secs)
|
|||
#if defined(__WATCOMC__) && !defined(__QNX__)
|
||||
/* XXX Can't interrupt this sleep */
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
#ifndef RISCOS
|
||||
delay((int)(secs * 1000 + 0.5)); /* delay() uses milliseconds */
|
||||
#endif
|
||||
Py_END_ALLOW_THREADS
|
||||
#else /* !__WATCOMC__ || __QNX__ */
|
||||
#ifdef MSDOS
|
||||
|
|
|
@ -137,7 +137,11 @@ intcatcher(int sig)
|
|||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
#ifdef RISCOS
|
||||
fprintf(stderr, message);
|
||||
#else
|
||||
write(2, message, strlen(message));
|
||||
#endif
|
||||
break;
|
||||
case 2:
|
||||
interrupted = 0;
|
||||
|
|
|
@ -13,6 +13,10 @@
|
|||
|
||||
int (*PyOS_InputHook)(void) = NULL;
|
||||
|
||||
#ifdef RISCOS
|
||||
int Py_RISCOSWimpFlag;
|
||||
#endif
|
||||
|
||||
/* This function restarts a fgets() after an EINTR error occurred
|
||||
except if PyOS_InterruptOccurred() returns true. */
|
||||
|
||||
|
@ -58,8 +62,17 @@ PyOS_StdioReadline(char *prompt)
|
|||
if ((p = PyMem_MALLOC(n)) == NULL)
|
||||
return NULL;
|
||||
fflush(stdout);
|
||||
#ifndef RISCOS
|
||||
if (prompt)
|
||||
fprintf(stderr, "%s", prompt);
|
||||
#else
|
||||
if (prompt) {
|
||||
if(Py_RISCOSWimpFlag)
|
||||
fprintf(stderr, "\x0cr%s\x0c", prompt);
|
||||
else
|
||||
fprintf(stderr, "%s", prompt);
|
||||
}
|
||||
#endif
|
||||
fflush(stderr);
|
||||
switch (my_fgets(p, (int)n, stdin)) {
|
||||
case 0: /* Normal case */
|
||||
|
|
|
@ -60,11 +60,20 @@ struct _inittab *PyImport_Inittab = _PyImport_Inittab;
|
|||
|
||||
/* these tables define the module suffixes that Python recognizes */
|
||||
struct filedescr * _PyImport_Filetab = NULL;
|
||||
|
||||
#ifdef RISCOS
|
||||
static const struct filedescr _PyImport_StandardFiletab[] = {
|
||||
{"/py", "r", PY_SOURCE},
|
||||
{"/pyc", "rb", PY_COMPILED},
|
||||
{0, 0}
|
||||
};
|
||||
#else
|
||||
static const struct filedescr _PyImport_StandardFiletab[] = {
|
||||
{".py", "r", PY_SOURCE},
|
||||
{".pyc", "rb", PY_COMPILED},
|
||||
{0, 0}
|
||||
};
|
||||
#endif
|
||||
|
||||
/* Initialize things */
|
||||
|
||||
|
@ -95,8 +104,13 @@ _PyImport_Init(void)
|
|||
if (Py_OptimizeFlag) {
|
||||
/* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
|
||||
for (; filetab->suffix != NULL; filetab++) {
|
||||
#ifndef RISCOS
|
||||
if (strcmp(filetab->suffix, ".pyc") == 0)
|
||||
filetab->suffix = ".pyo";
|
||||
#else
|
||||
if (strcmp(filetab->suffix, "/pyc") == 0)
|
||||
filetab->suffix = "/pyo";
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -842,7 +856,9 @@ find_module(char *realname, PyObject *path, char *buf, size_t buflen,
|
|||
struct _frozen *f;
|
||||
struct filedescr *fdp = NULL;
|
||||
FILE *fp = NULL;
|
||||
#ifndef RISCOS
|
||||
struct stat statbuf;
|
||||
#endif
|
||||
static struct filedescr fd_frozen = {"", "", PY_FROZEN};
|
||||
static struct filedescr fd_builtin = {"", "", C_BUILTIN};
|
||||
static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
|
||||
|
@ -951,6 +967,15 @@ find_module(char *realname, PyObject *path, char *buf, size_t buflen,
|
|||
}
|
||||
#else
|
||||
/* XXX How are you going to test for directories? */
|
||||
#ifdef RISCOS
|
||||
{
|
||||
static struct filedescr fd = {"", "", PKG_DIRECTORY};
|
||||
if (isdir(buf)) {
|
||||
if (find_init_module(buf))
|
||||
return &fd;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#ifdef macintosh
|
||||
fdp = PyMac_FindModuleExtension(buf, &len, name);
|
||||
|
@ -1196,6 +1221,39 @@ find_init_module(char *buf)
|
|||
buf[save_len] = '\0';
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#ifdef RISCOS
|
||||
static int
|
||||
find_init_module(buf)
|
||||
char *buf;
|
||||
{
|
||||
int save_len = strlen(buf);
|
||||
int i = save_len;
|
||||
|
||||
if (save_len + 13 >= MAXPATHLEN)
|
||||
return 0;
|
||||
buf[i++] = SEP;
|
||||
strcpy(buf+i, "__init__/py");
|
||||
if (isfile(buf)) {
|
||||
buf[save_len] = '\0';
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (Py_OptimizeFlag)
|
||||
strcpy(buf+i, "o");
|
||||
else
|
||||
strcpy(buf+i, "c");
|
||||
if (isfile(buf)) {
|
||||
buf[save_len] = '\0';
|
||||
return 1;
|
||||
}
|
||||
buf[save_len] = '\0';
|
||||
return 0;
|
||||
}
|
||||
#endif /*RISCOS*/
|
||||
|
||||
#endif /* HAVE_STAT */
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue