diff options
-rw-r--r-- | Xcode/config.h | 7 | ||||
-rw-r--r-- | android/config.h | 10 | ||||
-rw-r--r-- | configure.ac | 373 | ||||
-rw-r--r-- | libusb/Makefile.am | 107 | ||||
-rw-r--r-- | libusb/core.c | 27 | ||||
-rw-r--r-- | libusb/io.c | 24 | ||||
-rw-r--r-- | libusb/libusbi.h | 17 | ||||
-rw-r--r-- | libusb/os/linux_usbfs.c | 28 | ||||
-rw-r--r-- | libusb/os/poll_posix.h | 6 | ||||
-rw-r--r-- | libusb/os/poll_windows.c | 4 | ||||
-rw-r--r-- | libusb/os/poll_windows.h | 4 | ||||
-rw-r--r-- | libusb/os/sunos_usb.c | 4 | ||||
-rw-r--r-- | libusb/os/windows_common.c | 4 | ||||
-rw-r--r-- | libusb/version_nano.h | 2 | ||||
-rw-r--r-- | msvc/config.h | 7 |
15 files changed, 328 insertions, 296 deletions
diff --git a/Xcode/config.h b/Xcode/config.h index c280d9f..694fd9a 100644 --- a/Xcode/config.h +++ b/Xcode/config.h @@ -6,14 +6,17 @@ /* Message logging */ #define ENABLE_LOGGING 1 +/* Define to 1 if the system has the type `nfds_t'. */ +#define HAVE_NFDS_T 1 + /* Define to 1 if you have the <sys/time.h> header file. */ #define HAVE_SYS_TIME_H 1 /* Darwin backend */ #define OS_DARWIN 1 -/* type of second poll() argument */ -#define POLL_NFDS_TYPE nfds_t +/* Use POSIX poll() implementation */ +#define POLL_POSIX 1 /* Use POSIX Threads */ #define THREADS_POSIX 1 diff --git a/android/config.h b/android/config.h index e880d1e..9b95bb2 100644 --- a/android/config.h +++ b/android/config.h @@ -29,14 +29,20 @@ /* Define to 1 if you have the <asm/types.h> header file. */ #define HAVE_ASM_TYPES_H 1 +/* Define to 1 if the system has the type `nfds_t'. */ +#define HAVE_NFDS_T 1 + +/* Define to 1 if you have the `pipe2' function. */ +#define HAVE_PIPE2 1 + /* Define to 1 if you have the <sys/time.h> header file. */ #define HAVE_SYS_TIME_H 1 /* Linux backend */ #define OS_LINUX 1 -/* type of second poll() argument */ -#define POLL_NFDS_TYPE nfds_t +/* Use POSIX poll() implementation */ +#define POLL_POSIX 1 /* Use POSIX Threads */ #define THREADS_POSIX 1 diff --git a/configure.ac b/configure.ac index 0bd2cd8..4b8752a 100644 --- a/configure.ac +++ b/configure.ac @@ -17,10 +17,10 @@ LU_DEFINE_VERSION_RC_ATOM([LIBUSB_RC]) AC_INIT([libusb],[LIBUSB_MAJOR[.]LIBUSB_MINOR[.]LIBUSB_MICRO[]LIBUSB_RC],[libusb-devel@lists.sourceforge.net],[libusb],[http://libusb.info]) -# Library versioning -# These numbers should be tweaked on every release. Read carefully: -# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html -# http://sourceware.org/autobook/autobook/autobook_91.html +dnl Library versioning +dnl These numbers should be tweaked on every release. Read carefully: +dnl http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html +dnl http://sourceware.org/autobook/autobook/autobook_91.html lt_current=2 lt_revision=0 lt_age=2 @@ -40,294 +40,301 @@ LT_INIT LT_LANG([Windows Resource]) AC_C_INLINE AM_PROG_CC_C_O -AC_DEFINE([_GNU_SOURCE], 1, [Use GNU extensions]) +AC_DEFINE([_GNU_SOURCE], [1], [Use GNU extensions]) LTLDFLAGS="${LTLDFLAGS} -no-undefined" AC_MSG_CHECKING([operating system]) - -dnl on linux-android platform, some functions are in different places case $host in -*-linux-android*) - AC_MSG_RESULT([This is a Linux-Android system]) - is_backend_android=yes +*-darwin*) + AC_MSG_RESULT([Darwin/Mac OS X]) + backend=darwin + poll=posix + threads=posix + ;; +*-haiku*) + AC_MSG_RESULT([Haiku]) + backend=haiku + poll=posix + threads=posix ;; -*) - is_backend_android=no -esac - -case $host in *-linux* | *-uclinux*) - AC_MSG_RESULT([Linux]) + dnl on linux-android platform, some functions are in different places + case $host in + *-linux-android*) + AC_MSG_RESULT([Linux (Android system)]) + is_backend_android=yes + ;; + *) + AC_MSG_RESULT([Linux]) + is_backend_android=no + ;; + esac backend=linux + poll=posix threads=posix ;; -*-darwin*) - AC_MSG_RESULT([Darwin/Mac OS X]) - backend=darwin +*-netbsd*) + AC_MSG_RESULT([NetBSD]) + backend=netbsd + poll=posix threads=posix ;; *-openbsd*) AC_MSG_RESULT([OpenBSD]) backend=openbsd + poll=posix threads=posix ;; -*-netbsd*) - AC_MSG_RESULT([NetBSD]) - backend=netbsd +*-solaris*) + AC_MSG_RESULT([SunOS]) + backend=sunos + poll=posix + threads=posix + ;; +*-cygwin*) + AC_MSG_RESULT([Windows (using Cygwin)]) + backend=windows + poll=windows threads=posix ;; *-mingw* | *msys*) AC_MSG_RESULT([Windows]) backend=windows + poll=windows threads=windows create_import_lib=yes AM_CFLAGS="${AM_CFLAGS} -fno-omit-frame-pointer" ;; -*-cygwin*) - AC_MSG_RESULT([Cygwin (using Windows backend)]) - backend=windows - threads=posix - ;; -*-haiku*) - AC_MSG_RESULT([Haiku]) - backend=haiku - threads=posix - ;; -*-solaris*) - AC_MSG_RESULT([SunOS]) - backend=sunos - threads=posix - ;; *) AC_MSG_RESULT([Null]) backend="null" + poll=posix threads="posix" + ;; esac case $backend in +darwin) + AC_DEFINE([OS_DARWIN], [1], [Darwin backend]) + LIBS="-lobjc -Wl,-framework,IOKit -Wl,-framework,CoreFoundation" + LTLDFLAGS="${LTLDFLAGS} -Wl,-prebind" + ;; +haiku) + AC_DEFINE([OS_HAIKU], [1], [Haiku backend]) + LIBS="-lbe" + ;; linux) - AC_DEFINE(OS_LINUX, 1, [Linux backend]) - AC_SUBST(OS_LINUX) + AC_DEFINE([OS_LINUX], [1], [Linux backend]) AC_SEARCH_LIBS([clock_gettime], [rt], [], [], [-pthread]) AC_ARG_ENABLE([udev], [AC_HELP_STRING([--enable-udev], [use udev for device enumeration and hotplug support (recommended) [default=yes]])], [], [enable_udev=yes]) - if test "x$enable_udev" = xyes ; then - # system has udev. use it or fail! - AC_CHECK_HEADERS([libudev.h], [], [AC_MSG_ERROR([udev support requested but libudev header not installed])]) - AC_CHECK_LIB([udev], [udev_new], [], [AC_MSG_ERROR([udev support requested but libudev not installed])]) - AC_DEFINE(USE_UDEV, 1, [Use udev for device enumeration/hotplug]) - else - AC_CHECK_HEADERS([asm/types.h], [], []) - AC_CHECK_HEADERS([sys/socket.h linux/netlink.h], [], [AC_MSG_ERROR([Linux netlink headers not found])], [ -#ifdef HAVE_ASM_TYPES_H -#include <asm/types.h> -#endif -#include <sys/socket.h> -]) - fi - AC_SUBST(USE_UDEV) - + if test "x$enable_udev" = xyes ; then + dnl system has udev. use it or fail! + AC_CHECK_HEADER([libudev.h], [], [AC_MSG_ERROR([udev support requested but libudev header not installed])]) + AC_CHECK_LIB([udev], [udev_new], [], [AC_MSG_ERROR([udev support requested but libudev not installed])]) + else + AC_CHECK_HEADERS([asm/types.h]) + AC_CHECK_HEADER([linux/netlink.h], [], [AC_MSG_ERROR([Linux netlink header not found])]) + AC_CHECK_HEADER([sys/socket.h], [], [AC_MSG_ERROR([Linux socket header not found])]) + fi if test "x$is_backend_android" != xyes; then THREAD_CFLAGS="-pthread" LIBS="${LIBS} -pthread" fi - - AC_CHECK_HEADERS([poll.h]) - AC_DEFINE([POLL_NFDS_TYPE],[nfds_t],[type of second poll() argument]) ;; -darwin) - AC_DEFINE(OS_DARWIN, 1, [Darwin backend]) - AC_SUBST(OS_DARWIN) - LIBS="-lobjc -Wl,-framework,IOKit -Wl,-framework,CoreFoundation" - LTLDFLAGS="${LTLDFLAGS} -Wl,-prebind" - AC_CHECK_HEADERS([poll.h]) - AC_CHECK_TYPE([nfds_t], - [AC_DEFINE([POLL_NFDS_TYPE],[nfds_t],[type of second poll() argument])], - [AC_DEFINE([POLL_NFDS_TYPE],[unsigned int],[type of second poll() argument])], - [#include <poll.h>]) +netbsd) + AC_DEFINE([OS_NETBSD], [1], [NetBSD backend]) + THREAD_CFLAGS="-pthread" + LIBS="-pthread" + ;; +null) + AC_DEFINE([OS_NULL], [1], [Null backend]) + THREAD_CFLAGS="-pthread" + LIBS="-pthread" ;; openbsd) - AC_DEFINE(OS_OPENBSD, 1, [OpenBSD backend]) - AC_SUBST(OS_OPENBSD) + AC_DEFINE([OS_OPENBSD], [1], [OpenBSD backend]) THREAD_CFLAGS="-pthread" LIBS="-pthread" - AC_CHECK_HEADERS([poll.h]) - AC_DEFINE([POLL_NFDS_TYPE],[nfds_t],[type of second poll() argument]) ;; sunos) - AC_DEFINE(OS_SUNOS, 1, [SunOS backend]) - AC_SUBST(OS_SUNOS) + AC_DEFINE([OS_SUNOS], [1], [SunOS backend]) THREAD_CFLAGS="-pthread" LIBS="-pthread -ldevinfo" - AC_CHECK_HEADERS([poll.h]) - AC_DEFINE([POLL_NFDS_TYPE],[nfds_t],[type of second poll() argument]) - ;; -netbsd) - AC_DEFINE(OS_NETBSD, 1, [NetBSD backend]) - AC_SUBST(OS_NETBSD) - THREAD_CFLAGS="-pthread" - LIBS="-pthread" - AC_CHECK_HEADERS([poll.h]) - AC_DEFINE([POLL_NFDS_TYPE],[nfds_t],[type of second poll() argument]) ;; windows) - AC_DEFINE(OS_WINDOWS, 1, [Windows backend]) - AC_SUBST(OS_WINDOWS) + AC_DEFINE([OS_WINDOWS], [1], [Windows backend]) + AC_CHECK_TYPES([struct timespec], [], [], [[#include <time.h>]]) LIBS="" LTLDFLAGS="${LTLDFLAGS} -avoid-version -Wl,--add-stdcall-alias" - AC_DEFINE([POLL_NFDS_TYPE],[unsigned int],[type of second poll() argument]) AC_DEFINE([_WIN32_WINNT], [_WIN32_WINNT_VISTA], [Oldest Windows version supported (Vista)]) ;; -haiku) - AC_DEFINE(OS_HAIKU, 1, [Haiku backend]) - AC_SUBST(OS_HAIKU) - LIBS="${LIBS} -lbe" - AC_CHECK_HEADERS([poll.h]) - AC_DEFINE([POLL_NFDS_TYPE],[nfds_t],[type of second poll() argument]) - ;; -null) - AC_DEFINE(OS_NULL, 1, [Null backend]) - AC_SUBST(OS_NULL) - THREAD_CFLAGS="-pthread" - LIBS="-pthread" - AC_CHECK_HEADERS([poll.h]) - AC_DEFINE([POLL_NFDS_TYPE],[nfds_t],[type of second poll() argument]) +*) + AC_MSG_ERROR([Unknown backend]) ;; esac AC_SUBST(LIBS) -AM_CONDITIONAL(OS_LINUX, test "x$backend" = xlinux) -AM_CONDITIONAL(OS_DARWIN, test "x$backend" = xdarwin) -AM_CONDITIONAL(OS_OPENBSD, test "x$backend" = xopenbsd) -AM_CONDITIONAL(OS_SUNOS, test "x$backend" = xsunos) -AM_CONDITIONAL(OS_NETBSD, test "x$backend" = xnetbsd) -AM_CONDITIONAL(OS_WINDOWS, test "x$backend" = xwindows) -AM_CONDITIONAL(OS_HAIKU, test "x$backend" = xhaiku) -AM_CONDITIONAL(OS_NULL, test "x$backend" = xnull) -AM_CONDITIONAL(THREADS_POSIX, test "x$threads" = xposix) -AM_CONDITIONAL(CREATE_IMPORT_LIB, test "x$create_import_lib" = xyes) -AM_CONDITIONAL(USE_UDEV, test "x$enable_udev" = xyes) -if test "x$threads" = xposix; then - AC_DEFINE(THREADS_POSIX, 1, [Use POSIX Threads]) +AM_CONDITIONAL([OS_DARWIN], [test "x$backend" = xdarwin]) +AM_CONDITIONAL([OS_HAIKU], [test "x$backend" = xhaiku]) +AM_CONDITIONAL([OS_LINUX], [test "x$backend" = xlinux]) +AM_CONDITIONAL([OS_NETBSD], [test "x$backend" = xnetbsd]) +AM_CONDITIONAL([OS_NULL], [test "x$backend" = xnull]) +AM_CONDITIONAL([OS_OPENBSD], [test "x$backend" = xopenbsd]) +AM_CONDITIONAL([OS_SUNOS], [test "x$backend" = xsunos]) +AM_CONDITIONAL([OS_WINDOWS], [test "x$backend" = xwindows]) +AM_CONDITIONAL([POLL_POSIX], [test "x$threads" = xposix]) +AM_CONDITIONAL([POLL_WINDOWS], [test "x$threads" = xwindows]) +AM_CONDITIONAL([THREADS_POSIX], [test "x$threads" = xposix]) +AM_CONDITIONAL([THREADS_WINDOWS], [test "x$threads" = xwindows]) +AM_CONDITIONAL([CREATE_IMPORT_LIB], [test "x$create_import_lib" = xyes]) +AM_CONDITIONAL([USE_UDEV], [test "x$enable_udev" = xyes]) + +if test "x$poll" = xposix; then + AC_DEFINE([POLL_POSIX], [1], [Use POSIX poll() implementation]) + AC_CHECK_TYPES([nfds_t], [], [], [[#include <poll.h>]]) + AC_CHECK_FUNCS([pipe2]) +elif test "x$poll" = xwindows; then + AC_DEFINE([POLL_WINDOWS], [1], [Use Windows poll() implementation]) +else + AC_MSG_ERROR([Unknown poll implementation]) fi -# timerfd -AC_CHECK_HEADER([sys/timerfd.h], [timerfd_h=1], [timerfd_h=0]) -AC_ARG_ENABLE([timerfd], - [AS_HELP_STRING([--enable-timerfd], - [use timerfd for timing [default=auto]])], - [use_timerfd=$enableval], [use_timerfd=auto]) - -if test "x$use_timerfd" = xyes -a "x$timerfd_h" = x0; then - AC_MSG_ERROR([timerfd header not available; glibc 2.9+ required]) +if test "x$threads" = xposix; then + AC_DEFINE([THREADS_POSIX], [1], [Use POSIX Threads]) +elif test "x$threads" = xwindows; then + AC_DEFINE([THREADS_WINDOWS], [1], [Use Windows Threads]) +else + AC_MSG_ERROR([Unknown threads implementation]) fi -AC_CHECK_DECLS([TFD_NONBLOCK, TFD_CLOEXEC], [tfd_hdr_ok=yes], [tfd_hdr_ok=no], [#include <sys/timerfd.h>]) -if test "x$use_timerfd" = xyes -a "x$tfd_hdr_ok" = xno; then - AC_MSG_ERROR([timerfd header not usable; glibc 2.9+ required]) -fi +dnl headers not available on all platforms but required on others +AC_CHECK_HEADERS([sys/time.h]) -AC_MSG_CHECKING([whether to use timerfd for timing]) -if test "x$use_timerfd" = xno; then - AC_MSG_RESULT([no (disabled by user)]) -else - if test "x$timerfd_h" = x1 -a "x$tfd_hdr_ok" = xyes; then - AC_MSG_RESULT([yes]) - AC_DEFINE(USBI_TIMERFD_AVAILABLE, 1, [timerfd headers available]) - else +dnl timerfd support +if test "x$backend" = xlinux || test "x$backend" = xsunos; then + AC_ARG_ENABLE([timerfd], + [AS_HELP_STRING([--enable-timerfd], [use timerfd for timing [default=auto]])], + [use_timerfd=$enableval], + [use_timerfd=auto]) + if test "x$use_timerfd" != xno; then + AC_CHECK_HEADER([sys/timerfd.h], [timerfd_h=yes], [timerfd_h=no]) + if test "x$timerfd_h" = xyes; then + AC_CHECK_DECLS([TFD_NONBLOCK, TFD_CLOEXEC], [timerfd_h_ok=yes], [timerfd_h_ok=no], [[#include <sys/timerfd.h>]]) + if test "x$timerfd_h_ok" = xyes; then + AC_CHECK_FUNC([timerfd_create], [timerfd_ok=yes], [timerfd_ok=no]) + if test "x$timerfd_ok" = xyes; then + AC_DEFINE([HAVE_TIMERFD], [1], [Define if the system has timerfd functionality]) + elif test "x$use_timerfd" = xyes; then + AC_MSG_ERROR([timerfd_create() function not found; glibc 2.9+ required]) + fi + elif test "x$use_timerfd" = xyes; then + AC_MSG_ERROR([timerfd header not usable; glibc 2.9+ required]) + fi + elif test "x$use_timerfd" = xyes; then + AC_MSG_ERROR([timerfd header not available; glibc 2.9+ required]) + fi + fi + AC_MSG_CHECKING([whether to use timerfd for timing]) + if test "x$use_timerfd" = xno; then + AC_MSG_RESULT([no (disabled by user)]) + elif test "x$timerfd_h" = xno; then + AC_MSG_RESULT([no (header not usable)]) + elif test "x$timerfd_h_ok" = xno; then AC_MSG_RESULT([no (header not available)]) + elif test "x$timerfd_ok" = xno; then + AC_MSG_RESULT([no (functions not available)]) + else + AC_MSG_RESULT([yes]) fi fi -AC_CHECK_FUNCS([pipe2]) -AC_CHECK_TYPES([struct timespec]) - -# Message logging -AC_ARG_ENABLE([log], [AS_HELP_STRING([--disable-log], [disable all logging])], +dnl Message logging +AC_ARG_ENABLE([log], + [AS_HELP_STRING([--disable-log], [disable all logging])], [log_enabled=$enableval], [log_enabled=yes]) if test "x$log_enabled" != xno; then - AC_DEFINE([ENABLE_LOGGING], 1, [Message logging]) + AC_DEFINE([ENABLE_LOGGING], [1], [Message logging]) fi -AC_ARG_ENABLE([debug-log], [AS_HELP_STRING([--enable-debug-log], - [start with debug message logging enabled [default=no]])], +AC_ARG_ENABLE([debug-log], + [AS_HELP_STRING([--enable-debug-log], [start with debug message logging enabled [default=no]])], [debug_log_enabled=$enableval], [debug_log_enabled=no]) if test "x$debug_log_enabled" != xno; then - AC_DEFINE([ENABLE_DEBUG_LOGGING], 1, [Start with debug message logging enabled]) + AC_DEFINE([ENABLE_DEBUG_LOGGING], [1], [Start with debug message logging enabled]) fi -AC_ARG_ENABLE([system-log], [AS_HELP_STRING([--enable-system-log], - [output logging messages to system wide log, if supported by the OS [default=no]])], +AC_ARG_ENABLE([system-log], + [AS_HELP_STRING([--enable-system-log], [output logging messages to system wide log, if supported by the OS [default=no]])], [system_log_enabled=$enableval], [system_log_enabled=no]) if test "x$system_log_enabled" != xno; then - AC_DEFINE([USE_SYSTEM_LOGGING_FACILITY], 1, [Enable output to system log]) - - # Check if syslog is available in standard C library - AC_CHECK_HEADERS(syslog.h) - AC_CHECK_FUNC([syslog], [have_syslog=yes], [have_syslog=no]) - if test "x$have_syslog" != xno; then - AC_DEFINE([HAVE_SYSLOG_FUNC], 1, [syslog() function available]) + AC_DEFINE([USE_SYSTEM_LOGGING_FACILITY], [1], [Enable output to system log]) + if test "x$backend" != xwindows && test "x$is_backend_android" != xyes; then + dnl Check if syslog is available in standard C library + AC_CHECK_HEADER([syslog.h], [syslog_h=yes], [syslog_h=no]) + if test "x$syslog_h" = xyes; then + AC_CHECK_FUNCS([syslog]) + fi fi fi -# Examples build -AC_ARG_ENABLE([examples-build], [AS_HELP_STRING([--enable-examples-build], - [build example applications [default=no]])], +dnl Examples build +AC_ARG_ENABLE([examples-build], + [AS_HELP_STRING([--enable-examples-build], [build example applications [default=no]])], [build_examples=$enableval], [build_examples=no]) -AM_CONDITIONAL(BUILD_EXAMPLES, test "x$build_examples" != xno) +AM_CONDITIONAL([BUILD_EXAMPLES], [test "x$build_examples" != xno]) -# Tests build -AC_ARG_ENABLE([tests-build], [AS_HELP_STRING([--enable-tests-build], - [build test applications [default=no]])], +dnl Tests build +AC_ARG_ENABLE([tests-build], + [AS_HELP_STRING([--enable-tests-build], [build test applications [default=no]])], [build_tests=$enableval], [build_tests=no]) -AM_CONDITIONAL(BUILD_TESTS, test "x$build_tests" != xno) +AM_CONDITIONAL([BUILD_TESTS], [test "x$build_tests" != xno]) -# headers not available on all platforms but required on others -AC_CHECK_HEADERS([sys/time.h]) - -# sigaction not available on MinGW -AC_CHECK_FUNC([sigaction], [have_sigaction=yes], [have_sigaction=no]) -AM_CONDITIONAL(HAVE_SIGACTION, test "x$have_sigaction" = xyes) +dnl sigaction needed for some example programs +if test "x$build_examples" != xno; then + AC_CHECK_FUNC([sigaction], [have_sigaction=yes], [have_sigaction=no]) +fi +AM_CONDITIONAL([HAVE_SIGACTION], [test "x$have_sigaction" = xyes]) -# check for -fvisibility=hidden compiler support (GCC >= 3.4) -saved_cflags="$CFLAGS" -# -Werror required for cygwin -CFLAGS="$CFLAGS -Werror -fvisibility=hidden" +dnl check for -fvisibility=hidden compiler support (GCC >= 3.4) +saved_CFLAGS="${CFLAGS}" +dnl -Werror required for cygwin +CFLAGS="${CFLAGS} -Werror -fvisibility=hidden" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], [VISIBILITY_CFLAGS="-fvisibility=hidden" AC_DEFINE([DEFAULT_VISIBILITY], [__attribute__((visibility("default")))], [Default visibility])], [VISIBILITY_CFLAGS="" AC_DEFINE([DEFAULT_VISIBILITY], [], [Default visibility])], ]) -CFLAGS="$saved_cflags" +CFLAGS="${saved_CFLAGS}" -# check for -Wno-pointer-sign compiler support (GCC >= 4) -saved_cflags="$CFLAGS" -CFLAGS="$CFLAGS -Wno-pointer-sign" +dnl check for -Wno-pointer-sign compiler support (GCC >= 4) +saved_CFLAGS="${CFLAGS}" +CFLAGS="${CFLAGS} -Wno-pointer-sign" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], nopointersign_cflags="-Wno-pointer-sign", nopointersign_cflags="") -CFLAGS="$saved_cflags" +CFLAGS="${saved_CFLAGS}" -# check for -std=gnu99 compiler support -saved_cflags="$CFLAGS" +dnl check for -std=gnu99 compiler support +saved_CFLAGS="${CFLAGS}" CFLAGS="-std=gnu99" AC_MSG_CHECKING([whether CC supports -std=gnu99]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], - [AC_MSG_RESULT([yes])] - [AM_CFLAGS="${AM_CFLAGS} -std=gnu99"], - [AC_MSG_RESULT([no])] + [AC_MSG_RESULT([yes]) + AM_CFLAGS="${AM_CFLAGS} -std=gnu99"], + [AC_MSG_RESULT([no])] ) -CFLAGS="$saved_cflags" +CFLAGS="${saved_CFLAGS}" -AM_CFLAGS="${AM_CFLAGS} -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration $nopointersign_cflags -Wshadow ${THREAD_CFLAGS} ${VISIBILITY_CFLAGS}" +AM_CFLAGS="${AM_CFLAGS} -Wall -Wundef -Wunused -Wstrict-prototypes -Werror-implicit-function-declaration ${nopointersign_cflags} -Wshadow ${THREAD_CFLAGS} ${VISIBILITY_CFLAGS}" AC_SUBST(AM_CFLAGS) AC_SUBST(LTLDFLAGS) diff --git a/libusb/Makefile.am b/libusb/Makefile.am index 7a6b530..1e09222 100644 --- a/libusb/Makefile.am +++ b/libusb/Makefile.am @@ -5,69 +5,86 @@ AUTOMAKE_OPTIONS = subdir-objects lib_LTLIBRARIES = libusb-1.0.la POSIX_POLL_SRC = os/poll_posix.h os/poll_posix.c -POSIX_THREADS_SRC = os/threads_posix.h os/threads_posix.c WINDOWS_POLL_SRC = os/poll_windows.h os/poll_windows.c -WINDOWS_THREADS_SRC = os/threads_windows.h os/threads_windows.c -LINUX_USBFS_SRC = os/linux_usbfs.h os/linux_usbfs.c -DARWIN_USB_SRC = os/darwin_usb.h os/darwin_usb.c -OPENBSD_USB_SRC = os/openbsd_usb.c -NETBSD_USB_SRC = os/netbsd_usb.c -SUNOS_USB_SRC = os/sunos_usb.c os/sunos_usb.h -WINDOWS_USB_SRC = libusb-1.0.def libusb-1.0.rc \ - os/windows_common.h os/windows_common.c \ - os/windows_usbdk.h os/windows_usbdk.c \ - os/windows_winusb.h os/windows_winusb.c -HAIKU_USB_SRC = os/haiku_usb.h os/haiku_usb_backend.cpp \ - os/haiku_usb_raw.h os/haiku_usb_raw.cpp os/haiku_pollfs.cpp -NULL_USB_SRC = os/null_usb.c -EXTRA_DIST = $(POSIX_POLL_SRC) $(POSIX_THREADS_SRC) \ - $(WINDOWS_POLL_SRC) $(WINDOWS_THREADS_SRC) \ - $(LINUX_USBFS_SRC) $(DARWIN_USB_SRC) \ - $(OPENBSD_USB_SRC) $(NETBSD_USB_SRC) \ - $(WINDOWS_USB_SRC) \ - $(HAIKU_USB_SRC) $(NULL_USB_SRC) \ - os/linux_udev.c os/linux_netlink.c +if POLL_POSIX +POLL_SRC = $(POSIX_POLL_SRC) +else +POLL_SRC = $(WINDOWS_POLL_SRC) +endif -if OS_LINUX +POSIX_THREADS_SRC = os/threads_posix.h os/threads_posix.c +WINDOWS_THREADS_SRC = os/threads_windows.h os/threads_windows.c -if USE_UDEV -OS_SRC = $(LINUX_USBFS_SRC) os/linux_udev.c +if THREADS_POSIX +THREADS_SRC = $(POSIX_THREADS_SRC) else -OS_SRC = $(LINUX_USBFS_SRC) os/linux_netlink.c +THREADS_SRC = $(WINDOWS_THREADS_SRC) endif -endif +OS_DARWIN_SRC = os/darwin_usb.h os/darwin_usb.c +OS_HAIKU_SRC = os/haiku_usb.h os/haiku_usb_backend.cpp \ + os/haiku_pollfs.cpp os/haiku_usb_raw.h os/haiku_usb_raw.cpp +OS_LINUX_SRC = os/linux_usbfs.h os/linux_usbfs.c +OS_NETBSD_SRC = os/netbsd_usb.c +OS_NULL_SRC = os/null_usb.c +OS_OPENBSD_SRC = os/openbsd_usb.c +OS_SUNOS_SRC = os/sunos_usb.h os/sunos_usb.c +OS_WINDOWS_SRC = libusb-1.0.def libusb-1.0.rc \ + os/windows_common.h ps/windows_common.c \ + os/windows_usbdk.h os/windows_usbdk.c \ + os/windows_winusb.h os/windows_winusb.c + +EXTRA_DIST = $(POSIX_POLL_SRC) $(POSIX_THREADS_SRC) \ + $(WINDOWS_POLL_SRC) $(WINDOWS_THREADS_SRC) \ + $(OS_DARWIN_SRC) \ + $(OS_HAIKU_SRC) \ + $(OS_LINUX_SRC) \ + $(OS_NETBSD_SRC) \ + $(OS_NULL_SRC) \ + $(OS_OPENBSD_SRC) \ + $(OS_SUNOS_SRC) \ + $(OS_WINDOWS_SRC) \ + os/linux_netlink.c os/linux_udev.c if OS_DARWIN -OS_SRC = $(DARWIN_USB_SRC) +OS_SRC = $(OS_DARWIN_SRC) AM_CFLAGS_EXT = -no-cpp-precomp endif -if OS_OPENBSD -OS_SRC = $(OPENBSD_USB_SRC) +if OS_HAIKU +noinst_LTLIBRARIES = libusb_haiku.la +libusb_haiku_la_SOURCES = $(OS_HAIKU_SRC) +libusb_1_0_la_LIBADD = libusb_haiku.la +endif + +if OS_LINUX +OS_SRC = $(OS_LINUX_SRC) +if USE_UDEV +OS_SRC += os/linux_udev.c +else +OS_SRC += os/linux_netlink.c +endif endif if OS_NETBSD -OS_SRC = $(NETBSD_USB_SRC) +OS_SRC = $(OS_NETBSD_SRC) endif -if OS_SUNOS -OS_SRC = $(SUNOS_USB_SRC) +if OS_NULL +OS_SRC = $(OS_NULL_SRC) endif -if OS_HAIKU -noinst_LTLIBRARIES = libusb_haiku.la -libusb_haiku_la_SOURCES = $(HAIKU_USB_SRC) -libusb_1_0_la_LIBADD = libusb_haiku.la +if OS_OPENBSD +OS_SRC = $(OS_OPENBSD_SRC) endif -if OS_NULL -OS_SRC = $(NULL_USB_SRC) +if OS_SUNOS +OS_SRC = $(OS_SUNOS_SRC) endif if OS_WINDOWS -OS_SRC = $(WINDOWS_USB_SRC) +OS_SRC = $(OS_WINDOWS_SRC) .rc.lo: $(AM_V_GEN)$(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --tag=RC --mode=compile $(RC) $(RCFLAGS) -i $< -o $@ @@ -81,18 +98,6 @@ if CREATE_IMPORT_LIB $(AM_V_GEN)$(DLLTOOL) $(DLLTOOLFLAGS) --kill-at --input-def $(srcdir)/libusb-1.0.def --dllname $@ --output-lib .libs/$@.a endif -if OS_WINDOWS -POLL_SRC = $(WINDOWS_POLL_SRC) -else -POLL_SRC = $(POSIX_POLL_SRC) -endif - -if THREADS_POSIX -THREADS_SRC = $(POSIX_THREADS_SRC) -else -THREADS_SRC = $(WINDOWS_THREADS_SRC) -endif - libusb_1_0_la_CFLAGS = $(AM_CFLAGS) libusb_1_0_la_LDFLAGS = $(LTLDFLAGS) libusb_1_0_la_SOURCES = libusbi.h libusb.h version.h version_nano.h \ diff --git a/libusb/core.c b/libusb/core.c index bf68984..9ec9246 100644 --- a/libusb/core.c +++ b/libusb/core.c @@ -28,19 +28,19 @@ #endif #include <stdio.h> #include <string.h> -#ifdef HAVE_SYSLOG_H +#ifdef HAVE_SYSLOG #include <syslog.h> #endif -struct libusb_context *usbi_default_context = NULL; +struct libusb_context *usbi_default_context; static const struct libusb_version libusb_version_internal = { LIBUSB_MAJOR, LIBUSB_MINOR, LIBUSB_MICRO, LIBUSB_NANO, LIBUSB_RC, "http://libusb.info" }; -static int default_context_refcnt = 0; +static int default_context_refcnt; static usbi_mutex_static_t default_context_lock = USBI_MUTEX_INITIALIZER; -static struct timespec timestamp_origin = { 0, 0 }; -#ifndef USE_SYSTEM_LOGGING_FACILITY -static libusb_log_cb log_handler = NULL; +static struct timespec timestamp_origin; +#if defined(ENABLE_LOGGING) && !defined(USE_SYSTEM_LOGGING_FACILITY) +static libusb_log_cb log_handler; #endif usbi_mutex_static_t active_contexts_lock = USBI_MUTEX_INITIALIZER; @@ -2130,23 +2130,24 @@ void API_EXPORTED libusb_set_debug(libusb_context *ctx, int level) void API_EXPORTED libusb_set_log_cb(libusb_context *ctx, libusb_log_cb cb, int mode) { +#if defined(ENABLE_LOGGING) && (!defined(ENABLE_DEBUG_LOGGING) || !defined(USE_SYSTEM_LOGGING_FACILITY)) #if !defined(USE_SYSTEM_LOGGING_FACILITY) - if (mode & LIBUSB_LOG_CB_GLOBAL) { + if (mode & LIBUSB_LOG_CB_GLOBAL) log_handler = cb; - } #endif -#if defined(ENABLE_LOGGING) && !defined(ENABLE_DEBUG_LOGGING) +#if !defined(ENABLE_DEBUG_LOGGING) if (mode & LIBUSB_LOG_CB_CONTEXT) { USBI_GET_CONTEXT(ctx); ctx->log_handler = cb; } #else UNUSED(ctx); -#if defined(USE_SYSTEM_LOGGING_FACILITY) +#endif +#else + UNUSED(ctx); UNUSED(cb); UNUSED(mode); #endif -#endif } /** \ingroup libusb_lib @@ -2506,7 +2507,7 @@ int usbi_vsnprintf(char *str, size_t size, const char *format, va_list ap) static void usbi_log_str(enum libusb_log_level level, const char *str) { #if defined(USE_SYSTEM_LOGGING_FACILITY) -#if defined(OS_WINDOWS) || defined(OS_WINCE) +#if defined(OS_WINDOWS) #if !defined(UNICODE) OutputDebugStringA(str); #else @@ -2524,7 +2525,7 @@ static void usbi_log_str(enum libusb_log_level level, const char *str) case LIBUSB_LOG_LEVEL_DEBUG: priority = ANDROID_LOG_DEBUG; break; } __android_log_write(priority, "libusb", str); -#elif defined(HAVE_SYSLOG_FUNC) +#elif defined(HAVE_SYSLOG) int syslog_level = LOG_INFO; switch (level) { case LIBUSB_LOG_LEVEL_NONE: return; diff --git a/libusb/io.c b/libusb/io.c index af6c1ae..4d0971b 100644 --- a/libusb/io.c +++ b/libusb/io.c @@ -25,7 +25,7 @@ #include "hotplug.h" #include <errno.h> -#ifdef USBI_TIMERFD_AVAILABLE +#ifdef HAVE_TIMERFD #include <sys/timerfd.h> #include <unistd.h> #endif @@ -1137,7 +1137,7 @@ int usbi_io_init(struct libusb_context *ctx) if (r < 0) goto err_close_pipe; -#ifdef USBI_TIMERFD_AVAILABLE +#ifdef HAVE_TIMERFD ctx->timerfd = timerfd_create(usbi_backend.get_timerfd_clockid(), TFD_NONBLOCK | TFD_CLOEXEC); if (ctx->timerfd >= 0) { @@ -1152,7 +1152,7 @@ int usbi_io_init(struct libusb_context *ctx) return 0; -#ifdef USBI_TIMERFD_AVAILABLE +#ifdef HAVE_TIMERFD err_close_timerfd: close(ctx->timerfd); usbi_remove_pollfd(ctx, ctx->event_pipe[0]); @@ -1184,7 +1184,7 @@ void usbi_io_exit(struct libusb_context *ctx) usbi_remove_pollfd(ctx, ctx->event_pipe[0]); usbi_close(ctx->event_pipe[0]); usbi_close(ctx->event_pipe[1]); -#ifdef USBI_TIMERFD_AVAILABLE +#ifdef HAVE_TIMERFD if (usbi_using_timerfd(ctx)) { usbi_remove_pollfd(ctx, ctx->timerfd); close(ctx->timerfd); @@ -1313,7 +1313,7 @@ void API_EXPORTED libusb_free_transfer(struct libusb_transfer *transfer) free(itransfer); } -#ifdef USBI_TIMERFD_AVAILABLE +#ifdef HAVE_TIMERFD static int disarm_timerfd(struct libusb_context *ctx) { const struct itimerspec disarm_timer = { { 0, 0 }, { 0, 0 } }; @@ -1414,7 +1414,7 @@ static int add_to_flying_list(struct usbi_transfer *transfer) /* otherwise we need to be inserted at the end */ list_add_tail(&transfer->list, &ctx->flying_transfers); out: -#ifdef USBI_TIMERFD_AVAILABLE +#ifdef HAVE_TIMERFD if (first && usbi_using_timerfd(ctx) && timerisset(timeout)) { /* if this transfer has the lowest timeout of all active transfers, * rearm the timerfd with this transfer's timeout */ @@ -2059,7 +2059,7 @@ static int handle_timeouts(struct libusb_context *ctx) return r; } -#ifdef USBI_TIMERFD_AVAILABLE +#ifdef HAVE_TIMERFD static int handle_timerfd_trigger(struct libusb_context *ctx) { int r; @@ -2086,8 +2086,8 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv) { int r; struct usbi_pollfd *ipollfd; - POLL_NFDS_TYPE nfds = 0; - POLL_NFDS_TYPE internal_nfds; + usbi_nfds_t nfds = 0; + usbi_nfds_t internal_nfds; struct pollfd *fds = NULL; int timeout_ms; @@ -2266,7 +2266,7 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv) goto done; } -#ifdef USBI_TIMERFD_AVAILABLE +#ifdef HAVE_TIMERFD /* on timerfd configurations, fds[1] is the timerfd */ if (usbi_using_timerfd(ctx) && fds[1].revents) { /* timerfd indicates that a timeout has expired */ @@ -2286,7 +2286,7 @@ static int handle_events(struct libusb_context *ctx, struct timeval *tv) #endif list_for_each_entry(ipollfd, &ctx->removed_ipollfds, list, struct usbi_pollfd) { - POLL_NFDS_TYPE n; + usbi_nfds_t n; for (n = internal_nfds ; n < nfds ; n++) { if (ipollfd->pollfd.fd == fds[n].fd) { @@ -2546,7 +2546,7 @@ int API_EXPORTED libusb_handle_events_locked(libusb_context *ctx, */ int API_EXPORTED libusb_pollfds_handle_timeouts(libusb_context *ctx) { -#if defined(USBI_TIMERFD_AVAILABLE) +#ifdef HAVE_TIMERFD USBI_GET_CONTEXT(ctx); return usbi_using_timerfd(ctx); #else diff --git a/libusb/libusbi.h b/libusb/libusbi.h index c31b49b..68bbaae 100644 --- a/libusb/libusbi.h +++ b/libusb/libusbi.h @@ -76,17 +76,16 @@ #endif /* Internal abstraction for poll */ -#if defined(OS_LINUX) || defined(OS_DARWIN) || defined(OS_OPENBSD) || defined(OS_NETBSD) || \ - defined(OS_HAIKU) || defined(OS_SUNOS) || defined(OS_NULL) +#if defined(POLL_POSIX) #include "os/poll_posix.h" -#elif defined(OS_WINDOWS) +#elif defined(POLL_WINDOWS) #include "os/poll_windows.h" #endif /* Internal abstraction for thread synchronization */ #if defined(THREADS_POSIX) #include "os/threads_posix.h" -#elif defined(OS_WINDOWS) +#elif defined(THREADS_WINDOWS) #include "os/threads_windows.h" #endif @@ -351,7 +350,7 @@ struct libusb_context { * between the poll call and */ struct list_head removed_ipollfds; struct pollfd *pollfds; - POLL_NFDS_TYPE pollfds_cnt; + usbi_nfds_t pollfds_cnt; /* A list of pending hotplug messages. Protected by event_data_lock. */ struct list_head hotplug_msgs; @@ -359,7 +358,7 @@ struct libusb_context { /* A list of pending completed transfers. Protected by event_data_lock. */ struct list_head completed_transfers; -#ifdef USBI_TIMERFD_AVAILABLE +#ifdef HAVE_TIMERFD /* used for timeout handling, if supported by OS. * this timerfd is maintained to trigger on the next pending timeout */ int timerfd; @@ -396,7 +395,7 @@ enum usbi_event_flags { ((ctx)->event_flags || (ctx)->device_close \ || !list_empty(&(ctx)->hotplug_msgs) || !list_empty(&(ctx)->completed_transfers)) -#ifdef USBI_TIMERFD_AVAILABLE +#ifdef HAVE_TIMERFD #define usbi_using_timerfd(ctx) ((ctx)->timerfd >= 0) #else #define usbi_using_timerfd(ctx) (0) @@ -1105,7 +1104,7 @@ struct usbi_os_backend { * Return 0 on success, or a LIBUSB_ERROR code on failure. */ int (*handle_events)(struct libusb_context *ctx, - struct pollfd *fds, POLL_NFDS_TYPE nfds, int num_ready); + struct pollfd *fds, usbi_nfds_t nfds, int num_ready); /* Handle transfer completion. Optional. * @@ -1142,7 +1141,7 @@ struct usbi_os_backend { */ int (*clock_gettime)(int clkid, struct timespec *tp); -#ifdef USBI_TIMERFD_AVAILABLE +#ifdef HAVE_TIMERFD /* clock ID of the clock that should be used for timerfd */ clockid_t (*get_timerfd_clockid)(void); #endif diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c index 1b73fde..33affb0 100644 --- a/libusb/os/linux_usbfs.c +++ b/libusb/os/linux_usbfs.c @@ -145,7 +145,7 @@ static int linux_scan_devices(struct libusb_context *ctx); static int sysfs_scan_device(struct libusb_context *ctx, const char *devname); static int detach_kernel_driver_and_claim(struct libusb_device_handle *, int); -#if !defined(USE_UDEV) +#if !defined(HAVE_LIBUDEV) static int linux_default_scan_devices (struct libusb_context *ctx); #endif @@ -344,7 +344,7 @@ static const char *find_usbfs_path(void) * simply assume /dev/bus/usb rather then making libusb_init fail. * Make the same assumption for Android where SELinux policies might block us * from reading /dev on newer devices. */ -#if defined(USE_UDEV) || defined(__ANDROID__) +#if defined(HAVE_LIBUDEV) || defined(__ANDROID__) if (ret == NULL) ret = "/dev/bus/usb"; #endif @@ -532,7 +532,7 @@ static void op_exit(struct libusb_context *ctx) static int linux_start_event_monitor(void) { -#if defined(USE_UDEV) +#if defined(HAVE_LIBUDEV) return linux_udev_start_event_monitor(); #elif !defined(__ANDROID__) return linux_netlink_start_event_monitor(); @@ -543,7 +543,7 @@ static int linux_start_event_monitor(void) static int linux_stop_event_monitor(void) { -#if defined(USE_UDEV) +#if defined(HAVE_LIBUDEV) return linux_udev_stop_event_monitor(); #elif !defined(__ANDROID__) return linux_netlink_stop_event_monitor(); @@ -558,7 +558,7 @@ static int linux_scan_devices(struct libusb_context *ctx) usbi_mutex_static_lock(&linux_hotplug_lock); -#if defined(USE_UDEV) +#if defined(HAVE_LIBUDEV) ret = linux_udev_scan_devices(ctx); #else ret = linux_default_scan_devices(ctx); @@ -571,7 +571,7 @@ static int linux_scan_devices(struct libusb_context *ctx) static void op_hotplug_poll(void) { -#if defined(USE_UDEV) +#if defined(HAVE_LIBUDEV) linux_udev_hotplug_poll(); #elif !defined(__ANDROID__) linux_netlink_hotplug_poll(); @@ -1229,7 +1229,7 @@ void linux_device_disconnected(uint8_t busnum, uint8_t devaddr) usbi_mutex_static_unlock(&active_contexts_lock); } -#if !defined(USE_UDEV) +#if !defined(HAVE_LIBUDEV) /* open a bus directory and adds all discovered devices to the context */ static int usbfs_scan_busdir(struct libusb_context *ctx, uint8_t busnum) { @@ -1332,7 +1332,7 @@ static int sysfs_scan_device(struct libusb_context *ctx, const char *devname) devname); } -#if !defined(USE_UDEV) +#if !defined(HAVE_LIBUDEV) static int sysfs_get_device_list(struct libusb_context *ctx) { DIR *devices = opendir(SYSFS_DEVICE_PATH); @@ -2760,14 +2760,14 @@ static int reap_for_handle(struct libusb_device_handle *handle) } static int op_handle_events(struct libusb_context *ctx, - struct pollfd *fds, POLL_NFDS_TYPE nfds, int num_ready) + struct pollfd *fds, usbi_nfds_t nfds, int num_ready) { + usbi_nfds_t n; int r; - unsigned int i = 0; usbi_mutex_lock(&ctx->open_devs_lock); - for (i = 0; i < nfds && num_ready > 0; i++) { - struct pollfd *pollfd = &fds[i]; + for (n = 0; n < nfds && num_ready > 0; n++) { + struct pollfd *pollfd = &fds[n]; struct libusb_device_handle *handle; struct linux_device_handle_priv *hpriv = NULL; @@ -2839,7 +2839,7 @@ static int op_clock_gettime(int clk_id, struct timespec *tp) } } -#ifdef USBI_TIMERFD_AVAILABLE +#ifdef HAVE_TIMERFD static clockid_t op_get_timerfd_clockid(void) { return monotonic_clkid; @@ -2890,7 +2890,7 @@ const struct usbi_os_backend usbi_backend = { .clock_gettime = op_clock_gettime, -#ifdef USBI_TIMERFD_AVAILABLE +#ifdef HAVE_TIMERFD .get_timerfd_clockid = op_get_timerfd_clockid, #endif diff --git a/libusb/os/poll_posix.h b/libusb/os/poll_posix.h index 01702f3..48c4904 100644 --- a/libusb/os/poll_posix.h +++ b/libusb/os/poll_posix.h @@ -4,6 +4,12 @@ #include <poll.h> #include <unistd.h> +#ifdef HAVE_NFDS_T +typedef nfds_t usbi_nfds_t; +#else +typedef unsigned int usbi_nfds_t; +#endif + #define usbi_write write #define usbi_read read #define usbi_close close diff --git a/libusb/os/poll_windows.c b/libusb/os/poll_windows.c index 21a1363..bd8ac67 100644 --- a/libusb/os/poll_windows.c +++ b/libusb/os/poll_windows.c @@ -334,12 +334,12 @@ static DWORD poll_wait(const HANDLE *wait_handles, DWORD num_wait_handles, DWORD * Currently, this function only accepts one of POLLIN or POLLOUT per fd * (but you can create multiple fds from the same handle for read and write) */ -int usbi_poll(struct pollfd *fds, unsigned int nfds, int timeout) +int usbi_poll(struct pollfd *fds, usbi_nfds_t nfds, int timeout) { struct file_descriptor **fds_array; HANDLE *handles_array; struct file_descriptor *fd; - unsigned int n; + usbi_nfds_t n; int nready; if (nfds <= MAXIMUM_WAIT_OBJECTS) { diff --git a/libusb/os/poll_windows.h b/libusb/os/poll_windows.h index 7decd4a..c78c9d3 100644 --- a/libusb/os/poll_windows.h +++ b/libusb/os/poll_windows.h @@ -41,6 +41,8 @@ #define POLLHUP 0x0010 /* Hung up */ #define POLLNVAL 0x0020 /* Invalid request: fd not open */ +typedef unsigned int usbi_nfds_t; + struct pollfd { int fd; /* file descriptor */ short events; /* requested events */ @@ -57,7 +59,7 @@ extern const struct winfd INVALID_WINFD; struct winfd usbi_create_fd(void); int usbi_pipe(int pipefd[2]); -int usbi_poll(struct pollfd *fds, unsigned int nfds, int timeout); +int usbi_poll(struct pollfd *fds, usbi_nfds_t nfds, int timeout); ssize_t usbi_write(int fd, const void *buf, size_t count); ssize_t usbi_read(int fd, void *buf, size_t count); int usbi_close(int fd); diff --git a/libusb/os/sunos_usb.c b/libusb/os/sunos_usb.c index 9d42b8a..85d0fdf 100644 --- a/libusb/os/sunos_usb.c +++ b/libusb/os/sunos_usb.c @@ -1641,7 +1641,7 @@ sunos_usb_get_status(int fd) return (status); } -#ifdef USBI_TIMERFD_AVAILABLE +#ifdef HAVE_TIMERFD static clockid_t op_get_timerfd_clockid(void) { return CLOCK_MONOTONIC; @@ -1672,7 +1672,7 @@ const struct usbi_os_backend usbi_backend = { .cancel_transfer = sunos_cancel_transfer, .handle_transfer_completion = sunos_handle_transfer_completion, .clock_gettime = sunos_clock_gettime, -#ifdef USBI_TIMERFD_AVAILABLE +#ifdef HAVE_TIMERFD .get_timerfd_clockid = op_get_timerfd_clockid, #endif .device_priv_size = sizeof(sunos_dev_priv_t), diff --git a/libusb/os/windows_common.c b/libusb/os/windows_common.c index a8ee237..df05eaf 100644 --- a/libusb/os/windows_common.c +++ b/libusb/os/windows_common.c @@ -678,12 +678,12 @@ static int windows_cancel_transfer(struct usbi_transfer *itransfer) return priv->backend->cancel_transfer(itransfer); } -static int windows_handle_events(struct libusb_context *ctx, struct pollfd *fds, POLL_NFDS_TYPE nfds, int num_ready) +static int windows_handle_events(struct libusb_context *ctx, struct pollfd *fds, usbi_nfds_t nfds, int num_ready) { struct windows_context_priv *priv = _context_priv(ctx); struct usbi_transfer *itransfer; DWORD io_size, io_result; - POLL_NFDS_TYPE i; + usbi_nfds_t i; bool found; int transfer_fd; int r = LIBUSB_SUCCESS; diff --git a/libusb/version_nano.h b/libusb/version_nano.h index 5ad7260..f27fa5e 100644 --- a/libusb/version_nano.h +++ b/libusb/version_nano.h @@ -1 +1 @@ -#define LIBUSB_NANO 11443 +#define LIBUSB_NANO 11444 diff --git a/msvc/config.h b/msvc/config.h index ad3dcaa..840c8df 100644 --- a/msvc/config.h +++ b/msvc/config.h @@ -41,8 +41,11 @@ /* Windows backend */ #define OS_WINDOWS 1 -/* type of second poll() argument */ -#define POLL_NFDS_TYPE unsigned int +/* Use Windows poll() implementation */ +#define POLL_WINDOWS 1 + +/* Use Windows Threads */ +#define THREADS_WINDOWS 1 /* Uncomment to enabling output to system log */ // #define USE_SYSTEM_LOGGING_FACILITY |