Diff between fc771c9972ed94b7fe7c86c9acaf0c53c1477998 and 3c96d235a94a6e592e0331129fe55fc4bf8df6fd

Changed Files

File Additions Deletions Status
src/oui.c +42 -4 modified
src/oui.h +2 -0 modified

Full Patch

diff --git a/src/oui.c b/src/oui.c
index cc9e07d..a1193ac 100644
--- a/src/oui.c
+++ b/src/oui.c
@@ -25,6 +25,47 @@
 #include <config.h>
 #endif
 
+#include "oui.h"
+
+#ifdef HAVE_UDEV_HWDB_NEW
+#include <libudev.h>
+
+char *batocomp(const bdaddr_t *ba)
+{
+	struct udev *udev;
+	struct udev_hwdb *hwdb;
+	struct udev_list_entry *head, *entry;
+	char modalias[11], *comp = NULL;
+
+	sprintf(modalias, "OUI:%2.2X%2.2X%2.2X", ba->b[5], ba->b[4], ba->b[3]);
+
+	udev = udev_new();
+	if (!udev)
+		return NULL;
+
+	hwdb = udev_hwdb_new(udev);
+	if (!hwdb)
+		goto done;
+
+	head = udev_hwdb_get_properties_list_entry(hwdb, modalias, 0);
+
+	udev_list_entry_foreach(entry, head) {
+		const char *name = udev_list_entry_get_name(entry);
+
+		if (name && !strcmp(name, "ID_OUI_FROM_DATABASE")) {
+			comp = strdup(udev_list_entry_get_value(entry));
+			break;
+		}
+	}
+
+	hwdb = udev_hwdb_unref(hwdb);
+
+done:
+	udev = udev_unref(udev);
+
+	return comp;
+}
+#else
 #include <stdio.h>
 #include <errno.h>
 #include <fcntl.h>
@@ -34,10 +75,6 @@
 #include <sys/stat.h>
 #include <sys/mman.h>
 
-#include <bluetooth/bluetooth.h>
-
-#include "oui.h"
-
 /* http://standards.ieee.org/regauth/oui/oui.txt */
 
 #ifndef OUIFILE
@@ -99,3 +136,4 @@ char *batocomp(const bdaddr_t *ba)
 
 	return ouitocomp(oui);
 }
+#endif
diff --git a/src/oui.h b/src/oui.h
index 2ddc27f..abd0386 100644
--- a/src/oui.h
+++ b/src/oui.h
@@ -21,4 +21,6 @@
  *
  */
 
+#include <bluetooth/bluetooth.h>
+
 char *batocomp(const bdaddr_t *ba);