... | ... |
@@ -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 |
} |