--- projects/libstatgrab/src/libstatgrab/disk_stats.c 2004/02/12 23:04:52 1.51 +++ projects/libstatgrab/src/libstatgrab/disk_stats.c 2004/02/13 16:46:21 1.52 @@ -18,7 +18,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA * 02111-1307 USA * - * $Id: disk_stats.c,v 1.51 2004/02/12 23:04:52 tdb Exp $ + * $Id: disk_stats.c,v 1.52 2004/02/13 16:46:21 tdb Exp $ */ #ifdef HAVE_CONFIG_H @@ -362,6 +362,9 @@ diskio_stat_t *get_diskio_stats(int *entries){ struct disk_sysctl *stats; #endif #ifdef OPENBSD + int diskcount; + char *disknames, *name, *bufpp; + char **dk_name; struct diskstats *stats; #endif #ifdef NETBSD @@ -378,6 +381,38 @@ diskio_stat_t *get_diskio_stats(int *entries){ num_diskio=0; +#ifdef OPENBSD + mib[0] = CTL_HW; + mib[1] = HW_DISKCOUNT; + + size = sizeof(diskcount); + if (sysctl(mib, MIBSIZE, &diskcount, &size, NULL, 0) < 0) { + return NULL; + } + + mib[0] = CTL_HW; + mib[1] = HW_DISKNAMES; + + if (sysctl(mib, MIBSIZE, NULL, &size, NULL, 0) < 0) { + return NULL; + } + + disknames = malloc(size); + if (disknames == NULL) { + return NULL; + } + + if (sysctl(mib, MIBSIZE, disknames, &size, NULL, 0) < 0) { + return NULL; + } + + dk_name = calloc(diskcount, sizeof(char *)); + bufpp = disknames; + for (i = 0; i < diskcount && (name = strsep(&bufpp, ",")) != NULL; i++) { + dk_name[i] = name; + } +#endif + #if defined(NETBSD) || defined(OPENBSD) mib[0] = CTL_HW; mib[1] = HW_DISKSTATS; @@ -440,7 +475,7 @@ diskio_stat_t *get_diskio_stats(int *entries){ #ifdef NETBSD diskio_stats_ptr->disk_name = strdup(stats[i].dk_name); #else - asprintf((&diskio_stats_ptr->disk_name), "%s%d", "disk", i); + diskio_stats_ptr->disk_name = strdup(dk_name[i]); #endif diskio_stats_ptr->systime = time(NULL); @@ -448,6 +483,10 @@ diskio_stat_t *get_diskio_stats(int *entries){ } free(stats); +#ifdef OPENBSD + free(dk_name); + free(disknames); +#endif #endif #ifdef FREEBSD