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.37 by ats, Sun Oct 19 21:22:09 2003 UTC vs.
Revision 1.39 by tdb, Mon Nov 10 21:07:04 2003 UTC

# Line 39 | Line 39
39   #include <sys/vfs.h>
40   #include <mntent.h>
41   #include "tools.h"
42 + #ifdef CYGWIN
43 + #define VALID_FS_TYPES {"user"}
44 + #else
45   #define VALID_FS_TYPES {"adfs", "affs", "befs", "bfs", "efs", "ext2", \
46                          "ext3", "vxfs", "hfs", "hfsplus", "hpfs", "jffs", \
47                          "jffs2", "minix", "msdos", "ntfs", "qnx4", "ramfs", \
48                          "rootfs", "reiserfs", "sysv", "v7", "udf", "ufs", \
49                          "umsdos", "vfat", "xfs", "jfs"}
50   #endif
51 + #endif
52  
53   #ifdef ALLBSD
54   #include <sys/param.h>
# Line 266 | Line 270 | disk_stat_t *get_disk_stats(int *entries){
270  
271          *entries=num_disks;    
272  
273 <        /* If this fails, there is very little i can do about it, so i'll ignore it :) */
274 < #if defined(LINUX) || defined(SOLARIS)
273 >        /* If this fails, there is very little i can do about it, so
274 >           I'll ignore it :) */
275 > #if defined(LINUX)
276 >        endmntent(f);
277 > #endif
278 > #if defined(SOLARIS)
279          fclose(f);
280   #endif
281  
# Line 322 | Line 330 | typedef struct {
330   diskio_stat_t *get_diskio_stats(int *entries){
331  
332          static int sizeof_diskio_stats=0;
333 + #ifndef LINUX
334          diskio_stat_t *diskio_stats_ptr;
335 + #endif
336  
337   #ifdef SOLARIS
338          kstat_ctl_t *kc;
# Line 333 | Line 343 | diskio_stat_t *get_diskio_stats(int *entries){
343          FILE *f;
344          char *line_ptr;
345          int major, minor;
336        char dev_letter;
346          int has_pp_stats = 1;
347          static partition *parts = NULL;
348          static int alloc_parts = 0;
349          int i, n;
350          time_t now;
351 +        const char *format;
352   #endif
353   #ifdef FREEBSD
354          static struct statinfo stats;
# Line 511 | Line 521 | diskio_stat_t *get_diskio_stats(int *entries){
521          n = 0;
522  
523          /* Read /proc/partitions to find what devices exist. Recent 2.4 kernels
524 <           have statistics in here too, so we can use those directly. */
524 >           have statistics in here too, so we can use those directly.
525 >           2.6 kernels have /proc/diskstats instead with almost (but not quite)
526 >           the same format. */
527  
528 <        f = fopen("/proc/partitions", "r");
528 >        f = fopen("/proc/diskstats", "r");
529 >        format = " %d %d %19s %*d %*d %lld %*d %*d %*d %lld";
530 >        if (f == NULL) {
531 >                f = fopen("/proc/partitions", "r");
532 >                format = " %d %d %*d %19s %*d %*d %lld %*d %*d %*d %lld";
533 >        }
534          if (f == NULL) goto out;
535          now = time(NULL);
536  
# Line 522 | Line 539 | diskio_stat_t *get_diskio_stats(int *entries){
539                  char *s;
540                  long long rsect, wsect;
541  
542 <                int nr = sscanf(line_ptr,
526 <                        " %d %d %*d %19s %*d %*d %lld %*d %*d %*d %lld",
542 >                int nr = sscanf(line_ptr, format,
543                          &major, &minor, name, &rsect, &wsect);
544                  if (nr < 3) continue;
529                if (nr < 5) {
530                        has_pp_stats = 0;
531                        rsect = 0;
532                        wsect = 0;
533                }
545  
546                  /* Skip device names ending in numbers, since they're
547                     partitions. */
# Line 538 | Line 549 | diskio_stat_t *get_diskio_stats(int *entries){
549                  while (*s != '\0') s++;
550                  --s;
551                  if (*s >= '0' && *s <= '9') continue;
552 +
553 +                if (nr < 5) {
554 +                        has_pp_stats = 0;
555 +                        rsect = 0;
556 +                        wsect = 0;
557 +                }
558  
559                  diskio_stats = diskio_stat_malloc(n + 1, &sizeof_diskio_stats,
560                          diskio_stats);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines