Ignore:
Timestamp:
Nov 4, 2007, 3:16:40 AM (16 years ago)
Author:
Bruno Cornec
Message:

Update to busybox 1.7.2

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.5/mindi-busybox/networking/hostname.c

    r821 r1765  
    11/* vi: set sw=4 ts=4: */
    22/*
    3  * $Id: hostname.c,v 1.36 2003/07/14 21:21:01 andersen Exp $
    43 * Mini hostname implementation for busybox
    54 *
     
    98 * use of long options and GNU getopt.  Improved the usage info.
    109 *
    11  * This program is free software; you can redistribute it and/or modify
    12  * it under the terms of the GNU General Public License as published by
    13  * the Free Software Foundation; either version 2 of the License, or
    14  * (at your option) any later version.
     10 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    1511 *
    16  * This program is distributed in the hope that it will be useful,
    17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    19  * General Public License for more details.
    20  *
    21  * You should have received a copy of the GNU General Public License
    22  * along with this program; if not, write to the Free Software
    23  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
     12 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
    2413 */
    2514
    26 #include <errno.h>
    27 #include <arpa/inet.h>
    28 #include <netdb.h>
    29 #include <unistd.h>
    30 #include <string.h>
    31 #include <stdio.h>
    32 #include <stdlib.h>
    33 #include <getopt.h>
    34 #include "busybox.h"
    35 
    36 extern char *optarg; /* in unistd.h */
    37 extern int  optind, opterr, optopt; /* in unistd.h */
     15#include "libbb.h"
    3816
    3917static void do_sethostname(char *s, int isfile)
    4018{
    4119    FILE *f;
    42     char buf[255];
    4320
    4421    if (!s)
     
    4724        if (sethostname(s, strlen(s)) < 0) {
    4825            if (errno == EPERM)
    49                 bb_error_msg_and_die("you must be root to change the hostname");
     26                bb_error_msg_and_die(bb_msg_perm_denied_are_you_root);
    5027            else
    5128                bb_perror_msg_and_die("sethostname");
    5229        }
    5330    } else {
    54         f = bb_xfopen(s, "r");
    55         while (fgets(buf, 255, f) != NULL) {
    56             if (buf[0] =='#') {
     31        f = xfopen(s, "r");
     32#define strbuf bb_common_bufsiz1
     33        while (fgets(strbuf, sizeof(strbuf), f) != NULL) {
     34            if (strbuf[0] == '#') {
    5735                continue;
    5836            }
    59             chomp(buf);
    60             do_sethostname(buf, 0);
     37            chomp(strbuf);
     38            do_sethostname(strbuf, 0);
    6139        }
    62 #ifdef CONFIG_FEATURE_CLEAN_UP
    63         fclose(f);
    64 #endif
     40        if (ENABLE_FEATURE_CLEAN_UP)
     41            fclose(f);
    6542    }
    6643}
    6744
     45int hostname_main(int argc, char **argv);
    6846int hostname_main(int argc, char **argv)
    6947{
    70     int opt;
    71     int type = 0;
    72     struct hostent *hp;
    73     char *filename = NULL;
    74     char buf[255];
    75     char *p = NULL;
     48    enum {
     49        OPT_d = 0x1,
     50        OPT_f = 0x2,
     51        OPT_i = 0x4,
     52        OPT_s = 0x8,
     53        OPT_F = 0x10,
     54        OPT_dfis = 0xf,
     55    };
     56
     57    char buf[256];
     58    char *hostname_str;
    7659
    7760    if (argc < 1)
    7861        bb_show_usage();
    7962
    80     while ((opt = getopt(argc, argv, "dfisF:")) > 0) {
    81         switch (opt) {
    82         case 'd':
    83         case 'f':
    84         case 'i':
    85         case 's':
    86             type = opt;
    87             break;
    88         case 'F':
    89             filename = optarg;
    90             break;
    91         default:
    92             bb_show_usage();
    93         }
    94     }
     63    getopt32(argv, "dfisF:", &hostname_str);
    9564
    9665    /* Output in desired format */
    97     if (type != 0) {
    98         gethostname(buf, 255);
     66    if (option_mask32 & OPT_dfis) {
     67        struct hostent *hp;
     68        char *p;
     69        gethostname(buf, sizeof(buf));
    9970        hp = xgethostbyname(buf);
    10071        p = strchr(hp->h_name, '.');
    101         if (type == 'f') {
     72        if (option_mask32 & OPT_f) {
    10273            puts(hp->h_name);
    103         } else if (type == 's') {
     74        } else if (option_mask32 & OPT_s) {
    10475            if (p != NULL) {
    105                 *p = 0;
     76                *p = '\0';
    10677            }
    10778            puts(hp->h_name);
    108         } else if (type == 'd') {
    109             if (p) puts(p + 1);
    110         } else if (type == 'i') {
     79        } else if (option_mask32 & OPT_d) {
     80            if (p)
     81                puts(p + 1);
     82        } else if (option_mask32 & OPT_i) {
    11183            while (hp->h_addr_list[0]) {
    11284                printf("%s ", inet_ntoa(*(struct in_addr *) (*hp->h_addr_list++)));
    11385            }
    114             printf("\n");
     86            puts("");
    11587        }
    11688    }
    11789    /* Set the hostname */
    118     else if (filename != NULL) {
    119         do_sethostname(filename, 1);
     90    else if (option_mask32 & OPT_F) {
     91        do_sethostname(hostname_str, 1);
    12092    } else if (optind < argc) {
    12193        do_sethostname(argv[optind], 0);
     
    12395    /* Or if all else fails,
    12496     * just print the current hostname */
    125      else {
    126         gethostname(buf, 255);
     97    else {
     98        gethostname(buf, sizeof(buf));
    12799        puts(buf);
    128100    }
    129     return(0);
     101    return 0;
    130102}
Note: See TracChangeset for help on using the changeset viewer.