OSDN Git Service

* mkgroup.c (main): Always unset environment variable POSIXLY_CORRECT.
authorcorinna <corinna>
Mon, 18 Aug 2008 08:33:48 +0000 (08:33 +0000)
committercorinna <corinna>
Mon, 18 Aug 2008 08:33:48 +0000 (08:33 +0000)
Keep track of optional argumnts and fix up optind afterwards.
* mkpasswd.c (main): Ditto.

winsup/utils/ChangeLog
winsup/utils/mkgroup.c
winsup/utils/mkpasswd.c

index cc00946..12ccada 100644 (file)
@@ -1,3 +1,9 @@
+2008-08-18  Corinna Vinschen  <corinna@vinschen.de>
+
+       * mkgroup.c (main): Always unset environment variable POSIXLY_CORRECT.
+       Keep track of optional argumnts and fix up optind afterwards.
+       * mkpasswd.c (main): Ditto.
+
 2008-08-17  Christopher Faylor  <me+cygwin@cgf.cx>
 
        * cygcheck.cc (print_version): Update copyright dates.
index 48d682e..0b60cca 100644 (file)
@@ -744,6 +744,7 @@ main (int argc, char **argv)
   int c, i;
   char *disp_groupname = NULL;
   BOOL in_domain;
+  int optional_args = 0;
 
   if (!isatty (1))
     setmode (1, O_BINARY);
@@ -768,6 +769,7 @@ main (int argc, char **argv)
       return 0;
     }
 
+  unsetenv ("POSIXLY_CORRECT"); /* To get optional arg processing right. */
   while ((c = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
     switch (c)
       {
@@ -784,6 +786,8 @@ main (int argc, char **argv)
        domlist[print_domlist].domain = (c == 'd' || c == 'D');
        opt = optarg ?:
              argv[optind] && argv[optind][0] != '-' ? argv[optind] : NULL;
+       if (opt == argv[optind])
+         ++optional_args;
        for (i = 0; i < print_domlist; ++i)
          if (domlist[i].domain == domlist[print_domlist].domain
              && ((!domlist[i].str && !opt)
@@ -864,6 +868,7 @@ skip:
        return 1;
       }
 
+  optind += optional_args;
   if (argv[optind])
     {
       fprintf (stderr,
index 3058425..d7b9999 100644 (file)
@@ -719,6 +719,7 @@ main (int argc, char **argv)
   char *disp_username = NULL;
   char passed_home_path[PATH_MAX];
   BOOL in_domain;
+  int optional_args = 0;
 
   passed_home_path[0] = '\0';
   if (!isatty (1))
@@ -740,6 +741,7 @@ main (int argc, char **argv)
       return 0;
     }
 
+  unsetenv ("POSIXLY_CORRECT"); /* To get optional arg processing right. */
   while ((c = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)
     switch (c)
       {
@@ -756,6 +758,8 @@ main (int argc, char **argv)
        domlist[print_domlist].domain = (c == 'd' || c == 'D');
        opt = optarg ?:
              argv[optind] && argv[optind][0] != '-' ? argv[optind] : NULL;
+       if (opt == argv[optind])
+         ++optional_args;
        for (i = 0; i < print_domlist; ++i)
          if (domlist[i].domain == domlist[print_domlist].domain
              && ((!domlist[i].str && !opt)
@@ -852,6 +856,7 @@ skip:
        return 1;
       }
 
+  optind += optional_args;
   if (argv[optind])
     {
       fprintf (stderr,