Author: eadler
Date: Mon Apr 14 16:43:36 2014
New Revision: 264462
URL: http://svnweb.freebsd.org/changeset/base/264462

Log:
  units(1): support reading multiple units files
  
  GNU units(1) supports reading up to 25 -f options.  We support an arbitrary
  number.

Modified:
  head/usr.bin/units/units.c

Modified: head/usr.bin/units/units.c
==============================================================================
--- head/usr.bin/units/units.c  Mon Apr 14 16:31:56 2014        (r264461)
+++ head/usr.bin/units/units.c  Mon Apr 14 16:43:36 2014        (r264462)
@@ -153,8 +153,6 @@ readunits(const char *userfile)
                                errx(1, "can't find units file '%s'", 
UNITSFILE);
                }
        }
-       if (cap_enter() < 0 && errno != ENOSYS)
-               err(1, "unable to enter capability mode");
        cap_rights_init(&unitfilerights, CAP_READ, CAP_FSTAT);
        if (cap_rights_limit(fileno(unitfile), &unitfilerights) < 0
                && errno != ENOSYS)
@@ -693,19 +691,23 @@ main(int argc, char **argv)
        const char * havestr;
        const char * wantstr;
        int optchar;
-       char *userfile;
        bool quiet;
+       bool readfile;
        History *inhistory;
        EditLine *el;
        HistEvent ev;
        int inputsz;
 
-       userfile = NULL;
        quiet = false;
+       readfile = false;
        while ((optchar = getopt(argc, argv, "Vqf:")) != -1) {
                switch (optchar) {
                case 'f':
-                       userfile = optarg;
+                       readfile = true;
+                       if (strlen(optarg) == 0)
+                               readunits(NULL);
+                       else
+                               readunits(optarg);
                        break;
                case 'q':
                        quiet = true;
@@ -719,8 +721,8 @@ main(int argc, char **argv)
                }
        }
 
-       if (optind != argc - 2 && optind != argc)
-               usage();
+       if (!readfile)
+               readunits(NULL);
 
        inhistory = history_init();
        el = el_init(argv[0], stdin, stdout, stderr);
@@ -732,8 +734,9 @@ main(int argc, char **argv)
        history(inhistory, &ev, H_SETSIZE, 800);
        if (inhistory == 0)
                err(1, "Could not initalize history");
-       
-       readunits(userfile);
+
+       if (cap_enter() < 0 && errno != ENOSYS)
+               err(1, "unable to enter capability mode");
 
        if (optind == argc - 2) {
                havestr = argv[optind];
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to