Changed the makefile system to autoconf/automake.
[cacao.git] / src / threads / green / threadio.c
index e538b409ac23d64bd36baa3ca0f89529989f756b..fed33a70bfc0e140a8f5ea4e9b73d5ec0005a8de 100644 (file)
@@ -12,7 +12,9 @@
 
 #define        DBG(s)                    
 
-#include "sysdep/defines.h"
+#include "config.h"
+
+#include "defines.h"
 
 #include <sys/types.h>
 #include <sys/time.h>
@@ -107,6 +109,41 @@ threadedFileDescriptor(int fd)
     return (fd);
 }
 
+void clear_thread_flags(void)
+{
+#if !defined(BLOCKING_CALLS)
+       int fl, fd;
+
+#if defined(HAVE_FCNTL) && defined(O_NONBLOCK)
+       fd = fileno(stdin);
+    fl = fcntl(fd, F_GETFL, 0);
+    fl = fcntl(fd, F_SETFL, fl & (~O_NONBLOCK));
+
+       fd = fileno(stdout);
+    fl = fcntl(fd, F_GETFL, 0);
+    fl = fcntl(fd, F_SETFL, fl & (~O_NONBLOCK));
+
+       fd = fileno(stderr);
+    fl = fcntl(fd, F_GETFL, 0);
+    fl = fcntl(fd, F_SETFL, fl & (~O_NONBLOCK));
+#elif defined(HAVE_IOCTL) && defined(FIONBIO)
+       fl = 0;
+       fd = fileno(stdin);
+    (void) ioctl(fd, FIONBIO, &fl);
+
+       fd = fileno(stdout);
+    (void) ioctl(fd, FIONBIO, &fl);
+
+       fd = fileno(stderr);
+    (void) ioctl(fd, FIONBIO, &fl);
+#endif
+
+#endif
+fflush (stdout);
+fflush (stderr);
+}
+
+
 /*
  * Threaded create socket.
  */
@@ -172,7 +209,7 @@ threadedAccept(int fd, struct sockaddr* addr, int* len)
 #if defined(BLOCKING_CALLS)
        blockOnFile(fd, TH_ACCEPT);
 #endif
-       r = accept(fd, addr, len);
+       r = accept(fd, addr, (size_t*)len);
        if (r >= 0
            || !(errno == EINPROGRESS || errno == EALREADY
                 || errno == EWOULDBLOCK))