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

Comparing projects/libstatgrab/src/libstatgrab/swap_stats.c (file contents):
Revision 1.14 by ats, Sat Feb 14 00:04:12 2004 UTC vs.
Revision 1.15 by tdb, Sat Feb 14 19:03:35 2004 UTC

# Line 37 | Line 37
37   #include <string.h>
38   #endif
39   #ifdef FREEBSD
40 + #ifdef FREEBSD5
41 + #include <sys/param.h>
42 + #include <sys/sysctl.h>
43 + #include <sys/user.h>
44 + #else
45   #include <unistd.h>
46   #include <sys/types.h>
47   #include <kvm.h>
48   #endif
49 + #endif
50   #if defined(NETBSD) || defined(OPENBSD)
51   #include <sys/param.h>
52   #include <sys/time.h>
# Line 61 | Line 67 | swap_stat_t *get_swap_stats(){
67          unsigned long long value;
68   #endif
69   #ifdef FREEBSD
64        struct kvm_swap swapinfo;
70          int pagesize;
71 + #ifdef FREEBSD5
72 +        struct xswdev xsw;
73 +        int mib[16], n;
74 +        size_t mibsize, size;
75 + #else
76 +        struct kvm_swap swapinfo;
77          kvm_t *kvmd;
78   #endif
79 + #endif
80   #if defined(NETBSD) || defined(OPENBSD)
81          struct uvmexp *uvm;
82   #endif
# Line 102 | Line 114 | swap_stat_t *get_swap_stats(){
114          swap_stat.used = swap_stat.total - swap_stat.free;
115   #endif
116   #ifdef FREEBSD
117 +        pagesize=getpagesize();
118 +
119 + #ifdef FREEBSD5
120 +        swap_stat.total = 0;
121 +        swap_stat.used = 0;
122 +
123 +        mibsize = sizeof mib / sizeof mib[0];
124 +        if (sysctlnametomib("vm.swap_info", mib, &mibsize) < 0) {
125 +                return NULL;
126 +        }
127 +        for (n = 0; ; ++n) {
128 +                mib[mibsize] = n;
129 +                size = sizeof xsw;
130 +                if (sysctl(mib, mibsize + 1, &xsw, &size, NULL, NULL) < 0) {
131 +                        break;
132 +                }
133 +                if (xsw.xsw_version != XSWDEV_VERSION) {
134 +                        return NULL;
135 +                }
136 +                swap_stat.total += (long long) xsw.xsw_nblks;
137 +                swap_stat.used += (long long) xsw.xsw_used;
138 +        }
139 +        if (errno != ENOENT) {
140 +                return NULL;
141 +        }
142 + #else
143          if((kvmd = get_kvm()) == NULL){
144                  return NULL;
145          }
146          if ((kvm_getswapinfo(kvmd, &swapinfo, 1,0)) == -1){
147                  return NULL;
148          }
111        pagesize=getpagesize();
149  
150 <        swap_stat.total= (long long)swapinfo.ksw_total * (long long)pagesize;
151 <        swap_stat.used = (long long)swapinfo.ksw_used * (long long)pagesize;
152 <        swap_stat.free = swap_stat.total-swap_stat.used;
150 >        swap_stat.total = (long long)swapinfo.ksw_total;
151 >        swap_stat.used = (long long)swapinfo.ksw_used;
152 > #endif
153 >        swap_stat.total *= pagesize;
154 >        swap_stat.used *= pagesize;
155 >        swap_stat.free = swap_stat.total - swap_stat.used;
156   #endif
157   #if defined(NETBSD) || defined(OPENBSD)
158          if ((uvm = get_uvmexp()) == NULL) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines