--- projects/cms/source/ihost/libstatgrab/disk_stat.c 2002/05/13 12:47:15 1.4 +++ projects/cms/source/ihost/libstatgrab/disk_stat.c 2002/05/16 17:02:43 1.6 @@ -37,6 +37,7 @@ char *get_disk_stats(){ system_disks_t *sd_ptr=sd; int counter=0; char *xml_disk_stats; + char *xml_disk_stats_ptr; #ifdef SOLARIS struct mnttab mp; struct statvfs df; @@ -90,6 +91,11 @@ char *get_disk_stats(){ } + if((fclose(f))!=0){ + errf("Failed to close mnttab"); + return NULL; + } + #endif #ifdef linux if ((f=fopen("/etc/mtab", "r" ))==NULL){ @@ -169,15 +175,29 @@ char *get_disk_stats(){ xml_disk_stats=strdup(""); while(sd_ptr!=NULL){ + xml_disk_stats_ptr=xml_disk_stats; 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; } + free(xml_disk_stats_ptr); sd_ptr=sd_ptr->next_disk; counter++; } - + xml_disk_stats_ptr=xml_disk_stats; xml_disk_stats=strf("%s",xml_disk_stats); + free(xml_disk_stats_ptr); + + /* Cleaning up */ + sd_ptr=sd; + while(sd_ptr!=NULL){ + sd=sd_ptr->next_disk; + free(sd_ptr->disk->device_name); + free(sd_ptr->disk->mnt_point); + free(sd_ptr->disk); + free(sd_ptr); + sd_ptr=sd; + } return xml_disk_stats; }