update the changelog, prepatory to the 0.51 release. Please review
[oweals/busybox.git] / hostname.c
index ef921024b972b307b53d33bbe5d6be54f7100e51..a6e001d54459dcfb502d680c25c3818a35b1d1f8 100644 (file)
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * $Id: hostname.c,v 1.8 2000/05/12 19:41:47 erik Exp $
+ * $Id: hostname.c,v 1.26 2001/03/09 21:24:12 andersen Exp $
  * Mini hostname implementation for busybox
  *
  * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  */
 
-#include "internal.h"
+#include "busybox.h"
 #include <errno.h>
 #include <arpa/inet.h>
 #include <netdb.h>
 #include <unistd.h>
+#include <string.h>
 #include <stdio.h>
+#include <stdlib.h>
 
-static const char *hostname_usage =
-       "hostname [OPTION] {hostname | -F file}\n"
-#ifndef BB_FEATURE_TRIVIAL_HELP
-       "\nGet or set the hostname or DNS domain name. If a hostname is given\n"
-       "(or a file with the -F parameter), the host name will be set.\n\n"
-       "Options:\n"
-       "\t-s\t\tShort\n"
-
-       "\t-i\t\tAddresses for the hostname\n"
-       "\t-d\t\tDNS domain name\n"
-       "\t-F FILE\t\tUse the contents of FILE to specify the hostname\n"
-#endif
-       ;
-
-
-void do_sethostname(char *s, int isfile)
+static void do_sethostname(char *s, int isfile)
 {
        FILE *f;
        char buf[255];
@@ -55,26 +42,17 @@ void do_sethostname(char *s, int isfile)
        if (!isfile) {
                if (sethostname(s, strlen(s)) < 0) {
                        if (errno == EPERM)
-                               fprintf(stderr,
-                                               "hostname: you must be root to change the hostname\n");
+                               error_msg_and_die("you must be root to change the hostname");
                        else
-                               perror("sethostname");
-                       exit(1);
+                               perror_msg_and_die("sethostname");
                }
        } else {
-               if ((f = fopen(s, "r")) == NULL) {
-                       perror(s);
-                       exit(1);
-               } else {
-                       fgets(buf, 255, f);
-                       fclose(f);
-                       if (buf[strlen(buf) - 1] == '\n')
-                               buf[strlen(buf) - 1] = 0;
-                       if (sethostname(buf, strlen(buf)) < 0) {
-                               perror("sethostname");
-                               exit(1);
-                       }
-               }
+               f = xfopen(s, "r");
+               fgets(buf, 255, f);
+               fclose(f);
+               chomp(buf);
+               if (sethostname(buf, strlen(buf)) < 0)
+                       perror_msg_and_die("sethostname");
        }
 }
 
@@ -89,7 +67,7 @@ int hostname_main(int argc, char **argv)
        char *s = NULL;
 
        if (argc < 1)
-               usage(hostname_usage);
+               show_usage();
 
        while (--argc > 0 && **(++argv) == '-') {
                while (*(++(*argv))) {
@@ -104,14 +82,19 @@ int hostname_main(int argc, char **argv)
                                opt_domain = 1;
                                break;
                        case 'F':
-                               filename = optarg;
                                if (--argc == 0) {
-                                       usage(hostname_usage);
+                                       show_usage();
+                               }
+                               filename = *(++argv);
+                               break;
+                       case '-':
+                               if (strcmp(++(*argv), "file") || --argc ==0 ) {
+                                       show_usage();
                                }
                                filename = *(++argv);
                                break;
                        default:
-                               usage(hostname_usage);
+                               show_usage();
                        }
                        if (filename != NULL)
                                break;
@@ -144,5 +127,5 @@ int hostname_main(int argc, char **argv)
                        printf("%s\n", buf);
                }
        }
-       exit(0);
+       return(0);
 }