From 7a44ed060819b16672c84113f6b95f23a92a2bab Mon Sep 17 00:00:00 2001 From: jow Date: Sun, 3 Feb 2013 12:03:24 +0000 Subject: libiwinfo: reset ioctl_socket fd in iwinfo_close(), fixes random failures with multiple cycles of iwinfo_finish() / iwinfo_backend() git-svn-id: svn://svn.openwrt.org/openwrt/trunk@35471 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/network/utils/iwinfo/src/iwinfo_utils.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'package/network/utils/iwinfo/src/iwinfo_utils.c') diff --git a/package/network/utils/iwinfo/src/iwinfo_utils.c b/package/network/utils/iwinfo/src/iwinfo_utils.c index 164e51f84..6616f1489 100644 --- a/package/network/utils/iwinfo/src/iwinfo_utils.c +++ b/package/network/utils/iwinfo/src/iwinfo_utils.c @@ -28,7 +28,7 @@ static int ioctl_socket = -1; static int iwinfo_ioctl_socket(void) { /* Prepare socket */ - if( ioctl_socket == -1 ) + if (ioctl_socket == -1) { ioctl_socket = socket(AF_INET, SOCK_DGRAM, 0); fcntl(ioctl_socket, F_SETFD, fcntl(ioctl_socket, F_GETFD) | FD_CLOEXEC); @@ -82,7 +82,7 @@ int iwinfo_ifup(const char *ifname) strncpy(ifr.ifr_name, ifname, IFNAMSIZ); - if( iwinfo_ioctl(SIOCGIFFLAGS, &ifr) ) + if (iwinfo_ioctl(SIOCGIFFLAGS, &ifr)) return 0; ifr.ifr_flags |= (IFF_UP | IFF_RUNNING); @@ -96,7 +96,7 @@ int iwinfo_ifdown(const char *ifname) strncpy(ifr.ifr_name, ifname, IFNAMSIZ); - if( iwinfo_ioctl(SIOCGIFFLAGS, &ifr) ) + if (iwinfo_ioctl(SIOCGIFFLAGS, &ifr)) return 0; ifr.ifr_flags &= ~(IFF_UP | IFF_RUNNING); @@ -110,7 +110,7 @@ int iwinfo_ifmac(const char *ifname) strncpy(ifr.ifr_name, ifname, IFNAMSIZ); - if( iwinfo_ioctl(SIOCGIFHWADDR, &ifr) ) + if (iwinfo_ioctl(SIOCGIFHWADDR, &ifr)) return 0; ifr.ifr_hwaddr.sa_data[1]++; @@ -121,8 +121,10 @@ int iwinfo_ifmac(const char *ifname) void iwinfo_close(void) { - if( ioctl_socket > -1 ) + if (ioctl_socket > -1) close(ioctl_socket); + + ioctl_socket = -1; } struct iwinfo_hardware_entry * iwinfo_hardware(struct iwinfo_hardware_id *id) -- cgit v1.2.3 From 7e49a98eed7f81bb50482735b629f371122aa51c Mon Sep 17 00:00:00 2001 From: jow Date: Fri, 26 Apr 2013 13:20:15 +0000 Subject: iwinfo: move builtin hardware database to /usr/share/libiwinfo/hardware.txt git-svn-id: svn://svn.openwrt.org/openwrt/trunk@36449 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/network/utils/iwinfo/src/iwinfo_utils.c | 37 +++++++++++++++++++------ 1 file changed, 28 insertions(+), 9 deletions(-) (limited to 'package/network/utils/iwinfo/src/iwinfo_utils.c') diff --git a/package/network/utils/iwinfo/src/iwinfo_utils.c b/package/network/utils/iwinfo/src/iwinfo_utils.c index 6616f1489..b6760c348 100644 --- a/package/network/utils/iwinfo/src/iwinfo_utils.c +++ b/package/network/utils/iwinfo/src/iwinfo_utils.c @@ -129,27 +129,46 @@ void iwinfo_close(void) struct iwinfo_hardware_entry * iwinfo_hardware(struct iwinfo_hardware_id *id) { - const struct iwinfo_hardware_entry *e; + FILE *db; + char buf[256] = { 0 }; + static struct iwinfo_hardware_entry e; - for (e = IWINFO_HARDWARE_ENTRIES; e->vendor_name; e++) + if (!(db = fopen(IWINFO_HARDWARE_FILE, "r"))) + return NULL; + + while (fgets(buf, sizeof(buf) - 1, db) != NULL) { - if ((e->vendor_id != 0xffff) && (e->vendor_id != id->vendor_id)) + memset(&e, 0, sizeof(e)); + + if (sscanf(buf, "%hx %hx %hx %hx %hd %hd \"%63[^\"]\" \"%63[^\"]\"", + &e.vendor_id, &e.device_id, + &e.subsystem_vendor_id, &e.subsystem_device_id, + &e.txpower_offset, &e.frequency_offset, + e.vendor_name, e.device_name) < 8) + continue; + + if ((e.vendor_id != 0xffff) && (e.vendor_id != id->vendor_id)) continue; - if ((e->device_id != 0xffff) && (e->device_id != id->device_id)) + if ((e.device_id != 0xffff) && (e.device_id != id->device_id)) continue; - if ((e->subsystem_vendor_id != 0xffff) && - (e->subsystem_vendor_id != id->subsystem_vendor_id)) + if ((e.subsystem_vendor_id != 0xffff) && + (e.subsystem_vendor_id != id->subsystem_vendor_id)) continue; - if ((e->subsystem_device_id != 0xffff) && - (e->subsystem_device_id != id->subsystem_device_id)) + if ((e.subsystem_device_id != 0xffff) && + (e.subsystem_device_id != id->subsystem_device_id)) continue; - return (struct iwinfo_hardware_entry *)e; + break; } + fclose(db); + + if (e.device_name[0]) + return &e; + return NULL; } -- cgit v1.2.3 From d75b5a818b14d62bc1c657c70b262c5280714a87 Mon Sep 17 00:00:00 2001 From: jow Date: Sun, 28 Apr 2013 14:04:39 +0000 Subject: iwinfo: fix iwinfo_hardware() return value if chip id is not found git-svn-id: svn://svn.openwrt.org/openwrt/trunk@36471 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/network/utils/iwinfo/src/iwinfo_utils.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'package/network/utils/iwinfo/src/iwinfo_utils.c') diff --git a/package/network/utils/iwinfo/src/iwinfo_utils.c b/package/network/utils/iwinfo/src/iwinfo_utils.c index b6760c348..1a831f3ac 100644 --- a/package/network/utils/iwinfo/src/iwinfo_utils.c +++ b/package/network/utils/iwinfo/src/iwinfo_utils.c @@ -131,7 +131,7 @@ struct iwinfo_hardware_entry * iwinfo_hardware(struct iwinfo_hardware_id *id) { FILE *db; char buf[256] = { 0 }; - static struct iwinfo_hardware_entry e; + static struct iwinfo_hardware_entry e, *rv = NULL; if (!(db = fopen(IWINFO_HARDWARE_FILE, "r"))) return NULL; @@ -161,15 +161,12 @@ struct iwinfo_hardware_entry * iwinfo_hardware(struct iwinfo_hardware_id *id) (e.subsystem_device_id != id->subsystem_device_id)) continue; + rv = &e; break; } fclose(db); - - if (e.device_name[0]) - return &e; - - return NULL; + return rv; } int iwinfo_hardware_id_from_mtd(struct iwinfo_hardware_id *id) -- cgit v1.2.3