Lines 190-196
Link Here
|
190 |
char ** |
190 |
char ** |
191 |
Disk_Names() |
191 |
Disk_Names() |
192 |
{ |
192 |
{ |
193 |
int disk_cnt; |
193 |
int i, disk_cnt; |
194 |
char **disks; |
194 |
char **disks; |
195 |
int error; |
195 |
int error; |
196 |
size_t listsize; |
196 |
size_t listsize; |
Lines 205-234
Link Here
|
205 |
if (listsize == 0) |
205 |
if (listsize == 0) |
206 |
return (NULL); |
206 |
return (NULL); |
207 |
|
207 |
|
208 |
disks = malloc(sizeof *disks * (1 + MAX_NO_DISKS)); |
208 |
disk1 = disklist = (char *)calloc(listsize + 1, sizeof *disklist); |
209 |
if (disks == NULL) |
209 |
if (disklist == NULL) |
210 |
return NULL; |
210 |
return NULL; |
211 |
disk1 = disklist = (char *)malloc(listsize + 1); |
211 |
|
212 |
if (disklist == NULL) { |
|
|
213 |
free(disks); |
214 |
return NULL; |
215 |
} |
216 |
memset(disks,0,sizeof *disks * (1 + MAX_NO_DISKS)); |
217 |
memset(disklist, 0, listsize + 1); |
218 |
error = sysctlbyname("kern.disks", disklist, &listsize, NULL, 0); |
212 |
error = sysctlbyname("kern.disks", disklist, &listsize, NULL, 0); |
219 |
if (error || disklist[0] == 0) { |
213 |
if (error || disklist[0] == 0) { |
220 |
free(disklist); |
214 |
free(disklist); |
221 |
free(disks); |
|
|
222 |
return NULL; |
215 |
return NULL; |
223 |
} |
216 |
} |
224 |
for (disk_cnt = 0; disk_cnt < MAX_NO_DISKS; disk_cnt++) { |
217 |
|
|
|
218 |
disk_cnt = 1; |
219 |
for (i = 0; i < listsize; ++i) { |
220 |
if (disklist[i] == ' ') |
221 |
disk_cnt++; |
222 |
} |
223 |
|
224 |
disks = calloc(disk_cnt + 1, sizeof *disks); |
225 |
if (disks == NULL) { |
226 |
free(disklist); |
227 |
return NULL; |
228 |
} |
229 |
|
230 |
for (i = 0; i < disk_cnt; ++i) { |
225 |
disk2 = strsep(&disk1, " "); |
231 |
disk2 = strsep(&disk1, " "); |
226 |
if (disk2 == NULL) |
232 |
if (disk2 == NULL) |
227 |
break; |
233 |
break; |
228 |
disks[disk_cnt] = strdup(disk2); |
234 |
disks[i] = strdup(disk2); |
229 |
if (disks[disk_cnt] == NULL) { |
235 |
if (disks[i] == NULL) { |
230 |
for (disk_cnt--; disk_cnt >= 0; disk_cnt--) |
236 |
for (i--; i >= 0; i--) |
231 |
free(disks[disk_cnt]); |
237 |
free(disks[i]); |
232 |
free(disklist); |
238 |
free(disklist); |
233 |
free(disks); |
239 |
free(disks); |
234 |
return (NULL); |
240 |
return (NULL); |