chromium/third_party/libusb/linux-udev.patch

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 <sys/utsname.h>
 #include <sys/socket.h>
 #include <unistd.h>
-#include <libudev.h>
 
+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);