diff options
Diffstat (limited to 'sysutils/wmmon/files/patch-ad')
-rw-r--r-- | sysutils/wmmon/files/patch-ad | 881 |
1 files changed, 0 insertions, 881 deletions
diff --git a/sysutils/wmmon/files/patch-ad b/sysutils/wmmon/files/patch-ad deleted file mode 100644 index 4929f232e2d7..000000000000 --- a/sysutils/wmmon/files/patch-ad +++ /dev/null @@ -1,881 +0,0 @@ -*** wmmon.c.orig Tue May 19 16:13:16 1998 ---- wmmon.c Fri Dec 31 12:05:34 1999 -*************** -*** 28,33 **** ---- 28,44 ---- - Changes: - ---- - -+ 12/01/1999 (Stephen Kiernan, sk-ports@vegamuse.org) -+ * Change to revert to real userid and groupid -+ after kvm_openfiles is accomplished. -+ (Patch from Steve Reid, sreid@sea-to-sky.net) -+ 05/24/1999 (Stephen Kiernan, sk-ports@vegamuse.org) -+ * Ported to FreeBSD 4.0 -+ 12/11/1998 (Stephen Kiernan, sk-ports@vegamuse.org) -+ * Ported to FreeBSD 2.2, 3.0 -+ * Based on code from the FreeBSD 2.2 version of top -+ by Christos Zoulas, Steven Wallace, and -+ Wolfram Schneider - 18/05/1998 (Antoine Nulle, warp@xs4all.nl) - * MEM/SWAP/UPTIME only updated when visible - * Using global file descriptors to reduce file -*************** -*** 72,81 **** ---- 83,109 ---- - #include <fcntl.h> - #include <unistd.h> - -+ #include <errno.h> -+ - #include <sys/wait.h> - #include <sys/param.h> - #include <sys/types.h> - -+ #include <kvm.h> -+ #include <limits.h> -+ #include <osreldate.h> -+ #include <sys/conf.h> -+ #include <sys/dkstat.h> -+ #if __FreeBSD_version >= 300000 -+ #include <devstat.h> -+ #endif -+ #include <sys/sysctl.h> -+ #include <sys/time.h> -+ #if __FreeBSD_version < 400005 -+ #include <sys/rlist.h> -+ #endif -+ #include <sys/vmmeter.h> -+ - #include <X11/Xlib.h> - #include <X11/xpm.h> - #include <X11/extensions/shape.h> -*************** -*** 106,117 **** ---- 134,193 ---- - FILE *fp_stat; - FILE *fp_loadavg; - -+ kvm_t *kvmd = NULL; -+ struct nlist nl[] = { -+ #define N_CNT 0 -+ { "_cnt" }, -+ #define N_BUFSPACE 1 -+ { "_bufspace" }, -+ #define N_CP_TIME 2 -+ { "_cp_time" }, -+ #define N_AVERUN 3 -+ { "_averunnable" }, -+ #if __FreeBSD_version >= 300000 -+ #define N_TK_NIN 4 -+ { "_tk_nin" }, -+ #define N_TK_NOUT 5 -+ { "_tk_nout" }, -+ #else -+ #define N_DK_NDRIVE 4 -+ { "_dk_ndrive" }, -+ #define N_DK_WDS 5 -+ { "_dk_wds" }, -+ #endif -+ #if __FreeBSD_version < 400000 -+ #define VM_SWAPLIST 6 -+ { "_swaplist" }, -+ #define VM_SWDEVT 7 -+ { "_swdevt" }, -+ #define VM_NSWAP 8 -+ { "_nswap" }, -+ #define VM_NSWDEV 9 -+ { "_nswdev" }, -+ #define VM_DMMAX 10 -+ { "_dmmax" }, -+ #endif -+ { "" } -+ }; -+ int psize; -+ int pshift; -+ long *cur_dk_wds; -+ long *last_dk_wds; -+ int ndrives; -+ char errbuf[_POSIX2_LINE_MAX]; -+ static int swappgsin = -1; -+ static int swappgsout = -1; -+ - /* functions */ - void usage(void); - void printversion(void); - void DrawStats(int *, int, int, int, int); - void DrawStats_io(int *, int, int, int, int); - -+ #if defined(__FreeBSD__) || defined(__NetBSD__) -+ int swapmode( long *retavail, long *retfree); -+ #endif /* __FreeBSD__ || __NetBSD__ */ -+ - void wmmon_routine(int, char **); - - void main(int argc, char *argv[]) { -*************** -*** 154,159 **** ---- 230,241 ---- - } - } - -+ if( checkversion() < 0 ) -+ { -+ fprintf( stderr, devstat_errbuf ); -+ exit(1); -+ } -+ - wmmon_routine(argc, argv); - } - -*************** -*** 213,238 **** - long istat; - long idle; - -! FILE *fp; -! char temp[128]; - char *p; - -! int xpm_X = 0, xpm_Y = 0; - - long online_time = 0; - long ref_time = 0; - long cnt_time; - -! -! fp = fopen("/proc/uptime", "r"); -! fp_meminfo = fopen("/proc/meminfo", "r"); -! fp_loadavg = fopen("/proc/loadavg", "r"); -! fp_stat = fopen("/proc/stat", "r"); -! -! if (fp) { -! fscanf(fp, "%ld", &online_time); - ref_time = time(0); -! fclose(fp); - } - - for (i=0; i<MAX_STAT_DEVICES; i++) { ---- 295,363 ---- - long istat; - long idle; - -! int mib[2]; -! size_t size; -! struct timeval boottime; - char *p; - -! int xpm_X = 0, xpm_Y = 0; - - long online_time = 0; - long ref_time = 0; - long cnt_time; - -! mib[0] = CTL_KERN; -! mib[1] = KERN_BOOTTIME; -! size = sizeof(boottime); -! if ((sysctl(mib, 2, &boottime, &size, NULL, 0)!=-1) && -! (boottime.tv_sec != 0)) { - ref_time = time(0); -! online_time = ref_time - boottime.tv_sec + 30; -! } -! -! psize = getpagesize(); -! for (pshift = 0, psize = getpagesize(); psize>1; pshift++, psize>>=1) -! continue; -! pshift -= 10; -! psize = getpagesize(); -! -! if (kvmd==NULL) kvmd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf); -! if (kvmd==NULL) { fprintf(stderr, "kvm_openfiles: %s\n", errbuf); exit(errno); } -! -! /* We're sgid kmem. Give up privs. */ -! if (setgid(getgid()) != 0) { perror("setgid"); exit(errno); } -! -! /* If we're suid, give that up too. */ -! if (setuid(getuid()) != 0) { perror("seguid"); exit(errno); } -! -! if (kvmd) { -! if (kvm_nlist(kvmd, nl) >= 0) { -! struct nlist *nlp; -! -! for( nlp = nl; *nlp->n_name != '\0'; nlp++ ) { -! if( nlp->n_type == 0 ) -! fprintf (stderr, "kvm_nlist: Symbol '%s' not found\n", nlp->n_name); -! } -! -! #if __FreeBSD_version >= 300000 -! ndrives = getnumdevs(); -! #else -! if (nl[0].n_type != 0) { -! (void) kvm_read(kvmd, nl[N_DK_NDRIVE].n_value, (char *)&ndrives, sizeof(ndrives)); -! if (ndrives > 0) { -! cur_dk_wds = calloc(ndrives, sizeof(long)); -! last_dk_wds = calloc(ndrives, sizeof(long)); -! bzero(last_dk_wds, sizeof(long) * ndrives); -! } -! #endif -! fprintf (stderr, "Monitoring %d devices for activity.\n", ndrives); -! #if __FreeBSD_version < 300000 -! } -! #endif -! } -! else { -! fprintf( stderr, "kvm_nlist: %s\n", kvm_geterr(kvmd) ); -! } - } - - for (i=0; i<MAX_STAT_DEVICES; i++) { -*************** -*** 246,261 **** - if (RIGHT_ACTION) right_action = strdup(RIGHT_ACTION); - if (MIDDLE_ACTION) middle_action = strdup(MIDDLE_ACTION); - -! strcpy(temp, "/etc/wmmonrc"); -! parse_rcfile(temp, wmmon_keys); - -! p = getenv("HOME"); -! strcpy(temp, p); -! strcat(temp, "/.wmmonrc"); -! parse_rcfile(temp, wmmon_keys); - -! strcpy(temp, "/etc/wmmonrc.fixed"); -! parse_rcfile(temp, wmmon_keys); - - stat_online = checksysdevs(); - ---- 371,390 ---- - if (RIGHT_ACTION) right_action = strdup(RIGHT_ACTION); - if (MIDDLE_ACTION) middle_action = strdup(MIDDLE_ACTION); - -! parse_rcfile("/etc/wmmonrc", wmmon_keys); - -! if ((p = getenv("HOME")) != NULL) { -! #define RCFILE "/.wmmonrc" -! int tmpsize = strlen(p) + sizeof(RCFILE) + 1; -! char *tmp = malloc(tmpsize); -! if (tmp != NULL) { -! snprintf(tmp, tmpsize, "%s" RCFILE, p); -! parse_rcfile(tmp, wmmon_keys); -! free(tmp); -! } -! } - -! parse_rcfile("/etc/wmmonrc.fixed", wmmon_keys); - - stat_online = checksysdevs(); - -*************** -*** 484,489 **** ---- 613,623 ---- - st->rt_idle = idle - st->idlelast; - st->idlelast = idle; - -+ /* There's a problem here with values crossing -+ the max long size barrier becoming negative -- -+ things restabilize after some time, but a -+ better solution needs to be designed -+ */ - st->rt_stat = istat - st->statlast; - st->statlast = istat; - -*************** -*** 499,543 **** - - void update_stat_mem(stat_dev *st, stat_dev *st2) { - -! char temp[128]; -! unsigned long free, shared, buffers, cached; - -! freopen("/proc/meminfo", "r", fp_meminfo); -! while (fgets(temp, 128, fp_meminfo)) { -! if (strstr(temp, "Mem:")) { -! sscanf(temp, "Mem: %ld %ld %ld %ld %ld %ld", -! &st->rt_idle, &st->rt_stat, -! &free, &shared, &buffers, &cached); -! st->rt_idle >>= 10; -! st->rt_stat -= buffers+cached; -! st->rt_stat >>= 10; -! // break; -! } -! if (strstr(temp, "Swap:")) { -! sscanf(temp, "Swap: %ld %ld", &st2->rt_idle, &st2->rt_stat); -! st2->rt_idle >>= 10; -! st2->rt_stat >>= 10; -! break; - } - } - } - - void update_stat_swp(stat_dev *st) { - -! char temp[128]; - -! fseek(fp_meminfo, 0, SEEK_SET); -! while (fgets(temp, 128, fp_meminfo)) { -! if (strstr(temp, "Swap:")) { -! sscanf(temp, "Swap: %ld %ld", &st->rt_idle, &st->rt_stat); -! st->rt_idle >>= 10; -! st->rt_stat >>= 10; -! break; - } - } - - } - - /*******************************************************************************\ - |* get_statistics *| - \*******************************************************************************/ ---- 633,887 ---- - - void update_stat_mem(stat_dev *st, stat_dev *st2) { - -! unsigned long buffers; - -! if (kvmd==NULL) kvmd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf); -! if (kvmd==NULL) { fprintf(stderr, "kvm_openfiles: %s\n", errbuf); exit(errno); } -! if (kvmd) { -! if (kvm_nlist(kvmd, nl) >= 0) { -! if (nl[0].n_type != 0) { -! static int first_time_done = 0; -! int dpagein, dpageout; -! struct vmmeter sum; -! -! if ((kvm_read(kvmd, nl[N_CNT].n_value, (char *)&sum, sizeof(sum))==sizeof(sum)) && -! (kvm_read(kvmd, nl[N_BUFSPACE].n_value, (char *)&buffers, sizeof(buffers))==sizeof(buffers))) { -! st->rt_idle = (sum.v_page_count - (buffers/psize) - sum.v_wire_count) << pshift; -! st->rt_stat = sum.v_active_count << pshift; -! -! if (swappgsin < 0) { -! dpagein = 0; -! dpageout = 0; -! } -! else { -! dpagein = (sum.v_swappgsin - swappgsin) << pshift; -! dpageout = (sum.v_swappgsout - swappgsout) << pshift; -! } -! swappgsin = sum.v_swappgsin; -! swappgsout = sum.v_swappgsout; -! -! if ((dpagein>0) || (dpageout>0) || (first_time_done==0)) { -! swapmode(&st2->rt_idle, &st2->rt_stat); -! st2->rt_stat = st2->rt_idle - st2->rt_stat; -! } -! first_time_done = 1; -! } -! } - } - } - } - - void update_stat_swp(stat_dev *st) { - -! if (kvmd==NULL) kvmd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf); -! if (kvmd==NULL) { fprintf(stderr, "kvm_openfiles: %s\n", errbuf); exit(errno); } -! if (kvmd) { -! if (kvm_nlist(kvmd, nl) >= 0) { -! if (nl[0].n_type != 0) { -! static int first_time_done = 0; -! int dpagein, dpageout; -! -! struct vmmeter sum; -! if (kvm_read(kvmd, nl[N_CNT].n_value, (char *)&sum, sizeof(sum))==sizeof(sum)) { -! if (swappgsin < 0) { -! dpagein = 0; -! dpageout = 0; -! } -! else { -! dpagein = (sum.v_swappgsin - swappgsin) << pshift; -! dpageout = (sum.v_swappgsout - swappgsout) << pshift; -! } -! swappgsin = sum.v_swappgsin; -! swappgsout = sum.v_swappgsout; -! -! if ((dpagein>0) || (dpageout>0) || (first_time_done==0)) { -! swapmode(&st->rt_idle, &st->rt_stat); -! st->rt_stat = st->rt_idle - st->rt_stat; -! } -! first_time_done = 1; -! } -! } -! } -! } -! } -! -! #if __FreeBSD_version < 400000 -! /* -! * swapmode for FreeBSD 2.x and 3.x is based on a program called swapinfo -! * written by Kevin Lahey <kml@rokkaku.atl.ga.us>. -! */ -! -! #define SVAR(var) __STRING(var) /* to force expansion */ -! #define KGET(idx, var) \ -! KGET1(idx, &var, sizeof(var), SVAR(var)) -! #define KGET1(idx, p, s, msg) \ -! KGET2(nl[idx].n_value, p, s, msg) -! #define KGET2(addr, p, s, msg) \ -! if (kvm_read(kvmd, (u_long)(addr), p, s) != s) { \ -! return (0); \ -! } -! #define KGETRET(addr, p, s, msg) \ -! if (kvm_read(kvmd, (u_long)(addr), p, s) != s) { \ -! return (0); \ -! } -! #endif -! -! -! int swapmode( long *retavail, long *retfree) -! { -! int used, avail; -! #if __FreeBSD_version >= 400000 -! struct kvm_swap kvmswap; -! #else -! char *header; -! int hlen, nswap, nswdev, dmmax; -! int i, div, nfree, npfree; -! struct swdevt *sw; -! long blocksize, *perdev; -! u_long ptr; -! struct rlist head; -! # if __FreeBSD_version >= 220000 -! struct rlisthdr swaplist; -! # else -! struct rlist *swaplist; -! # endif -! struct rlist *swapptr; -! #endif -! -! /* -! * Counter for error messages. If we reach the limit, -! * stop reading information from swap devices and -! * return zero. This prevent endless 'bad address' -! * messages. -! */ -! static int warning = 10; -! -! if (warning <= 0) { -! /* a single warning */ -! if (!warning) { -! warning--; -! fprintf(stderr, -! "Too much errors, stop reading swap devices ...\n"); -! (void)sleep(3); -! } -! return(0); -! } -! warning--; /* decrease counter, see end of function */ -! -! #if __FreeBSD_version >= 400000 -! if( kvm_getswapinfo( kvmd, &kvmswap, 1, 0 ) < 0 ) { -! fprintf(stderr, "kvm_getswapinfo failed\n"); -! return(0); -! } -! -! *retavail = avail = kvmswap.ksw_total; -! used = kvmswap.ksw_used; -! *retfree = kvmswap.ksw_total - used; -! #else -! KGET(VM_NSWAP, nswap); -! if (!nswap) { -! fprintf(stderr, "No swap space available\n"); -! return(0); -! } -! -! KGET(VM_NSWDEV, nswdev); -! KGET(VM_DMMAX, dmmax); -! KGET1(VM_SWAPLIST, &swaplist, sizeof(swaplist), "swaplist"); -! if ((sw = (struct swdevt *)malloc(nswdev * sizeof(*sw))) == NULL || -! (perdev = (long *)malloc(nswdev * sizeof(*perdev))) == NULL) -! { -! perror("malloc"); -! exit(1); -! } -! KGET1(VM_SWDEVT, &ptr, sizeof ptr, "swdevt"); -! KGET2(ptr, sw, nswdev * sizeof(*sw), "*swdevt"); - -! /* Count up swap space. */ -! nfree = 0; -! memset(perdev, 0, nswdev * sizeof(*perdev)); -! #if __FreeBSD_version >= 220000 -! swapptr = swaplist.rlh_list; -! while (swapptr) { -! #else -! while (swaplist) { -! #endif -! int top, bottom, next_block; -! #if __FreeBSD_version >= 220000 -! KGET2(swapptr, &head, sizeof(struct rlist), "swapptr"); -! #else -! KGET2(swaplist, &head, sizeof(struct rlist), "swaplist"); -! #endif -! -! top = head.rl_end; -! bottom = head.rl_start; -! -! nfree += top - bottom + 1; -! -! /* -! * Swap space is split up among the configured disks. -! * -! * For interleaved swap devices, the first dmmax blocks -! * of swap space some from the first disk, the next dmmax -! * blocks from the next, and so on up to nswap blocks. -! * -! * The list of free space joins adjacent free blocks, -! * ignoring device boundries. If we want to keep track -! * of this information per device, we'll just have to -! * extract it ourselves. -! */ -! -! while (top / dmmax != bottom / dmmax) { -! next_block = ((bottom + dmmax) / dmmax); -! perdev[(bottom / dmmax) % nswdev] += -! next_block * dmmax - bottom; -! bottom = next_block * dmmax; - } -+ perdev[(bottom / dmmax) % nswdev] += -+ top - bottom + 1; -+ -+ #if __FreeBSD_version >= 220000 -+ swapptr = head.rl_next; -+ #else -+ swaplist = head.rl_next; -+ #endif -+ } -+ -+ header = getbsize(&hlen, &blocksize); -+ div = blocksize / 512; -+ avail = npfree = 0; -+ for (i = 0; i < nswdev; i++) { -+ int xsize, xfree; -+ -+ /* -+ * Don't report statistics for partitions which have not -+ * yet been activated via swapon(8). -+ */ -+ -+ xsize = sw[i].sw_nblks; -+ xfree = perdev[i]; -+ used = xsize - xfree; -+ npfree++; -+ avail += xsize; - } - -+ /* -+ * If only one partition has been set up via swapon(8), we don't -+ * need to bother with totals. -+ */ -+ *retavail = avail / 2; -+ *retfree = nfree / 2; -+ used = avail - nfree; -+ free(sw); free(perdev); -+ #endif /* __FreeBSD_version >= 400000 */ -+ -+ /* increase counter, no errors occurs */ -+ warning++; -+ -+ return (int)(((double)used / (double)avail * 100.0) + 0.5); - } - -+ -+ - /*******************************************************************************\ - |* get_statistics *| - \*******************************************************************************/ -*************** -*** 545,554 **** - void get_statistics(char *devname, long *is, long *ds, long *idle) { - - int i; -! char temp[128]; -! char *p; -! char *tokens = " \t\n"; -! float f; - long maxdiskio=0; - - *is = 0; ---- 889,896 ---- - void get_statistics(char *devname, long *is, long *ds, long *idle) { - - int i; -! long averun[3]; -! long cp_time[CPUSTATES]; - long maxdiskio=0; - - *is = 0; -*************** -*** 556,592 **** - *idle = 0; - - if (!strncmp(devname, "cpu", 3)) { -! fseek(fp_stat, 0, SEEK_SET); -! while (fgets(temp, 128, fp_stat)) { -! if (strstr(temp, "cpu")) { -! p = strtok(temp, tokens); -! /* 1..3, 4 == idle, we don't want idle! */ -! for (i=0; i<3; i++) { -! p = strtok(NULL, tokens); -! *ds += atol(p); -! } -! p = strtok(NULL, tokens); -! *idle = atol(p); -! } -! } -! fp_loadavg = freopen("/proc/loadavg", "r", fp_loadavg); -! fscanf(fp_loadavg, "%f", &f); -! *is = (long) (100 * f); - } - - if (!strncmp(devname, "i/o", 3)) { - -! fseek(fp_stat, 0, SEEK_SET); -! while (fgets(temp, 128, fp_stat)) { -! if (strstr(temp, "disk_rio") || strstr(temp, "disk_wio")) { -! p = strtok(temp, tokens); -! /* 1..4 */ -! for (i=0; i<4; i++) { -! p = strtok(NULL, tokens); -! *ds += atol(p); - } - } - } - if (*ds > maxdiskio) maxdiskio = *ds; - } - } ---- 898,1102 ---- - *idle = 0; - - if (!strncmp(devname, "cpu", 3)) { -! if (kvmd==NULL) kvmd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf); -! if (kvmd==NULL) { fprintf(stderr, "kvm_openfiles: %s\n", errbuf); exit(errno); } -! if (kvmd) { -! if (kvm_nlist(kvmd, nl) >= 0) { -! if (nl[0].n_type != 0) { -! if ((kvm_read(kvmd, nl[N_CP_TIME].n_value, (char *)&cp_time, sizeof(cp_time))==sizeof(cp_time)) && -! (kvm_read(kvmd, nl[N_AVERUN].n_value, (char *)&averun, sizeof(averun))==sizeof(averun))) { -! *is = (long) (100 * ((double)averun[0] / FSCALE)); -! -! for (i = 0; i < CPUSTATES; i++) { -! if (i != CP_IDLE) *ds += cp_time[i]; -! } -! *idle = cp_time[CP_IDLE]; -! } -! } -! } -! } - } - - if (!strncmp(devname, "i/o", 3)) { -+ #if __FreeBSD_version < 300000 -+ if (kvmd==NULL) kvmd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf); -+ if (kvmd==NULL) { fprintf(stderr, "kvm_openfiles: %s\n", errbuf); exit(errno); } -+ if (kvmd) { -+ if (kvm_nlist(kvmd, nl) >= 0) { -+ if (nl[0].n_type != 0) { -+ if (kvm_read(kvmd, nl[N_DK_WDS].n_value, (char *)cur_dk_wds, ndrives * sizeof(long))==(ndrives*sizeof(long))) { -+ for (i = 0; i < ndrives; i++) { -+ *ds += cur_dk_wds[i]; -+ } -+ } -+ } -+ } -+ } -+ #else -+ static int initted = 0; -+ static struct statinfo last; -+ static struct statinfo cur; -+ int ndevs = getnumdevs(); -+ int gotdevs = 0; -+ long generation; -+ int num_devices_specified = 0; -+ int num_selected; -+ int num_selections; -+ int maxshowdevs = 10; -+ int num_matches = 0; -+ struct devstat_match *matches = NULL; -+ struct device_selection *dev_select = NULL; -+ char **specified_devices; -+ long select_generation; -+ -+ if( !initted ) -+ { -+ bzero( &cur, sizeof(cur) ); -+ bzero( &last, sizeof(cur) ); -+ -+ cur.dinfo = (struct devinfo *)malloc( sizeof(struct devinfo) ); -+ last.dinfo = (struct devinfo *)malloc( sizeof(struct devinfo) ); - -! bzero( cur.dinfo, sizeof(struct devinfo) ); -! bzero( last.dinfo, sizeof(struct devinfo) ); -! -! specified_devices = (char **)malloc(sizeof(char *)); -! } -! else -! { -! struct devinfo *tmp; -! -! if (kvmd==NULL) kvmd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf); -! if (kvmd==NULL) -! { -! fprintf(stderr, "kvm_openfiles: %s\n", errbuf); -! exit(errno); -! } -! else -! { -! (void)kvm_read( kvmd, nl[N_TK_NIN].n_value, &cur.tk_nin, -! sizeof(cur.tk_nin) ); -! (void)kvm_read( kvmd, nl[N_TK_NOUT].n_value, &cur.tk_nout, -! sizeof(cur.tk_nout) ); -! (void)kvm_read( kvmd, nl[N_CP_TIME].n_value, -! cur.cp_time, sizeof(cur.cp_time) ); -! } -! -! tmp = last.dinfo; -! memcpy( &last, &cur, sizeof(cur) ); -! cur.dinfo = tmp; -! -! last.busy_time = cur.busy_time; -! } -! -! if( !gotdevs && ( getdevs( &cur ) >= 0 ) ) -! gotdevs = 1; -! -! if( gotdevs ) -! { -! generation = cur.dinfo->generation; -! ndevs = cur.dinfo->numdevs; -! -! if( !initted ) -! { -! selectdevs( &dev_select, &num_selected, &num_selections, -! &select_generation, generation, cur.dinfo->devices, -! ndevs, matches, num_matches, specified_devices, -! num_devices_specified, DS_SELECT_ONLY, maxshowdevs, -! 1 ); -! } -! else -! { -! struct devinfo *tmpinfo; -! long tmp; -! -! switch( getdevs( &cur ) ) -! { -! case 1: -! selectdevs( &dev_select, &num_selected, -! &num_selections, &select_generation, -! generation, cur.dinfo->devices, -! ndevs, matches, num_matches, -! specified_devices, -! num_devices_specified, -! DS_SELECT_ONLY, -! maxshowdevs, 1 ); -! -! if (kvmd==NULL) -! { -! fprintf(stderr, "kvm_openfiles: %s\n", errbuf); -! exit(errno); -! } -! else -! { -! (void)kvm_read( kvmd, nl[N_TK_NIN].n_value, &cur.tk_nin, -! sizeof(cur.tk_nin) ); -! (void)kvm_read( kvmd, nl[N_TK_NOUT].n_value, &cur.tk_nout, -! sizeof(cur.tk_nout) ); -! (void)kvm_read( kvmd, nl[N_CP_TIME].n_value, -! cur.cp_time, sizeof(cur.cp_time) ); -! } -! -! tmpinfo = last.dinfo; -! memcpy( &last, &cur, sizeof(cur) ); -! cur.dinfo = tmpinfo; -! -! last.busy_time = cur.busy_time; -! break; -! default: -! break; -! } -! -! selectdevs( &dev_select, &num_selected, &num_selections, -! &select_generation, generation, cur.dinfo->devices, -! ndevs, matches, num_matches, specified_devices, -! num_devices_specified, DS_SELECT_ONLY, maxshowdevs, -! 1 ); -! -! tmp = cur.tk_nin; -! cur.tk_nin -= last.tk_nin; -! last.tk_nin = tmp; -! tmp = cur.tk_nout; -! cur.tk_nout -= last.tk_nout; -! last.tk_nout = tmp; -! -! { -! register int dn; -! long double transfers_per_second; -! long double kb_per_transfer, mb_per_second; -! u_int64_t total_bytes, total_transfers, total_blocks; -! long double busy_seconds; -! long double blocks_per_second, ms_per_transaction; -! -! busy_seconds = compute_etime( cur.busy_time, last.busy_time ); -! -! for( dn = 0; dn < ndevs; dn++ ) -! { -! int di = dev_select[dn].position; -! -! if( compute_stats( &cur.dinfo->devices[di], -! &last.dinfo->devices[di], -! busy_seconds, -! &total_bytes, -! &total_transfers, -! &total_blocks, -! &kb_per_transfer, -! &transfers_per_second, -! &mb_per_second, -! &blocks_per_second, -! &ms_per_transaction ) == 0 ) -! { -! *ds += total_blocks; -! } -! } - } - } -+ initted = 1; - } -+ -+ if( dev_select ) -+ free( dev_select ); -+ #endif - if (*ds > maxdiskio) maxdiskio = *ds; - } - } -*************** -*** 597,605 **** - - int checksysdevs(void) { - -! strcpy(stat_device[0].name, "cpu0"); -! strcpy(stat_device[1].name, "i/o"); -! strcpy(stat_device[2].name, "sys"); - - return 3; - } ---- 1107,1115 ---- - - int checksysdevs(void) { - -! strncpy(stat_device[0].name, "cpu0", 5); -! strncpy(stat_device[1].name, "i/o", 5); -! strncpy(stat_device[2].name, "sys", 5); - - return 3; - } -*************** -*** 638,643 **** ---- 1148,1154 ---- - int *p; - int d; - -+ /* printf ("size = %d, num = %d\n", size, num); */ - pixels_per_byte = 100; - p = his; - for (j=0; j<num; j++) { |