]> git.meshlink.io Git - catta/blobdiff - src/fdutil.c
work around lack of fcntl on Windows
[catta] / src / fdutil.c
index c294754ada767c9f35c386f9c10fde5d47b02115..ca5f65b8f2bed79f12393ae513bc9716e48f3269 100644 (file)
@@ -1,18 +1,18 @@
 /***
-  This file is part of avahi.
+  This file is part of catta.
 
-  avahi is free software; you can redistribute it and/or modify it
+  catta is free software; you can redistribute it and/or modify it
   under the terms of the GNU Lesser General Public License as
   published by the Free Software Foundation; either version 2.1 of the
   License, or (at your option) any later version.
 
-  avahi is distributed in the hope that it will be useful, but WITHOUT
+  catta is distributed in the hope that it will be useful, but WITHOUT
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
   or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
   Public License for more details.
 
   You should have received a copy of the GNU Lesser General Public
-  License along with avahi; if not, write to the Free Software
+  License along with catta; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
   USA.
 ***/
 
 #include <sys/select.h>
 #include <unistd.h>
-#include <fcntl.h>
 #include <assert.h>
 
+#ifdef HAVE_FCNTL
+#include <fcntl.h>
+#else
+#include <sys/ioctl.h>
+#endif
+
 #include "fdutil.h"
 
-int avahi_set_cloexec(int fd) {
+int catta_set_cloexec(int fd) {
     int n;
 
     assert(fd >= 0);
 
+#if defined(HAVE_FCNTL)
     if ((n = fcntl(fd, F_GETFD)) < 0)
         return -1;
 
@@ -40,13 +46,23 @@ int avahi_set_cloexec(int fd) {
         return 0;
 
     return fcntl(fd, F_SETFD, n|FD_CLOEXEC);
+#elif defined(_WIN32)
+    (void)n;
+    if(!SetHandleInformation((HANDLE)fd, HANDLE_FLAG_INHERIT, 0))
+        return -1;
+    return 0;
+#else
+    (void)n;
+    return -1;
+#endif
 }
 
-int avahi_set_nonblock(int fd) {
+int catta_set_nonblock(int fd) {
     int n;
 
     assert(fd >= 0);
 
+#ifdef HAVE_FCNTL
     if ((n = fcntl(fd, F_GETFL)) < 0)
         return -1;
 
@@ -54,9 +70,13 @@ int avahi_set_nonblock(int fd) {
         return 0;
 
     return fcntl(fd, F_SETFL, n|O_NONBLOCK);
+#else
+    n = 1;
+    return ioctl(fd, FIONBIO, &n);
+#endif
 }
 
-int avahi_wait_for_write(int fd) {
+int catta_wait_for_write(int fd) {
     fd_set fds;
     int r;