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
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
#include <stdlib.h>
#include <string.h>
#include <time.h>
-#ifndef OS_WINDOWS
-#include <fcntl.h>
-#endif
#ifdef HAVE_SIGNAL_H
#include <signal.h>
#endif
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;
--- /dev/null
+/*
+ * 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;
+}
#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 */
-#define LIBUSB_NANO 10716
+#define LIBUSB_NANO 10717