endif
libusb_1_0_la_CFLAGS = $(VISIBILITY_CFLAGS) $(AM_CFLAGS) $(THREAD_CFLAGS)
-libusb_1_0_la_SOURCES = libusbi.h core.c descriptor.c io.c sync.c os/threads_posix.h $(OS_SRC)
+libusb_1_0_la_SOURCES = libusbi.h core.c descriptor.c io.c sync.c os/threads_posix.h os/poll_posix.h $(OS_SRC)
hdrdir = $(includedir)/libusb-1.0
hdr_HEADERS = libusb.h
#include <config.h>
#include <errno.h>
-#include <poll.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
-#include <unistd.h>
-#include "libusb.h"
+#include "os/poll_posix.h"
+
#include "libusbi.h"
#if defined(OS_LINUX)
usbi_mutex_unlock(&ctx->pollfd_modify_lock);
/* write some data on control pipe to interrupt event handlers */
- r = write(ctx->ctrl_pipe[1], &dummy, sizeof(dummy));
+ r = usbi_write(ctx->ctrl_pipe[1], &dummy, sizeof(dummy));
if (r <= 0) {
usbi_warn(ctx, "internal signalling write failed, closing anyway");
do_close(ctx, dev_handle);
libusb_lock_events(ctx);
/* read the dummy data */
- r = read(ctx->ctrl_pipe[0], &dummy, sizeof(dummy));
+ r = usbi_read(ctx->ctrl_pipe[0], &dummy, sizeof(dummy));
if (r <= 0)
usbi_warn(ctx, "internal signalling read failed, closing anyway");
#include <config.h>
#include <errno.h>
-#include <poll.h>
#include <signal.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <time.h>
-#include <unistd.h>
+
+#include "os/poll_posix.h"
#ifdef USBI_TIMERFD_AVAILABLE
#include <sys/timerfd.h>
list_init(&ctx->pollfds);
/* FIXME should use an eventfd on kernels that support it */
- r = pipe(ctx->ctrl_pipe);
+ r = usbi_pipe(ctx->ctrl_pipe);
if (r < 0) {
r = LIBUSB_ERROR_OTHER;
goto err;
return 0;
err_close_pipe:
- close(ctx->ctrl_pipe[0]);
- close(ctx->ctrl_pipe[1]);
+ usbi_close(ctx->ctrl_pipe[0]);
+ usbi_close(ctx->ctrl_pipe[1]);
err:
usbi_mutex_destroy(&ctx->flying_transfers_lock);
usbi_mutex_destroy(&ctx->pollfds_lock);
void usbi_io_exit(struct libusb_context *ctx)
{
usbi_remove_pollfd(ctx, ctx->ctrl_pipe[0]);
- close(ctx->ctrl_pipe[0]);
- close(ctx->ctrl_pipe[1]);
+ usbi_close(ctx->ctrl_pipe[0]);
+ usbi_close(ctx->ctrl_pipe[1]);
#ifdef USBI_TIMERFD_AVAILABLE
if (usbi_using_timerfd(ctx)) {
usbi_remove_pollfd(ctx, ctx->timerfd);
timeout_ms++;
usbi_dbg("poll() %d fds with timeout in %dms", nfds, timeout_ms);
- r = poll(fds, nfds, timeout_ms);
+ r = usbi_poll(fds, nfds, timeout_ms);
usbi_dbg("poll() returned %d", r);
if (r == 0) {
free(fds);
--- /dev/null
+#ifndef __LIBUSB_POLL_POSIX_H__
+#define __LIBUSB_POLL_POSIX_H__
+
+#include <unistd.h>
+#include <poll.h>
+#define usbi_write write
+#define usbi_read read
+#define usbi_close close
+#define usbi_pipe pipe
+#define usbi_poll poll
+
+#endif /* __LIBUSB_POLL_POSIX_H__ */