date and time created 88/07/22 16:08:01 by bostic
[unix-history] / usr / src / old / hostid / hostid.c
index cb96ed8..950c4f4 100644 (file)
@@ -1,17 +1,70 @@
+/*
+ * Copyright (c) 1983, 1988 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+#ifndef lint
+char copyright[] =
+"@(#) Copyright (c) 1983, 1988 Regents of the University of California.\n\
+ All rights reserved.\n";
+#endif /* not lint */
+
 #ifndef lint
 #ifndef lint
-static char sccsid[] = "@(#)hostid.c   4.2 (Berkeley) %G%";
-#endif
+static char sccsid[] = "@(#)hostid.c   5.6 (Berkeley) %G%";
+#endif /* not lint */
+
+#include <sys/types.h>
+#include <stdio.h>
+#include <netdb.h>
 
 main(argc, argv)
        int argc;
        char **argv;
 {
 
 main(argc, argv)
        int argc;
        char **argv;
 {
+       register char *id;
+       struct hostent *hp;
+       u_long addr, inet_addr();
+       long hostid, gethostid();
+       char *index();
+
+       if (argc < 2) {
+               printf("%#lx\n", gethostid());
+               exit(0);
+       }
+
+       id = argv[1];
+       if (hp = gethostbyname(id)) {
+               bcopy(hp->h_addr, &addr, sizeof(addr));
+               hostid = addr;
+       } else if (index(id, '.')) {
+               if ((hostid = inet_addr(id)) == -1)
+                       goto usage;
+       } else {
+               if (id[0] == '0' && (id[1] == 'x' || id[1] == 'X'))
+                       id += 2;
+               if (sscanf(id, "%lx", &hostid) != 1) {
+usage:                 fputs("usage: hostid [hexnum or internet address]\n",
+                           stderr);
+                       exit(1);
+               }
+       }
+
+       if (sethostid(hostid) < 0) {
+               perror("sethostid");
+               exit(1);
+       }
 
 
-       if (argc > 1) {
-               int hostid;
-               sscanf(argv[1], "%x", &hostid);
-               if (sethostid(hostid) < 0)
-                       perror("hostid");
-       } else
-               printf("%x\n", gethostid());
+       exit(0);
 }
 }