add some sanity checks
authorSam Leffler <sam@ucbvax.Berkeley.EDU>
Mon, 3 Oct 1983 07:09:47 +0000 (23:09 -0800)
committerSam Leffler <sam@ucbvax.Berkeley.EDU>
Mon, 3 Oct 1983 07:09:47 +0000 (23:09 -0800)
SCCS-vsn: usr.bin/systat/pigs.c 1.3
SCCS-vsn: usr.bin/systat/swap.c 1.4

usr/src/usr.bin/systat/pigs.c
usr/src/usr.bin/systat/swap.c

index a496efd..221d8ba 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char sccsid[] = "@(#)pigs.c     1.2 (Lucasfilm) %G%";
+static char sccsid[] = "@(#)pigs.c     1.3 (Lucasfilm) %G%";
 #endif
 
 #include "systat.h"
 #endif
 
 #include "systat.h"
@@ -140,13 +140,15 @@ initpigs()
         if (procp == NULL) {
                 procp = getw(nlst[X_PROC].n_value);
                 nproc = getw(nlst[X_NPROC].n_value);
         if (procp == NULL) {
                 procp = getw(nlst[X_PROC].n_value);
                 nproc = getw(nlst[X_NPROC].n_value);
-                kprocp = (struct proc *)malloc(sizeof (*kprocp) * nproc);
         }
         }
+       if (kprocp == NULL)
+                kprocp = (struct proc *)calloc(nproc, sizeof (struct proc));
         if (usrpt != NULL)
                return;
        usrpt = (struct pte *)nlst[X_USRPT].n_value;
        Usrptma = (struct pte *)nlst[X_USRPTMAP].n_value;
         if (usrpt != NULL)
                return;
        usrpt = (struct pte *)nlst[X_USRPT].n_value;
        Usrptma = (struct pte *)nlst[X_USRPTMAP].n_value;
-       pt = (struct p_times *)malloc(nproc * sizeof (struct p_times));
+       if (pt == NULL)
+               pt = (struct p_times *)calloc(nproc, sizeof (struct p_times));
 }
 
 fetchpigs()
 }
 
 fetchpigs()
@@ -156,6 +158,16 @@ fetchpigs()
         register float time;
         register struct proc *pp;
 
         register float time;
         register struct proc *pp;
 
+       if (kprocp == NULL) {
+               kprocp = (struct proc *)calloc(nproc, sizeof (struct proc));
+               if (kprocp == NULL)
+                       return;
+       }
+       if (pt == NULL) {
+               pt = (struct p_times *)calloc(nproc, sizeof (struct p_times));
+               if (pt == NULL)
+                       return;
+       }
         prt = pt;
         lseek(kmem, procp, L_SET);
         read(kmem, kprocp, sizeof (struct proc) * nproc);
         prt = pt;
         lseek(kmem, procp, L_SET);
         read(kmem, kprocp, sizeof (struct proc) * nproc);
index b55e409..bd776a6 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)swap.c      1.3 (Lucasfilm) %G%";
+static char *sccsid = "@(#)swap.c      1.4 (Lucasfilm) %G%";
 #endif
 
 #include "systat.h"
 #endif
 
 #include "systat.h"
@@ -46,28 +46,47 @@ initswap()
                klseek(kmem, nlst[X_SWDEVT].n_value, L_SET);
                read(kmem, swdevt, nswdev * sizeof (struct swdevt));
                ntext = getw(nlst[X_NTEXT].n_value);
                klseek(kmem, nlst[X_SWDEVT].n_value, L_SET);
                read(kmem, swdevt, nswdev * sizeof (struct swdevt));
                ntext = getw(nlst[X_NTEXT].n_value);
-               xtext = (struct text *)calloc(ntext, sizeof (struct text));
                textaddr = getw(nlst[X_TEXT].n_value);
         }
         if (procp == NULL) {
                 procp = getw(nlst[X_PROC].n_value);
                 nproc = getw(nlst[X_NPROC].n_value);
                textaddr = getw(nlst[X_TEXT].n_value);
         }
         if (procp == NULL) {
                 procp = getw(nlst[X_PROC].n_value);
                 nproc = getw(nlst[X_NPROC].n_value);
-                kprocp = (struct proc *)malloc(sizeof (*kprocp) * nproc);
         }
         }
+       if (xtext == NULL)
+               xtext = (struct text *)calloc(ntext, sizeof (struct text));
+       if (kprocp == NULL)
+                kprocp = (struct proc *)calloc(nproc, sizeof (struct proc));
         if (usrpt != NULL)
                 return;
        usrpt = (struct pte *)nlst[X_USRPT].n_value;
        Usrptma = (struct pte *)nlst[X_USRPTMAP].n_value;
         if (usrpt != NULL)
                 return;
        usrpt = (struct pte *)nlst[X_USRPT].n_value;
        Usrptma = (struct pte *)nlst[X_USRPTMAP].n_value;
-       pt = (struct p_times *)malloc(nproc * sizeof (struct p_times));
+       if (pt == NULL)
+               pt = (struct p_times *)malloc(nproc * sizeof (struct p_times));
 }
 
 fetchswap()
 {
 
 }
 
 fetchswap()
 {
 
+       if (kprocp == NULL) {
+                kprocp = (struct proc *)malloc(sizeof (*kprocp) * nproc);
+               if (kprocp == NULL)
+                       return;
+       }
         lseek(kmem, procp, L_SET);
         lseek(kmem, procp, L_SET);
-        read(kmem, kprocp, sizeof (struct proc) * nproc);
+        if (read(kmem, kprocp, sizeof (struct proc) * nproc) !=
+           sizeof (struct proc) * nproc) {
+               error("couldn't read proc table");
+               return;
+       }
+       if (xtext == NULL) {
+               xtext = (struct text *)calloc(ntext, sizeof (struct text));
+               if (xtext == NULL)
+                       return;
+       }
        lseek(kmem, textaddr, L_SET);
        lseek(kmem, textaddr, L_SET);
-       read(kmem, xtext, ntext * sizeof (struct text));
+       if (read(kmem, xtext, ntext * sizeof (struct text)) !=
+           sizeof (struct text) * ntext)
+               error("couldn't read text table");
 }
 
 #ifdef vax
 }
 
 #ifdef vax
@@ -137,7 +156,7 @@ showswap()
        register int ts;
        register swblk_t *dp;
 
        register int ts;
        register swblk_t *dp;
 
-       if (nswdev == 0)
+       if (xtext == 0)
                return;
        for (xp = xtext; xp < &xtext[ntext]; xp++) {
                if (xp->x_iptr == NULL)
                return;
        for (xp = xtext; xp < &xtext[ntext]; xp++) {
                if (xp->x_iptr == NULL)
@@ -157,15 +176,15 @@ showswap()
                            [dmtoindex(ctod(ctopt(xp->x_size)))]++;
        }
        row = swapdisplay(4, dmtext, 'X');
                            [dmtoindex(ctod(ctopt(xp->x_size)))]++;
        }
        row = swapdisplay(4, dmtext, 'X');
+       if (kprocp == NULL)
+               return;
         for (i = 0, pp = kprocp; i < nproc; i++, pp++) {
                if (pp->p_stat == 0 || pp->p_stat == SZOMB)
                        continue;
                if (pp->p_flag & SSYS)
                        continue;
         for (i = 0, pp = kprocp; i < nproc; i++, pp++) {
                if (pp->p_stat == 0 || pp->p_stat == SZOMB)
                        continue;
                if (pp->p_flag & SSYS)
                        continue;
-               if (getu(pp) == 0) {
-                       error("showswap: getu failed on pid %d", pp->p_pid);
+               if (getu(pp) == 0)
                        continue;
                        continue;
-               }
                vsacct(&u.u_dmap);
                vsacct(&u.u_smap);
 #ifdef notdef
                vsacct(&u.u_dmap);
                vsacct(&u.u_smap);
 #ifdef notdef