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);
