362 |
|
struct disk_sysctl *stats; |
363 |
|
#endif |
364 |
|
#ifdef OPENBSD |
365 |
+ |
int diskcount; |
366 |
+ |
char *disknames, *name, *bufpp; |
367 |
+ |
char **dk_name; |
368 |
|
struct diskstats *stats; |
369 |
|
#endif |
370 |
|
#ifdef NETBSD |
381 |
|
|
382 |
|
num_diskio=0; |
383 |
|
|
384 |
+ |
#ifdef OPENBSD |
385 |
+ |
mib[0] = CTL_HW; |
386 |
+ |
mib[1] = HW_DISKCOUNT; |
387 |
+ |
|
388 |
+ |
size = sizeof(diskcount); |
389 |
+ |
if (sysctl(mib, MIBSIZE, &diskcount, &size, NULL, 0) < 0) { |
390 |
+ |
return NULL; |
391 |
+ |
} |
392 |
+ |
|
393 |
+ |
mib[0] = CTL_HW; |
394 |
+ |
mib[1] = HW_DISKNAMES; |
395 |
+ |
|
396 |
+ |
if (sysctl(mib, MIBSIZE, NULL, &size, NULL, 0) < 0) { |
397 |
+ |
return NULL; |
398 |
+ |
} |
399 |
+ |
|
400 |
+ |
disknames = malloc(size); |
401 |
+ |
if (disknames == NULL) { |
402 |
+ |
return NULL; |
403 |
+ |
} |
404 |
+ |
|
405 |
+ |
if (sysctl(mib, MIBSIZE, disknames, &size, NULL, 0) < 0) { |
406 |
+ |
return NULL; |
407 |
+ |
} |
408 |
+ |
|
409 |
+ |
dk_name = calloc(diskcount, sizeof(char *)); |
410 |
+ |
bufpp = disknames; |
411 |
+ |
for (i = 0; i < diskcount && (name = strsep(&bufpp, ",")) != NULL; i++) { |
412 |
+ |
dk_name[i] = name; |
413 |
+ |
} |
414 |
+ |
#endif |
415 |
+ |
|
416 |
|
#if defined(NETBSD) || defined(OPENBSD) |
417 |
|
mib[0] = CTL_HW; |
418 |
|
mib[1] = HW_DISKSTATS; |
475 |
|
#ifdef NETBSD |
476 |
|
diskio_stats_ptr->disk_name = strdup(stats[i].dk_name); |
477 |
|
#else |
478 |
< |
asprintf((&diskio_stats_ptr->disk_name), "%s%d", "disk", i); |
478 |
> |
diskio_stats_ptr->disk_name = strdup(dk_name[i]); |
479 |
|
#endif |
480 |
|
diskio_stats_ptr->systime = time(NULL); |
481 |
|
|
483 |
|
} |
484 |
|
|
485 |
|
free(stats); |
486 |
+ |
#ifdef OPENBSD |
487 |
+ |
free(dk_name); |
488 |
+ |
free(disknames); |
489 |
+ |
#endif |
490 |
|
#endif |
491 |
|
|
492 |
|
#ifdef FREEBSD |