--- projects/libstatgrab/src/libstatgrab/disk_stats.c 2003/02/20 13:19:52 1.3 +++ projects/libstatgrab/src/libstatgrab/disk_stats.c 2003/02/23 19:24:07 1.4 @@ -25,12 +25,14 @@ #include "statgrab.h" #include #include +#include "ukcprog.h" #include #ifdef SOLARIS #include #include #include +#include #define VALID_FS_TYPES {"ufs", "tmpfs"} @@ -60,7 +62,6 @@ void init_disk_stat(int start, int end, disk_stat_t *d disk_stats++; } - } disk_stat_t *get_disk_stats(int *entries){ @@ -155,8 +156,90 @@ disk_stat_t *get_disk_stats(int *entries){ } +void diskio_stat_init(int start, int end, diskio_stat_t *diskio_stats){ + + for(diskio_stats+=start; startdisk_name=NULL; + + diskio_stats++; + } +} + +diskio_stat_t *diskio_stat_malloc(int needed_entries, int *cur_entries, diskio_stat_t *diskio_stats){ + + if(diskio_stats==NULL){ + + if((diskio_stats=malloc(needed_entries * sizeof(diskio_stat_t)))==NULL){ + return NULL; + } + diskio_stat_init(0, needed_entries, diskio_stats); + *cur_entries=needed_entries; + + return diskio_stats; + } + + + if(*cur_entrieskc_chain; ksp; ksp = ksp->ks_next) { + fflush(stdout); + if (!strcmp(ksp->ks_class, "disk")) { + fflush(stdout); + + if(ksp->ks_type != KSTAT_TYPE_IO) continue; + /* We dont want metadevices appearins as disks */ + if(strcmp(ksp->ks_module, "md")==0) continue; + if((kstat_read(kc, ksp, &kios))==-1){ + fflush(stdout); + } + + if((diskio_stats=diskio_stat_malloc(disks+1, &sizeof_diskio_stats, diskio_stats))==NULL){ + kstat_close(kc); + return NULL; + } + diskio_stats_ptr=diskio_stats+disks; + + diskio_stats_ptr->read_bytes=kios.nread; + + diskio_stats_ptr->write_bytes=kios.nwritten; + + if(diskio_stats_ptr->disk_name!=NULL) free(diskio_stats_ptr->disk_name); + + diskio_stats_ptr->disk_name=strdup(ksp->ks_name); + disks++; + fflush(stdout); + } + } + + kstat_close(kc); + + *entries=disks; + + return diskio_stats; }