From 01dd3162ff90f8c337257f2a489e8c59decdbcab Mon Sep 17 00:00:00 2001
From: Corinna Vinschen <corinna@vinschen.de>
Date: Mon, 18 Aug 2008 08:33:48 +0000
Subject: [PATCH] 	* mkgroup.c (main): Always unset environment variable
 POSIXLY_CORRECT. 	Keep track of optional argumnts and fix up optind
 afterwards. 	* mkpasswd.c (main): Ditto.

---
 winsup/utils/ChangeLog  | 6 ++++++
 winsup/utils/mkgroup.c  | 5 +++++
 winsup/utils/mkpasswd.c | 5 +++++
 3 files changed, 16 insertions(+)

diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog
index cc00946b3..12ccadaae 100644
--- a/winsup/utils/ChangeLog
+++ b/winsup/utils/ChangeLog
@@ -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.
diff --git a/winsup/utils/mkgroup.c b/winsup/utils/mkgroup.c
index 48d682ee5..0b60ccaea 100644
--- a/winsup/utils/mkgroup.c
+++ b/winsup/utils/mkgroup.c
@@ -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,
diff --git a/winsup/utils/mkpasswd.c b/winsup/utils/mkpasswd.c
index 305842562..d7b999967 100644
--- a/winsup/utils/mkpasswd.c
+++ b/winsup/utils/mkpasswd.c
@@ -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,