mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Mac hack to make select() work again...
This commit is contained in:
parent
4f074044be
commit
290283bb39
1 changed files with 61 additions and 0 deletions
|
@ -49,6 +49,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
#ifdef macintosh
|
#ifdef macintosh
|
||||||
#define MAC_TCL
|
#define MAC_TCL
|
||||||
|
#include "myselect.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <tcl.h>
|
#include <tcl.h>
|
||||||
|
@ -1590,6 +1591,66 @@ PyMacConvertEvent(eventPtr)
|
||||||
return TkMacConvertEvent(eventPtr);
|
return TkMacConvertEvent(eventPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USE_GUSI
|
||||||
|
/*
|
||||||
|
* For Python we have to override this routine (from TclMacNotify),
|
||||||
|
* since we use GUSI for our sockets, not Tcl streams. Hence, we have
|
||||||
|
* to use GUSI select to see whether our socket is ready. Note that
|
||||||
|
* createfilehandler (above) sets the type to TCL_UNIX_FD for our
|
||||||
|
* files and sockets.
|
||||||
|
*
|
||||||
|
* NOTE: this code was lifted from Tcl 7.6, it may need to be modified
|
||||||
|
* for other versions. */
|
||||||
|
|
||||||
|
int
|
||||||
|
Tcl_FileReady(file, mask)
|
||||||
|
Tcl_File file; /* File handle for a stream. */
|
||||||
|
int mask; /* OR'ed combination of TCL_READABLE,
|
||||||
|
* TCL_WRITABLE, and TCL_EXCEPTION:
|
||||||
|
* indicates conditions caller cares about. */
|
||||||
|
{
|
||||||
|
int type;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
fd = (int) Tcl_GetFileInfo(file, &type);
|
||||||
|
|
||||||
|
if (type == TCL_MAC_SOCKET) {
|
||||||
|
return TclMacSocketReady(file, mask);
|
||||||
|
} else if (type == TCL_MAC_FILE) {
|
||||||
|
/*
|
||||||
|
* Under the Macintosh, files are always ready, so we just
|
||||||
|
* return the mask that was passed in.
|
||||||
|
*/
|
||||||
|
|
||||||
|
return mask;
|
||||||
|
} else if (type == TCL_UNIX_FD) {
|
||||||
|
fd_set readset, writeset, excset;
|
||||||
|
struct timeval tv;
|
||||||
|
|
||||||
|
FD_ZERO(&readset);
|
||||||
|
FD_ZERO(&writeset);
|
||||||
|
FD_ZERO(&excset);
|
||||||
|
|
||||||
|
if ( mask & TCL_READABLE ) FD_SET(fd, &readset);
|
||||||
|
if ( mask & TCL_WRITABLE ) FD_SET(fd, &writeset);
|
||||||
|
if ( mask & TCL_EXCEPTION ) FD_SET(fd, &excset);
|
||||||
|
|
||||||
|
tv.tv_sec = tv.tv_usec = 0;
|
||||||
|
if ( select(fd+1, &readset, &writeset, &excset, &tv) <= 0 )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
mask = 0;
|
||||||
|
if ( FD_ISSET(fd, &readset) ) mask |= TCL_READABLE;
|
||||||
|
if ( FD_ISSET(fd, &writeset) ) mask |= TCL_WRITABLE;
|
||||||
|
if ( FD_ISSET(fd, &excset) ) mask |= TCL_EXCEPTION;
|
||||||
|
|
||||||
|
return mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* USE_GUSI */
|
||||||
|
|
||||||
#if GENERATINGCFM
|
#if GENERATINGCFM
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue