Commit 1948094b authored by sof's avatar sof
Browse files

[project @ 2001-12-03 20:59:08 by sof]

Support IO.hWaitForInput on Win32 platforms (on file and socket handles).
parent d765456f
......@@ -3,7 +3,7 @@
#undef DEBUG_DUMP
-- -----------------------------------------------------------------------------
-- $Id: PrelIO.hs,v 1.4 2001/11/26 20:04:00 sof Exp $
-- $Id: PrelIO.hs,v 1.5 2001/12/03 20:59:08 sof Exp $
--
-- (c) The University of Glasgow, 1992-2001
--
......@@ -135,11 +135,11 @@ hWaitForInput h msecs = do
else do
r <- throwErrnoIfMinus1Retry "hReady"
(inputReady (fromIntegral (haFD handle_)) (fromIntegral msecs))
(inputReady (fromIntegral (haFD handle_)) (fromIntegral msecs) (haIsStream handle_))
return (r /= 0)
foreign import "inputReady" unsafe
inputReady :: CInt -> CInt -> IO CInt
inputReady :: CInt -> CInt -> Bool -> IO CInt
-- ---------------------------------------------------------------------------
-- hGetChar
......
/* -----------------------------------------------------------------------------
* $Id: HsStd.h,v 1.5 2001/11/26 20:04:00 sof Exp $
* $Id: HsStd.h,v 1.6 2001/12/03 20:59:08 sof Exp $
*
* Definitions for package `std' which are visible in Haskell land.
*
......@@ -91,7 +91,7 @@ int *ghcErrno(void);
HsInt systemCmd(HsAddr cmd);
/* in inputReady.c */
int inputReady(int fd, int msecs);
int inputReady(int fd, int msecs, int isSock);
/* in progargs.c */
HsAddr get_prog_argv(void);
......
/*
* (c) The GRASP/AQUA Project, Glasgow University, 1994-1998
*
* $Id: inputReady.c,v 1.9 2001/08/14 13:40:08 sewardj Exp $
* $Id: inputReady.c,v 1.10 2001/12/03 20:59:08 sof Exp $
*
* hReady Runtime Support
*/
......@@ -16,17 +16,17 @@
* *character* from this file object without blocking?'
*/
int
inputReady(int fd, int msecs)
inputReady(int fd, int msecs, int isSock)
{
if
#ifndef mingw32_TARGET_OS
( 1 ) {
#else
( isSock ) {
int maxfd, ready;
fd_set rfd;
struct timeval tv;
#endif
#ifdef mingw32_TARGET_OS
return 1;
#else
FD_ZERO(&rfd);
FD_SET(fd, &rfd);
......@@ -45,6 +45,21 @@ inputReady(int fd, int msecs)
/* 1 => Input ready, 0 => not ready, -1 => error */
return (ready);
#endif
#ifdef mingw32_TARGET_OS
} else {
DWORD rc;
HANDLE hFile = (HANDLE)_get_osfhandle(fd);
rc = WaitForSingleObject( hFile,
msecs /*millisecs*/);
/* 1 => Input ready, 0 => not ready, -1 => error */
switch (rc) {
case WAIT_TIMEOUT: return 0;
case WAIT_OBJECT_0: return 1;
default: return -1;
}
}
#endif
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment