Changeset 29423


Ignore:
Timestamp:
2011-12-04T19:11:57+01:00 (6 years ago)
Author:
jow
Message:

[package] iwinfo: fix model detection on legacy atheros

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/iwinfo/src/iwinfo_madwifi.c

    r29421 r29423  
    989989} 
    990990 
     991static void madwifi_proc_file(const char *ifname, const char *file, 
     992                                                          char *buf, int blen) 
     993{ 
     994        int fd; 
     995        const char *wifi = madwifi_isvap(ifname, NULL); 
     996 
     997        if (!wifi && madwifi_iswifi(ifname)) 
     998                wifi = ifname; 
     999 
     1000        snprintf(buf, blen, "/proc/sys/dev/%s/%s", wifi, file); 
     1001 
     1002        if ((fd = open(buf, O_RDONLY)) > 0) 
     1003        { 
     1004                if (read(fd, buf, blen) > 1) 
     1005                        buf[strlen(buf)-1] = 0; 
     1006                else 
     1007                        buf[0] = 0; 
     1008 
     1009                close(fd); 
     1010        } 
     1011        else 
     1012        { 
     1013                buf[0] = 0; 
     1014        } 
     1015} 
     1016 
     1017static int madwifi_startswith(const char *a, const char *b) 
     1018{ 
     1019        int l1 = strlen(a); 
     1020        int l2 = strlen(b); 
     1021        int ln = (l1 < l2) ? l1 : l2; 
     1022        return !strncmp(a, b, ln); 
     1023} 
     1024 
    9911025int madwifi_get_hardware_id(const char *ifname, char *buf) 
    9921026{ 
    993         return wext_get_hardware_id(ifname, buf); 
     1027        char vendor[64]; 
     1028        char device[64]; 
     1029        struct iwinfo_hardware_id *ids; 
     1030        struct iwinfo_hardware_entry *e; 
     1031 
     1032        if (wext_get_hardware_id(ifname, buf)) 
     1033        { 
     1034                ids = (struct iwinfo_hardware_id *)buf; 
     1035                madwifi_proc_file(ifname, "dev_vendor", vendor, sizeof(vendor)); 
     1036                madwifi_proc_file(ifname, "dev_name",   device, sizeof(device)); 
     1037 
     1038                if (vendor[0] && device[0]) 
     1039                { 
     1040                        for (e = IWINFO_HARDWARE_ENTRIES; e->vendor_name; e++) 
     1041                        { 
     1042                                if (!madwifi_startswith(vendor, e->vendor_name)) 
     1043                                        continue; 
     1044 
     1045                                if (!madwifi_startswith(device, e->device_name)) 
     1046                                        continue; 
     1047 
     1048                                ids->vendor_id = e->vendor_id; 
     1049                                ids->device_id = e->device_id; 
     1050                                ids->subsystem_vendor_id = e->subsystem_vendor_id; 
     1051                                ids->subsystem_device_id = e->subsystem_device_id; 
     1052 
     1053                                return 0; 
     1054                        } 
     1055                } 
     1056 
     1057                return -1; 
     1058        } 
     1059 
     1060        return 0; 
    9941061} 
    9951062 
Note: See TracChangeset for help on using the changeset viewer.