Browse code

Tidy up code

Shawn Webb authored on 2013/11/05 05:19:00
Showing 1 changed files
... ...
@@ -45,8 +45,8 @@ struct device *get_device_entry(struct device *devices, size_t *ndevices, const
45 45
     if ((devices)) {
46 46
         int found = 0;
47 47
 
48
-        for (device = devices; device < devices + *ndevices; device++) {
49
-            if (!strcmp(device->name, name)) {
48
+        for (i = 0; i < *ndevices; i++) {
49
+            if (!strcmp(devices[i].name, name)) {
50 50
                 found = 1;
51 51
                 break;
52 52
             }
... ...
@@ -60,11 +60,10 @@ struct device *get_device_entry(struct device *devices, size_t *ndevices, const
60 60
                 free(devices);
61 61
                 return NULL;
62 62
             }
63
-
64 63
             devices = p;
65
-            device = devices + *ndevices;
64
+
65
+            memset(devices + *ndevices, 0x00, sizeof(struct device));
66 66
             (*ndevices)++;
67
-            memset(device, 0x00, sizeof(struct device));
68 67
         }
69 68
     } else {
70 69
         devices = calloc(1, sizeof(device));
... ...
@@ -75,8 +74,8 @@ struct device *get_device_entry(struct device *devices, size_t *ndevices, const
75 75
         *ndevices = 1;
76 76
     }
77 77
 
78
-    if (!(device->name))
79
-        device->name = strdup(name);
78
+    if (!(devices[*ndevices - 1].name) && name)
79
+        device[*ndevices - 1].name = strdup(name);
80 80
 
81 81
     return devices;
82 82
 }
... ...
@@ -85,8 +84,8 @@ struct device *get_device_entry(struct device *devices, size_t *ndevices, const
85 85
 struct device *get_devices(void)
86 86
 {
87 87
     struct ifaddrs *addrs=NULL, *addr;
88
-    struct device *devices=NULL, *device=NULL;
89
-    size_t ndevices=0, i;
88
+    struct device *devices=NULL;
89
+    size_t ndevices=0, i, j;
90 90
     void *p;
91 91
     uint8_t *mac;
92 92
     int sock;
... ...
@@ -131,7 +130,7 @@ struct device *get_devices(void)
131 131
          * Windows, or FreeBSD.
132 132
          */
133 133
 #if !defined(SIOCGIFHWADDR)
134
-        for (device = devices; device < devices + ndevices; device++) {
134
+        for (i=0; i < ndevices; i++) {
135 135
             if (!(strcmp(device->name, addr->ifa_name))) {
136 136
                 sdl = (struct sockaddr_dl *)(addr->ifa_addr);
137 137
 
... ...
@@ -140,8 +139,8 @@ struct device *get_devices(void)
140 140
 #else
141 141
                 mac = ((uint8_t *)(sdl->sdl_data + sdl->sdl_nlen));
142 142
 #endif
143
-                for (i=0; i<6; i++)
144
-                    snprintf(device->mac+strlen(device->mac), sizeof(device->mac)-strlen(device->mac)-1, "%02x:", mac[i]);
143
+                for (j=0; j<6; j++)
144
+                    snprintf(devices[i].mac+strlen(devices[i].mac), sizeof(devices[i].mac)-strlen(devices[i].mac)-1, "%02x:", mac[j]);
145 145
 
146 146
                 break;
147 147
             }
... ...
@@ -156,10 +155,11 @@ struct device *get_devices(void)
156 156
 
157 157
     /* This is the Linux version of getting the MAC addresses */
158 158
 #if defined(SIOCGIFHWADDR)
159
-    for (device = devices; device < devices + (ndevices); device++) {
159
+    for (i=0; i < ndevices; i++) {
160 160
         memset(&ifr, 0x00, sizeof(struct ifreq));
161
+        memset(devices[i].mac, 0x00, sizeof(devices[i].mac));
161 162
 
162
-        strcpy(ifr.ifr_name, device->name);
163
+        strcpy(ifr.ifr_name, devices[i].name);
163 164
 
164 165
         sock = socket(AF_INET, SOCK_DGRAM, 0);
165 166
         if (sock < 0)
... ...
@@ -169,12 +169,14 @@ struct device *get_devices(void)
169 169
             close(sock);
170 170
             goto err;
171 171
         }
172
-
173 172
         close(sock);
173
+
174 174
         mac = ((uint8_t *)(ifr.ifr_ifru.ifru_hwaddr.sa_data));
175
+        if (!(mac))
176
+            continue;
175 177
 
176
-        for (i=0; i<6; i++)
177
-            snprintf(device->mac+strlen(device->mac), sizeof(device->mac)-strlen(device->mac)-1, "%02x:", mac[i]);
178
+        for (j=0; j<6; j++)
179
+            snprintf(devices[i].mac+strlen(devices[i].mac), sizeof(devices[i].mac)-strlen(devices[i].mac)-1, "%02x:", mac[j]);
178 180
     }
179 181
 #endif
180 182
 
... ...
@@ -195,9 +197,9 @@ err:
195 195
         freeifaddrs(addrs);
196 196
 
197 197
     if (devices) {
198
-        for (device = devices; device < devices + ndevices; device++)
199
-            if (device->name)
200
-                free(device->name);
198
+        for (i=0; i < ndevices; i++)
199
+            if (devices[i].name)
200
+                free(devices[i].name);
201 201
 
202 202
         free(devices);
203 203
     }