Index: third_party/libusb/src/libusb/os/linux_udev.cc diff --git a/third_party/libusb/src/libusb/os/linux_udev.c b/third_party/libusb/src/libusb/os/linux_udev.cc similarity index 83% rename from third_party/libusb/src/libusb/os/linux_udev.c rename to third_party/libusb/src/libusb/os/linux_udev.cc index 99ac943410557de1a5cdd54082932db972040c2c..1b51ce44f4973c39b906d472b2a0cab51f987d3c 100644 --- a/third_party/libusb/src/libusb/os/linux_udev.c +++ b/third_party/libusb/src/libusb/os/linux_udev.cc @@ -37,11 +37,14 @@ #include #include #include -#include +extern "C" { #include "libusb.h" #include "libusbi.h" #include "linux_usbfs.h" +} + +#include "device/udev_linux/udev.h" /* udev context */ static struct udev *udev_ctx = NULL; @@ -58,30 +61,30 @@ int linux_udev_start_event_monitor(void) int r; assert(udev_ctx == NULL); - udev_ctx = udev_new(); + udev_ctx = device::udev_new(); if (!udev_ctx) { usbi_err(NULL, "could not create udev context"); return LIBUSB_ERROR_OTHER; } - udev_monitor = udev_monitor_new_from_netlink(udev_ctx, "udev"); + udev_monitor = device::udev_monitor_new_from_netlink(udev_ctx, "udev"); if (!udev_monitor) { usbi_err(NULL, "could not initialize udev monitor"); goto err_free_ctx; } - r = udev_monitor_filter_add_match_subsystem_devtype(udev_monitor, "usb", 0); + r = device::udev_monitor_filter_add_match_subsystem_devtype(udev_monitor, "usb", 0); if (r) { usbi_err(NULL, "could not initialize udev monitor filter for \"usb\" subsystem"); goto err_free_monitor; } - if (udev_monitor_enable_receiving(udev_monitor)) { + if (device::udev_monitor_enable_receiving(udev_monitor)) { usbi_err(NULL, "failed to enable the udev monitor"); goto err_free_monitor; } - udev_monitor_fd = udev_monitor_get_fd(udev_monitor); + udev_monitor_fd = device::udev_monitor_get_fd(udev_monitor); /* Some older versions of udev are not non-blocking by default, * so make sure this is set */ @@ -114,11 +117,11 @@ err_close_pipe: close(udev_control_pipe[0]); close(udev_control_pipe[1]); err_free_monitor: - udev_monitor_unref(udev_monitor); + device::udev_monitor_unref(udev_monitor); udev_monitor = NULL; udev_monitor_fd = -1; err_free_ctx: - udev_unref(udev_ctx); + device::udev_unref(udev_ctx); udev_ctx = NULL; return LIBUSB_ERROR_OTHER; } @@ -141,12 +144,12 @@ int linux_udev_stop_event_monitor(void) pthread_join(linux_event_thread, NULL); /* Release the udev monitor */ - udev_monitor_unref(udev_monitor); + device::udev_monitor_unref(udev_monitor); udev_monitor = NULL; udev_monitor_fd = -1; /* Clean up the udev context */ - udev_unref(udev_ctx); + device::udev_unref(udev_ctx); udev_ctx = NULL; /* close and reset control pipe */ @@ -183,7 +186,7 @@ static void *linux_udev_event_thread_main(void *arg) } if (fds[1].revents & POLLIN) { usbi_mutex_static_lock(&linux_hotplug_lock); - udev_dev = udev_monitor_receive_device(udev_monitor); + udev_dev = device::udev_monitor_receive_device(udev_monitor); if (udev_dev) udev_hotplug_event(udev_dev); usbi_mutex_static_unlock(&linux_hotplug_lock); @@ -200,12 +203,12 @@ static int udev_device_info(struct libusb_context *ctx, int detached, uint8_t *devaddr, const char **sys_name) { const char *dev_node; - dev_node = udev_device_get_devnode(udev_dev); + dev_node = device::udev_device_get_devnode(udev_dev); if (!dev_node) { return LIBUSB_ERROR_OTHER; } - *sys_name = udev_device_get_sysname(udev_dev); + *sys_name = device::udev_device_get_sysname(udev_dev); if (!*sys_name) { return LIBUSB_ERROR_OTHER; } @@ -223,7 +226,7 @@ static void udev_hotplug_event(struct udev_device* udev_dev) int r; do { - udev_action = udev_device_get_action(udev_dev); + udev_action = device::udev_device_get_action(udev_dev); if (!udev_action) { break; } @@ -246,7 +249,7 @@ static void udev_hotplug_event(struct udev_device* udev_dev) } } while (0); - udev_device_unref(udev_dev); + device::udev_device_unref(udev_dev); } int linux_udev_scan_devices(struct libusb_context *ctx) @@ -259,33 +262,33 @@ int linux_udev_scan_devices(struct libusb_context *ctx) assert(udev_ctx != NULL); - enumerator = udev_enumerate_new(udev_ctx); + enumerator = device::udev_enumerate_new(udev_ctx); if (NULL == enumerator) { usbi_err(ctx, "error creating udev enumerator"); return LIBUSB_ERROR_OTHER; } - udev_enumerate_add_match_subsystem(enumerator, "usb"); - udev_enumerate_scan_devices(enumerator); - devices = udev_enumerate_get_list_entry(enumerator); + device::udev_enumerate_add_match_subsystem(enumerator, "usb"); + device::udev_enumerate_scan_devices(enumerator); + devices = device::udev_enumerate_get_list_entry(enumerator); udev_list_entry_foreach(entry, devices) { - const char *path = udev_list_entry_get_name(entry); + const char *path = device::udev_list_entry_get_name(entry); uint8_t busnum = 0, devaddr = 0; - udev_dev = udev_device_new_from_syspath(udev_ctx, path); + udev_dev = device::udev_device_new_from_syspath(udev_ctx, path); r = udev_device_info(ctx, 0, udev_dev, &busnum, &devaddr, &sys_name); if (r) { - udev_device_unref(udev_dev); + device::udev_device_unref(udev_dev); continue; } linux_enumerate_device(ctx, busnum, devaddr, sys_name); - udev_device_unref(udev_dev); + device::udev_device_unref(udev_dev); } - udev_enumerate_unref(enumerator); + device::udev_enumerate_unref(enumerator); return LIBUSB_SUCCESS; } @@ -296,7 +299,7 @@ void linux_udev_hotplug_poll(void) usbi_mutex_static_lock(&linux_hotplug_lock); do { - udev_dev = udev_monitor_receive_device(udev_monitor); + udev_dev = device::udev_monitor_receive_device(udev_monitor); if (udev_dev) { usbi_dbg("Handling hotplug event from hotplug_poll"); udev_hotplug_event(udev_dev); Index: third_party/libusb/src/libusb/os/linux_usbfs.h diff --git a/third_party/libusb/src/libusb/os/linux_usbfs.h b/third_party/libusb/src/libusb/os/linux_usbfs.h index 1f5b191f4a745937efe52695d7dbaa949a15df08..eedeaaf3654f22ecaac9fd1332d32b2855450bce 100644 --- a/third_party/libusb/src/libusb/os/linux_usbfs.h +++ b/third_party/libusb/src/libusb/os/linux_usbfs.h @@ -159,10 +159,20 @@ struct usbfs_disconnect_claim { extern usbi_mutex_static_t linux_hotplug_lock; #if defined(HAVE_LIBUDEV) + +#ifdef __cplusplus +extern "C" { +#endif + int linux_udev_start_event_monitor(void); int linux_udev_stop_event_monitor(void); int linux_udev_scan_devices(struct libusb_context *ctx); void linux_udev_hotplug_poll(void); + +#ifdef __cplusplus +} +#endif + #else int linux_netlink_start_event_monitor(void); int linux_netlink_stop_event_monitor(void);