Imported from ../bash-2.05.tar.gz.
[platform/upstream/bash.git] / builtins / getopts.def
index f3d9aee..6abd1e4 100644 (file)
@@ -7,7 +7,7 @@ This file is part of GNU Bash, the Bourne Again SHell.
 
 Bash is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 1, or (at your option) any later
+Software Foundation; either version 2, or (at your option) any later
 version.
 
 Bash is distributed in the hope that it will be useful, but WITHOUT ANY
@@ -17,7 +17,7 @@ for more details.
 
 You should have received a copy of the GNU General Public License along
 with Bash; see the file COPYING.  If not, write to the Free Software
-Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
 
 $PRODUCES getopts.c
 
@@ -61,6 +61,9 @@ $END
 #include <stdio.h>
 
 #if defined (HAVE_UNISTD_H)
+#  ifdef _MINIX
+#    include <sys/types.h>
+#  endif
 #  include <unistd.h>
 #endif
 
@@ -178,6 +181,8 @@ dogetopts (argc, argv)
     {
       for (i = 0; i < 10 && dollar_vars[i]; i++)
        ;
+
+      sh_getopt_restore_state (dollar_vars);
       ret = sh_getopt (i, dollar_vars, optstr);
     }
   else
@@ -189,12 +194,13 @@ dogetopts (argc, argv)
        ;
       for (words = rest_of_args; words; words = words->next, i++)
        ;
-      v = (char **)xmalloc ((i + 1) * sizeof (char *));
+      v = alloc_array (i + 1);
       for (i = 0; i < 10 && dollar_vars[i]; i++)
-        v[i] = dollar_vars[i];
+       v[i] = dollar_vars[i];
       for (words = rest_of_args; words; words = words->next, i++)
-        v[i] = words->word->word;
+       v[i] = words->word->word;
       v[i] = (char *)NULL;
+      sh_getopt_restore_state (v);
       ret = sh_getopt (i, v, optstr);
       free (v);
     }
@@ -292,7 +298,10 @@ getopts_builtin (list)
   int ac, ret;
 
   if (list == 0)
-    return EXECUTION_FAILURE;
+    {
+      builtin_usage ();
+      return EX_USAGE;
+    }
 
   reset_internal_getopt ();
   while ((ret = internal_getopt (list, "")) != -1)