Fix buildworld (netstat(1)).
authorSascha Wildner <saw@online.de>
Thu, 3 Mar 2011 16:59:42 +0000 (17:59 +0100)
committerSascha Wildner <saw@online.de>
Thu, 3 Mar 2011 16:59:42 +0000 (17:59 +0100)
Taken-from: FreeBSD

sys/netproto/ipx/ipx_pcb.h
usr.bin/netstat/ipx.c

index 0db1e11..88502fa 100644 (file)
@@ -56,6 +56,10 @@ struct ipxpcb {
        u_char  ipxp_rpt;               /* last received packet type by ipx_input() */
 };
 
+LIST_HEAD(ipxpcbhead, ipxpcb);
+extern struct ipxpcbhead ipxpcb_list;
+extern struct ipxpcbhead ipxrawpcb_list;
+
 /* possible flags */
 
 #define IPXP_IN_ABORT          0x1     /* calling abort through socket */
@@ -78,10 +82,6 @@ struct ipxpcb {
 #define        IPXRCVQ         40960
 
 #ifdef _KERNEL
-LIST_HEAD(ipxpcbhead, ipxpcb);
-extern struct ipxpcbhead ipxpcb_list;
-extern struct ipxpcbhead ipxrawpcb_list;
-
 int    ipx_pcballoc (struct socket *so, struct ipxpcbhead *head);
 int    ipx_pcbbind (struct ipxpcb *ipxp, struct sockaddr *nam,
                         struct thread *td);
index 93e9830..9f14031 100644 (file)
@@ -1,4 +1,5 @@
 /*
+ * Copyright (c) 2004, Robert N. M. Watson
  * Copyright (c) 1983, 1988, 1993
  *     The Regents of the University of California.  All rights reserved.
  *
 
 extern char *tcpstates[];
 
-struct ipxpcb ipxpcb;
-struct spxpcb spxpcb;
-struct socket sockb;
-
 static char *ipx_prpr (struct ipx_addr *);
 
-static int first = 1;
-
 /*
  * Print a summary of connections related to a Network Systems
  * protocol.  For SPX, also give state of connection.
@@ -84,27 +79,26 @@ static      int first = 1;
 void
 ipxprotopr(u_long off, const char *name, int af1 __unused)
 {
-       struct ipxpcb cb;
-       struct ipxpcb *prev, *next;
+       struct ipxpcbhead cb;
+       struct ipxpcb *ipxp;
+       struct ipxpcb ipxpcb;
+       struct spxpcb spxpcb;
+       struct socket sockb;
+       static int first = 1;
        int isspx;
 
        if (off == 0)
                return;
+
        isspx = strcmp(name, "spx") == 0;
-       kread(off, (char *)&cb, sizeof (struct ipxpcb));
-       ipxpcb = cb;
-       prev = (struct ipxpcb *)off;
-       if (ipxpcb.ipxp_next == (struct ipxpcb *)off)
-               return;
-       for (;ipxpcb.ipxp_next != (struct ipxpcb *)off; prev = next) {
+       kread(off, (char *)&cb, sizeof (struct ipxpcbhead));
+       ipxp = LIST_FIRST(&cb);
+       while (ipxp != NULL) {
                u_long ppcb;
 
-               next = ipxpcb.ipxp_next;
-               kread((u_long)next, (char *)&ipxpcb, sizeof (ipxpcb));
-               if (ipxpcb.ipxp_prev != prev) {
-                       printf("???\n");
-                       break;
-               }
+               kread((u_long)ipxp, (char *)&ipxpcb, sizeof (ipxpcb));
+               ipxp = LIST_NEXT(&ipxpcb, ipxp_list);
+
                if (!aflag && ipx_nullhost(ipxpcb.ipxp_faddr) ) {
                        continue;
                }
@@ -144,7 +138,6 @@ ipxprotopr(u_long off, const char *name, int af1 __unused)
                                printf(" %s", tcpstates[spxpcb.s_state]);
                }
                putchar('\n');
-               prev = next;
        }
 }