X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=hostname.c;h=44d529c83fc287e2625fc658bdbe5b282d6b61fc;hb=8c725e624a6fa97175f48e0fc34b37403e3b8613;hp=68a56095076081a78198474568a79fb957fb5efa;hpb=fac10d7c59f7db0facd5fb94de273310b9ec86e6;p=oweals%2Fbusybox.git diff --git a/hostname.c b/hostname.c index 68a560950..44d529c83 100644 --- a/hostname.c +++ b/hostname.c @@ -1,5 +1,6 @@ +/* vi: set sw=4 ts=4: */ /* - * $Id: hostname.c,v 1.6 2000/02/07 05:29:42 erik Exp $ + * $Id: hostname.c,v 1.15 2000/10/12 22:30:31 andersen Exp $ * Mini hostname implementation for busybox * * Copyright (C) 1999 by Randolph Chung @@ -22,117 +23,111 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "internal.h" +#include "busybox.h" #include #include #include #include #include -static const char* hostname_usage = -"hostname [OPTION] {hostname | -F file}\n\n" -"Get 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"; - - void do_sethostname(char *s, int isfile) { - FILE *f; - char buf[255]; - - if (!s) return; - if (!isfile) { - if (sethostname(s, strlen(s)) < 0) { - if (errno == EPERM) - fprintf(stderr, "hostname: you must be root to change the hostname\n"); - else - perror("sethostname"); - exit(1); - } - } else { - if ((f = fopen(s, "r")) == NULL) { - perror(s); - exit(1); + FILE *f; + char buf[255]; + + if (!s) + return; + if (!isfile) { + if (sethostname(s, strlen(s)) < 0) { + if (errno == EPERM) + errorMsg("you must be root to change the hostname\n"); + else + perror("sethostname"); + 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); + if (buf[strlen(buf) - 1] == '\n') + buf[strlen(buf) - 1] = 0; + if (sethostname(buf, strlen(buf)) < 0) { + perror("sethostname"); + exit(1); + } } - } } int hostname_main(int argc, char **argv) { - int opt_short = 0; - int opt_domain = 0; - int opt_ip = 0; - struct hostent *h; - char *filename = NULL; - char buf[255]; - char *s = NULL; - - if (argc < 1) usage(hostname_usage); + int opt_short = 0; + int opt_domain = 0; + int opt_ip = 0; + struct hostent *h; + char *filename = NULL; + char buf[255]; + char *s = NULL; - while (--argc > 0 && **(++argv) == '-') { - while (*(++(*argv))) { - switch (**argv) { - case 's': - opt_short = 1; - break; - case 'i': - opt_ip = 1; - break; - case 'd': - opt_domain = 1; - break; - case 'F': - filename = optarg; - if (--argc == 0) { - usage(hostname_usage); - } - filename = *(++argv); - break; - default: + if (argc < 1) usage(hostname_usage); - } - if (filename!=NULL) - break; + + while (--argc > 0 && **(++argv) == '-') { + while (*(++(*argv))) { + switch (**argv) { + case 's': + opt_short = 1; + break; + case 'i': + opt_ip = 1; + break; + case 'd': + opt_domain = 1; + break; + case 'F': + if (--argc == 0) { + usage(hostname_usage); + } + filename = *(++argv); + break; + case '-': + if (strcmp(++(*argv), "file") || --argc ==0 ) { + usage(hostname_usage); + } + filename = *(++argv); + break; + default: + usage(hostname_usage); + } + if (filename != NULL) + break; + } } - } - if (argc >= 1) { - do_sethostname(*argv, 0); - } else if (filename!=NULL) { - do_sethostname(filename, 1); - } else { - gethostname(buf, 255); - if (opt_short) { - s = strchr(buf, '.'); - if (!s) s = buf; *s = 0; - printf("%s\n", buf); - } else if (opt_domain) { - s = strchr(buf, '.'); - printf("%s\n", (s ? s+1 : "")); - } else if (opt_ip) { - h = gethostbyname(buf); - if (!h) { - printf("Host not found\n"); - exit(1); - } - printf("%s\n", inet_ntoa(*(struct in_addr *)(h->h_addr))); - } else { - printf("%s\n", buf); - } - } - exit( 0); + if (argc >= 1) { + do_sethostname(*argv, 0); + } else if (filename != NULL) { + do_sethostname(filename, 1); + } else { + gethostname(buf, 255); + if (opt_short) { + s = strchr(buf, '.'); + if (!s) + s = buf; + *s = 0; + printf("%s\n", buf); + } else if (opt_domain) { + s = strchr(buf, '.'); + printf("%s\n", (s ? s + 1 : "")); + } else if (opt_ip) { + h = gethostbyname(buf); + if (!h) { + printf("Host not found\n"); + exit(1); + } + printf("%s\n", inet_ntoa(*(struct in_addr *) (h->h_addr))); + } else { + printf("%s\n", buf); + } + } + return(0); } -