BSD 4_3 release
[unix-history] / usr / src / etc / htable / htable.c
index 5a22890..4918a5b 100644 (file)
@@ -1,6 +1,18 @@
+/*
+ * Copyright (c) 1983 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ */
+
+#ifndef lint
+char copyright[] =
+"@(#) Copyright (c) 1983 Regents of the University of California.\n\
+ All rights reserved.\n";
+#endif not lint
+
 #ifndef lint
 #ifndef lint
-static char sccsid[] = "@(#)htable.c   4.7 (Berkeley) 11/3/83";
-#endif
+static char sccsid[] = "@(#)htable.c   5.5 (Berkeley) 4/15/86";
+#endif not lint
 
 /*
  * htable - convert NIC host table into a UNIX format.
 
 /*
  * htable - convert NIC host table into a UNIX format.
@@ -181,7 +193,7 @@ do_entry(keyword, addrlist, namelist, cputype, opsys, protos)
                nl = namelist;
                if (nl == NONAME) {
                        fprintf(stderr, "htable: net");
                nl = namelist;
                if (nl == NONAME) {
                        fprintf(stderr, "htable: net");
-                       putnet(stderr, addrlist->addr_val);
+                       putnet(stderr, inet_netof(addrlist->addr_val));
                        fprintf(stderr, " missing names.\n");
                        break;
                }
                        fprintf(stderr, " missing names.\n");
                        break;
                }
@@ -190,7 +202,7 @@ do_entry(keyword, addrlist, namelist, cputype, opsys, protos)
                while (al = al2) {
                        char *cp;
 
                while (al = al2) {
                        char *cp;
 
-                       putnet(nf, al->addr_val);
+                       putnet(nf, inet_netof(al->addr_val));
                        cp = "\t%s";
                        while (nl = nl->name_link) {
                                fprintf(nf, cp, lower(nl->name_val));
                        cp = "\t%s";
                        while (nl = nl->name_link) {
                                fprintf(nf, cp, lower(nl->name_val));
@@ -236,11 +248,9 @@ do_entry(keyword, addrlist, namelist, cputype, opsys, protos)
                for (al = addrlist; al; al = al->addr_link) {
                        register int net;
 
                for (al = addrlist; al; al = al->addr_link) {
                        register int net;
 
-                       if (al == connect_addr)
-                               continue;
                        /* suppress duplicates -- not optimal */
                        net = inet_netof(al->addr_val);
                        /* suppress duplicates -- not optimal */
                        net = inet_netof(al->addr_val);
-                       if (gatewayto(net))
+                       if (connectedto(net) || gatewayto(net))
                                continue;
                        printgateway(net, namelist->name_val, 1);
                        (void) savegateway(namelist, net, al->addr_val, 1);
                                continue;
                        printgateway(net, namelist->name_val, 1);
                        (void) savegateway(namelist, net, al->addr_val, 1);
@@ -330,12 +340,12 @@ copygateways(f, filename)
        char *filename;
 {
        register FILE *lhf;
        char *filename;
 {
        register FILE *lhf;
-       register cc;
        struct name *nl;
        char type[80];
        char dname[80];
        char gname[80];
        char junk[80];
        struct name *nl;
        char type[80];
        char dname[80];
        char gname[80];
        char junk[80];
+       char buf[500];
        u_long addr;
        int net, metric;
        extern int errno;
        u_long addr;
        int net, metric;
        extern int errno;
@@ -350,21 +360,23 @@ copygateways(f, filename)
                return;
        }
        /* format: {net | host} XX gateway XX metric DD [passive]\n */
                return;
        }
        /* format: {net | host} XX gateway XX metric DD [passive]\n */
-#define        readentry(fp) \
-       fscanf((fp), "%s %s gateway %s metric %d %s\n", \
-               type, dname, gname, &metric, junk)
-       while (readentry(lhf) != EOF) {
+       for (;;) {
+               junk[0] = 0;
+               if (fgets(buf, sizeof(buf), lhf) == (char *)NULL)
+                       break;
+               fputs(buf, gf);
+               if (buf[0] == '#' ||
+                   sscanf(buf, "%s %s gateway %s metric %d %s",
+                   type, dname, gname, &metric, junk) < 5)
+                       continue;
                if (strcmp(type, "net"))
                if (strcmp(type, "net"))
-                       goto dumpit;
+                       continue;
                if (!getnetaddr(dname, &net))
                if (!getnetaddr(dname, &net))
-                       goto dumpit;
+                       continue;
                if (!gethostaddr(gname, &addr))
                if (!gethostaddr(gname, &addr))
-                       goto dumpit;
+                       continue;
                nl = newname(gname);
                (void) savegateway(nl, net, addr, metric);
                nl = newname(gname);
                (void) savegateway(nl, net, addr, metric);
-dumpit:
-               fprintf(gf, "%s %s gateway %s metric %d %s\n",
-                       type, dname, gname, metric, junk);
        }
        fclose(lhf);
 }
        }
        fclose(lhf);
 }
@@ -421,18 +433,20 @@ copycomments(in, out, ccount)
 }
 #define        UC(b)   (((int)(b))&0xff)
 
 }
 #define        UC(b)   (((int)(b))&0xff)
 
+/*
+ * Print network number in internet-standard dot notation;
+ * v is in host byte order.
+ */
 putnet(f, v)
        FILE *f;
 putnet(f, v)
        FILE *f;
-       u_long v;
+       register int v;
 {
 {
-       register char *a = (char *)&v;
-
-       if (UC(a[0]&0x80) == 0)
-               fprintf(f, "%d", UC(a[0]));
-       else if ((UC(a[0])&0x40) == 0)
-               fprintf(f, "%d.%d", UC(a[0]), UC(a[1]));
+       if (v < 128)
+               fprintf(f, "%d", v);
+       else if (v < 65536)
+               fprintf(f, "%d.%d", UC(v >> 8), UC(v));
        else
        else
-               fprintf(f, "%d.%d.%d", UC(a[0]), UC(a[1]), UC(a[2]));
+               fprintf(f, "%d.%d.%d", UC(v >> 16), UC(v >> 8), UC(v));
 }
 
 putaddr(f, v)
 }
 
 putaddr(f, v)
@@ -509,6 +523,7 @@ savegateway(namelist, net, addr, metric)
        gp->g_metric = metric;
        if (metric == 1)
                gp->g_dst = gp;
        gp->g_metric = metric;
        if (metric == 1)
                gp->g_dst = gp;
+       return (gp);
 }
 
 connectedto(net)
 }
 
 connectedto(net)