ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/libstatgrab/src/libstatgrab/disk_stats.c
(Generate patch)

Comparing projects/libstatgrab/src/libstatgrab/disk_stats.c (file contents):
Revision 1.10 by pajs, Tue Mar 4 18:06:16 2003 UTC vs.
Revision 1.15 by pajs, Mon Mar 31 11:30:54 2003 UTC

# Line 81 | Line 81 | disk_stat_t *get_disk_stats(int *entries){
81          disk_stat_t *disk_ptr;
82  
83   #ifdef SOLARIS
84 <        struct mnttab *mp;
84 >        struct mnttab mp;
85          struct statvfs fs;
86   #endif
87   #ifdef LINUX
# Line 260 | Line 260 | diskio_stat_t *get_diskio_stats(int *entries){
260          int major, minor;
261          char dev_letter;
262   #endif
263
263          num_diskio=0;
264  
265   #ifdef SOLARIS
# Line 290 | Line 289 | diskio_stat_t *get_diskio_stats(int *entries){
289                          if(diskio_stats_ptr->disk_name!=NULL) free(diskio_stats_ptr->disk_name);
290  
291                          diskio_stats_ptr->disk_name=strdup(ksp->ks_name);
292 +                        diskio_stats_ptr->systime=time(NULL);
293                          num_diskio++;
294                  }
295          }
# Line 300 | Line 300 | diskio_stat_t *get_diskio_stats(int *entries){
300   #ifdef LINUX
301          f=fopen("/proc/stat", "r");
302          if(f==NULL){
303 +                *entries=0;
304 +                fclose(f);
305                  return NULL;
306          }
307          if((line_ptr=f_read_line(f, "disk_io:"))==NULL){
308 +                *entries=0;
309 +                fclose(f);
310                  return NULL;
311          }
312          while((line_ptr=strchr(line_ptr, ' '))!=NULL){
313 +                line_ptr++;
314 +                if(*line_ptr=='\0'){
315 +                        break;
316 +                }
317                  if((diskio_stats=diskio_stat_malloc(num_diskio+1, &sizeof_diskio_stats, diskio_stats))==NULL){
318                          fclose(f);
319 +                        *entries=0;
320                          return NULL;
321                  }
322                  diskio_stats_ptr=diskio_stats+num_diskio;
323  
324  
325 <                sscanf(line_ptr, "(%d,%d):(%*d, %lld, %*d, %lld, %*d)", \
325 >                if((sscanf(line_ptr, "(%d,%d):(%*d, %*d, %lld, %*d, %lld)", \
326                          &major, \
327                          &minor, \
328                          &diskio_stats_ptr->read_bytes, \
329 <                        &diskio_stats_ptr->write_bytes);
329 >                        &diskio_stats_ptr->write_bytes))!=4) {
330 >                                continue;
331 >                }
332  
333 +                /* We read the number of blocks. Blocks are stored in 512 bytes */
334 +                diskio_stats_ptr->read_bytes=diskio_stats_ptr->read_bytes*512;
335 +                diskio_stats_ptr->write_bytes=diskio_stats_ptr->write_bytes*512;
336 +
337                  if(diskio_stats_ptr->disk_name!=NULL) free(diskio_stats_ptr->disk_name);
338  
339                  switch(major){
340 +                        case 2:
341 +                                if(minor==0){
342 +                                        diskio_stats_ptr->disk_name=strdup("fd0");
343 +                                }
344 +                                break;
345 +
346                          case 3:
347                                  if(minor==0){
348                                          diskio_stats_ptr->disk_name=strdup("hda");
# Line 336 | Line 357 | diskio_stat_t *get_diskio_stats(int *entries){
357                                  }else{
358                                          diskio_stats_ptr->disk_name=strdup("hdd");
359                                  }
360 +                                break;
361                          case 8:
362                                  dev_letter='a'+(minor/16);
363                                  diskio_stats_ptr->disk_name=malloc(4);
364                                  snprintf(diskio_stats_ptr->disk_name, 4, "sd%c", dev_letter);
365 +                                break;
366                          default:
367                                  /* I have no idea what it is then :) */
368                                  diskio_stats_ptr->disk_name=malloc(16);
369                                  snprintf(diskio_stats_ptr->disk_name, 16, "%d %d", major, minor);
370 +                                break;
371                  }
372  
373 +                diskio_stats_ptr->systime=time(NULL);
374                  num_diskio++;
375          }
376 +        fclose(f);
377  
378   #endif
379          *entries=num_diskio;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines