* - plot the process table, by process size, cpu usage, or total time;
* - plot the logged on users by idle time or cpu usage.
*
- * Copyright (C) 1998 by Stephen Martin (smartin@vanderfleet-martin.net).
+ * Copyright (C) 1998, 2001
+ * by Stephen Martin (smartin@vanderfleet-martin.net).
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* software for any purpose. It is provided "as is" without express or
* implied warranty.
*
- * $Revision: 1.16 $
+ * $Revision: 1.19 $
*
* Version 1.0 April 27, 1998.
* - Initial version
# undef HAVE_PING
#endif
+
+#ifdef HAVE_PING
+# if defined(__DECC) || defined(_IP_VHL)
+ /* This is how you do it on DEC C, and possibly some BSD systems. */
+# define IP_HDRLEN(ip) ((ip)->ip_vhl & 0x0F)
+# else
+ /* This is how you do it on everything else. */
+# define IP_HDRLEN(ip) ((ip)->ip_hl)
+# endif
+#endif /* HAVE_PING */
+
+
/* Forward References */
#ifdef HAVE_PING
* A list of targets to ping.
*/
-#ifdef HAVE_PING
typedef struct ping_target {
char *name; /* The name of the target */
struct sockaddr address; /* The address of the target */
struct ping_target *next; /* The next one in the list */
} ping_target;
+
+#ifdef HAVE_PING
/*
* Ping Information.
*
fprintf (stderr,
"%s: pinging %u hosts is a bad idea; please use a subnet mask of 24 bits\n"
" or more (255 hosts max.)\n",
- progname, 1L << (32 - subnet_width));
+ progname, (1L << (32 - subnet_width)) - 1);
exit (1);
}
else if (subnet_width > 30)
gettimeofday(&now, (struct timezone *) 0);
ip = (struct ip *) packet;
-
- iphdrlen = ip->ip_hl << 2;
- /* On DEC OSF1 4.0, the preceeding line needs to be
- iphdrlen = (ip->ip_vhl & 0x0F) << 2;
- but I don't know how to do this portably. -- jwz.
- */
-
+ iphdrlen = IP_HDRLEN(ip) << 2;
icmph = (struct ICMP *) &packet[iphdrlen];
/* Was the packet a reply?? */
/* Check for expired tagets and remove them from the visable list */
prev = NULL;
- for (bp = si->visable; bp != NULL; bp = bp->next) {
+ for (bp = si->visable; bp != NULL; bp = (bp ? bp->next : 0)) {
/*
* Remove it from the visable list if it's expired or we have
else
prev->next = bp->next;
freeBogie(bp);
+ bp = prev;
} else
prev = bp;
}