--- projects/cms/source/ihost/libstatgrab/disk_stat.c 2002/05/13 11:37:41 1.3 +++ projects/cms/source/ihost/libstatgrab/disk_stat.c 2002/05/13 12:47:15 1.4 @@ -1,6 +1,6 @@ #include #include -#include +#include "ukcprog.h" #include #ifdef SOLARIS @@ -36,6 +36,7 @@ char *get_disk_stats(){ system_disks_t *sd=NULL; system_disks_t *sd_ptr=sd; int counter=0; + char *xml_disk_stats; #ifdef SOLARIS struct mnttab mp; struct statvfs df; @@ -62,10 +63,22 @@ char *get_disk_stats(){ continue; } if((((strcmp(mp.mnt_fstype,"ufs"))==0) || (strcmp(mp.mnt_fstype,"tmpfs")) ==0)){ - sd_ptr=malloc(sizeof(system_disks_t)); - sd_ptr->disk=malloc(sizeof(disk_stat_t)); - sd_ptr->disk->device_name=strdup(mp.mnt_special); - sd_ptr->disk->mnt_point=strdup(mp.mnt_mountp); + if((sd_ptr=malloc(sizeof(system_disks_t))) == NULL){ + errf("malloc failed (%m)"); + return NULL; + } + if((sd_ptr->disk=malloc(sizeof(disk_stat_t))) == NULL){ + errf("malloc failed (%m)"); + return NULL; + } + if((sd_ptr->disk->device_name=strdup(mp.mnt_special)) == NULL) { + errf("strdup failed (%m)"); + return NULL; + } + if((sd_ptr->disk->mnt_point=strdup(mp.mnt_mountp)) == NULL){ + errf("strdup failed (%m)"); + return NULL; + } sd_ptr->disk->size=((df.f_frsize/1024) * df.f_blocks); sd_ptr->disk->used=(((df.f_frsize/1024) * df.f_blocks) -((df.f_frsize/1024) * df.f_bfree)); sd_ptr->disk->avail=(df.f_frsize/1024) * df.f_bavail; @@ -91,10 +104,22 @@ char *get_disk_stats(){ } if((((strcmp(mp->mnt_type, MNTTYPE_NFS))==0) || (strcmp(mp->mnt_type,MNTTYPE_IGNORE)) ==0)) continue; - sd_ptr=malloc(sizeof(system_disks_t)); - sd_ptr->disk=malloc(sizeof(disk_stat_t)); - sd_ptr->disk->device_name=strdup(mp->mnt_fsname); - sd_ptr->disk->mnt_point=strdup(mp->mnt_dir); + if((sd_ptr=malloc(sizeof(system_disks_t))) == NULL){ + errf("malloc failed (%m)"); + return NULL; + } + if((sd_ptr->disk=malloc(sizeof(disk_stat_t))) == NULL){ + errf("malloc failed (%m)"); + return NULL; + } + if((sd_ptr->disk->device_name=strdup(mp->mnt_fsname)) == NULL){ + errf("strdup failed (%m)"); + return NULL; + } + if((sd_ptr->disk->mnt_point=strdup(mp->mnt_dir)) == NULL){ + errf("strdup failed (%m)"); + return NULL; + } sd_ptr->disk->size=((df.f_bsize/1024) * df.f_blocks); sd_ptr->disk->used=((df.f_bsize/1024) * df.f_blocks) -((df.f_bsize/1024) * df.f_bfree); sd_ptr->disk->avail=((df.f_bsize/1024) * df.f_bavail); @@ -111,11 +136,23 @@ char *get_disk_stats(){ return NULL; } - for(;counterdisk=malloc(sizeof(disk_stat_t)); - sd_ptr->disk->device_name=strdup(mp->f_mntfromname); - sd_ptr->disk->mnt_point=strdup(mp->f_mntonname); + for(counter=0;counterdisk=malloc(sizeof(disk_stat_t))) == NULL){ + errf("malloc failed (%m)"); + return NULL; + } + if((sd_ptr->disk->device_name=strdup(mp->f_mntfromname))==NULL){ + errf("strdup failed (%m)"); + return NULL; + } + if((sd_ptr->disk->mnt_point=strdup(mp->f_mntonname))==NULL){ + errf("strdup failed (%m)"); + return NULL; + } sd_ptr->disk->size=((mp->f_bsize/1024) * mp->f_blocks); sd_ptr->disk->used=((mp->f_bsize/1024) * mp->f_blocks) -((mp->f_bsize/1024) * mp->f_bfree); sd_ptr->disk->avail=((mp->f_bsize/1024) * mp->f_bavail); @@ -129,24 +166,19 @@ char *get_disk_stats(){ sd_ptr=sd; + xml_disk_stats=strdup(""); + while(sd_ptr!=NULL){ - printf("%s\n", sd_ptr->disk->device_name); - printf("%s\n", sd_ptr->disk->mnt_point); - printf("%ld\n", sd_ptr->disk->size); - printf("%ld\n", sd_ptr->disk->used); - printf("%ld\n", sd_ptr->disk->avail); - + if((xml_disk_stats=strf("%s", xml_disk_stats, counter, sd_ptr->disk->device_name, sd_ptr->disk->mnt_point, sd_ptr->disk->size, sd_ptr->disk->used, sd_ptr->disk->avail, sd_ptr->disk->t_inodes, sd_ptr->disk->f_inodes, counter)) == NULL){ + errf("strf failed (%m)"); + return NULL; + } sd_ptr=sd_ptr->next_disk; counter++; } - return "jibble"; + xml_disk_stats=strf("%s",xml_disk_stats); + + return xml_disk_stats; } -int main(){ - printf("%s",get_disk_stats()); - exit(0); -} - - -