diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2012-12-09 00:27:20 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2012-12-09 00:36:41 +0100 |
commit | 3c96d235a94a6e592e0331129fe55fc4bf8df6fd (patch) | |
tree | 5f0cf1083a7eaacb98bf071e57fd215af02d0f44 /src/oui.c | |
parent | fc771c9972ed94b7fe7c86c9acaf0c53c1477998 (diff) | |
download | bluez-3c96d235a94a6e592e0331129fe55fc4bf8df6fd.tar.gz |
core: Add support for udev based batocomp implementation
Diffstat (limited to 'src/oui.c')
-rw-r--r-- | src/oui.c | 46 |
1 files changed, 42 insertions, 4 deletions
@@ -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 |