POSIX: Move setting of pipes to non-blocking into usbi_pipe
authorToby Gray <toby.gray@realvnc.com>
Fri, 24 May 2013 08:35:24 +0000 (10:35 +0200)
committerHans de Goede <hdegoede@redhat.com>
Tue, 28 May 2013 10:29:02 +0000 (12:29 +0200)
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
libusb/Makefile.am
libusb/io.c
libusb/os/poll_posix.c [new file with mode: 0644]
libusb/os/poll_posix.h
libusb/version_nano.h

index c5e3387..cd6db9c 100644 (file)
@@ -2,6 +2,7 @@ all: libusb-1.0.la libusb-1.0.dll
 
 lib_LTLIBRARIES = libusb-1.0.la
 
+POSIX_POLL_SRC = os/poll_posix.c
 LINUX_USBFS_SRC = os/linux_usbfs.c
 DARWIN_USB_SRC = os/darwin_usb.c
 OPENBSD_USB_SRC = os/openbsd_usb.c
@@ -10,26 +11,29 @@ WINCE_USB_SRC = os/wince_usb.c os/wince_usb.h
 
 EXTRA_DIST = $(LINUX_USBFS_SRC) $(DARWIN_USB_SRC) $(OPENBSD_USB_SRC) \
        $(WINDOWS_USB_SRC) $(WINCE_USB_SRC) \
+       $(POSIX_POLL_SRC) \
        os/threads_posix.c os/threads_windows.c \
        os/linux_udev.c os/linux_netlink.c
 
 if OS_LINUX
 
 if USE_UDEV
-OS_SRC = $(LINUX_USBFS_SRC) os/linux_udev.c
+OS_SRC = $(LINUX_USBFS_SRC) $(POSIX_POLL_SRC) \
+       os/linux_udev.c
 else
-OS_SRC = $(LINUX_USBFS_SRC) os/linux_netlink.c
+OS_SRC = $(LINUX_USBFS_SRC) $(POSIX_POLL_SRC) \
+       os/linux_netlink.c
 endif
 
 endif
 
 if OS_DARWIN
-OS_SRC = $(DARWIN_USB_SRC)
+OS_SRC = $(DARWIN_USB_SRC) $(POSIX_POLL_SRC)
 AM_CFLAGS_EXT = -no-cpp-precomp
 endif
 
 if OS_OPENBSD
-OS_SRC = $(OPENBSD_USB_SRC)
+OS_SRC = $(OPENBSD_USB_SRC) $(POSIX_POLL_SRC)
 endif
 
 if OS_WINDOWS
index b8b31f7..b27e082 100644 (file)
@@ -25,9 +25,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
-#ifndef OS_WINDOWS
-#include <fcntl.h>
-#endif
 #ifdef HAVE_SIGNAL_H
 #include <signal.h>
 #endif
@@ -1082,9 +1079,6 @@ int usbi_io_init(struct libusb_context *ctx)
                goto err;
        }
 
-#ifndef OS_WINDOWS
-       fcntl(ctx->hotplug_pipe[1], F_SETFD, O_NONBLOCK);
-#endif
        r = usbi_add_pollfd(ctx, ctx->hotplug_pipe[0], POLLIN);
        if (r < 0)
                goto err_close_hp_pipe;
diff --git a/libusb/os/poll_posix.c b/libusb/os/poll_posix.c
new file mode 100644 (file)
index 0000000..bd1c538
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * poll_posix: poll compatibility wrapper for POSIX systems
+ * Copyright © 2013 RealVNC Ltd.
+ *
+ * This library 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.
+ *
+ * This library 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 this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <stdlib.h>
+
+#include "libusbi.h"
+
+int usbi_pipe(int pipefd[2])
+{
+       int ret = pipe(pipefd);
+       if (ret != 0) {
+               return ret;
+       }
+       ret = fcntl(pipefd[1], F_SETFD, O_NONBLOCK);
+       if (ret != 0) {
+               usbi_dbg("Failed to set non-blocking on new pipe: %d", errno);
+               usbi_close(pipefd[0]);
+               usbi_close(pipefd[1]);
+       }
+       return ret;
+}
index 0e5e7f5..5b4b2c9 100644 (file)
@@ -4,7 +4,8 @@
 #define usbi_write write
 #define usbi_read read
 #define usbi_close close
-#define usbi_pipe pipe
 #define usbi_poll poll
 
+int usbi_pipe(int pipefd[2]);
+
 #endif /* LIBUSB_POLL_POSIX_H */
index 1195a17..994efe8 100644 (file)
@@ -1 +1 @@
-#define LIBUSB_NANO 10716
+#define LIBUSB_NANO 10717