Commit 2287ac98 authored by Paul Eggert's avatar Paul Eggert

Merge from gnulib.

parents a63e0781 4a621aae
2011-07-08 Paul Eggert <eggert@cs.ucla.edu>
* lib/getopt.c, lib/unistd.in.h, m4/getopt.m4: Merge from gnulib.
2011-07-07 Andreas Schwab <schwab@linux-m68k.org> 2011-07-07 Andreas Schwab <schwab@linux-m68k.org>
* configure.in (maintainer-mode): Reflect default in help string. * configure.in (maintainer-mode): Reflect default in help string.
......
...@@ -829,7 +829,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring, ...@@ -829,7 +829,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
return '?'; return '?';
} }
/* Convenience. Treat POSIX -W foo same as long option --foo */ /* Convenience. Treat POSIX -W foo same as long option --foo */
if (temp[0] == 'W' && temp[1] == ';' && longopts) if (temp[0] == 'W' && temp[1] == ';')
{ {
char *nameend; char *nameend;
const struct option *p; const struct option *p;
...@@ -839,6 +839,9 @@ _getopt_internal_r (int argc, char **argv, const char *optstring, ...@@ -839,6 +839,9 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
int indfound = 0; int indfound = 0;
int option_index; int option_index;
if (longopts == NULL)
goto no_longs;
/* This is an option that requires an argument. */ /* This is an option that requires an argument. */
if (*d->__nextchar != '\0') if (*d->__nextchar != '\0')
{ {
...@@ -1046,6 +1049,8 @@ _getopt_internal_r (int argc, char **argv, const char *optstring, ...@@ -1046,6 +1049,8 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
} }
return pfound->val; return pfound->val;
} }
no_longs:
d->__nextchar = NULL; d->__nextchar = NULL;
return 'W'; /* Let the application handle it. */ return 'W'; /* Let the application handle it. */
} }
......
...@@ -117,9 +117,9 @@ ...@@ -117,9 +117,9 @@
/* The definition of _GL_WARN_ON_USE is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */
#if @GNULIB_GETHOSTNAME@ /* Hide some function declarations from <winsock2.h>. */
/* Get all possible declarations of gethostname(). */
# if @UNISTD_H_HAVE_WINSOCK2_H@ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@
# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H
# if !(defined __cplusplus && defined GNULIB_NAMESPACE) # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef socket # undef socket
...@@ -190,7 +190,6 @@ ...@@ -190,7 +190,6 @@
"select() used without including <sys/select.h>"); "select() used without including <sys/select.h>");
# endif # endif
# endif # endif
# endif
#endif #endif
......
# getopt.m4 serial 35 # getopt.m4 serial 38
dnl Copyright (C) 2002-2006, 2008-2011 Free Software Foundation, Inc. dnl Copyright (C) 2002-2006, 2008-2011 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it, dnl gives unlimited permission to copy and/or distribute it,
...@@ -89,15 +89,15 @@ AC_DEFUN([gl_GETOPT_CHECK_HEADERS], ...@@ -89,15 +89,15 @@ AC_DEFUN([gl_GETOPT_CHECK_HEADERS],
AC_CACHE_CHECK([whether getopt is POSIX compatible], AC_CACHE_CHECK([whether getopt is POSIX compatible],
[gl_cv_func_getopt_posix], [gl_cv_func_getopt_posix],
[ [
dnl BSD getopt_long uses an incompatible method to reset dnl BSD getopt_long uses an incompatible method to reset option
dnl option processing. Existence of the variable, in and of dnl processing. Existence of the optreset variable, in and of
dnl itself, is not a reason to replace getopt, but knowledge dnl itself, is not a reason to replace getopt, but knowledge
dnl of the variable is needed to determine how to reset and dnl of the variable is needed to determine how to reset and
dnl whether a reset reparses the environment. Solaris dnl whether a reset reparses the environment. Solaris
dnl supports neither optreset nor optind=0, but keeps no state dnl supports neither optreset nor optind=0, but keeps no state
dnl that needs a reset beyond setting optind=1; detect Solaris dnl that needs a reset beyond setting optind=1; detect Solaris
dnl by getopt_clip. dnl by getopt_clip.
AC_COMPILE_IFELSE( AC_LINK_IFELSE(
[AC_LANG_PROGRAM( [AC_LANG_PROGRAM(
[[#include <unistd.h>]], [[#include <unistd.h>]],
[[int *p = &optreset; return optreset;]])], [[int *p = &optreset; return optreset;]])],
...@@ -121,22 +121,20 @@ int ...@@ -121,22 +121,20 @@ int
main () main ()
{ {
{ {
int argc = 0; static char program[] = "program";
char *argv[10]; static char a[] = "-a";
static char foo[] = "foo";
static char bar[] = "bar";
char *argv[] = { program, a, foo, bar, NULL };
int c; int c;
argv[argc++] = "program";
argv[argc++] = "-a";
argv[argc++] = "foo";
argv[argc++] = "bar";
argv[argc] = NULL;
optind = OPTIND_MIN; optind = OPTIND_MIN;
opterr = 0; opterr = 0;
c = getopt (argc, argv, "ab"); c = getopt (4, argv, "ab");
if (!(c == 'a')) if (!(c == 'a'))
return 1; return 1;
c = getopt (argc, argv, "ab"); c = getopt (4, argv, "ab");
if (!(c == -1)) if (!(c == -1))
return 2; return 2;
if (!(optind == 2)) if (!(optind == 2))
...@@ -144,22 +142,20 @@ main () ...@@ -144,22 +142,20 @@ main ()
} }
/* Some internal state exists at this point. */ /* Some internal state exists at this point. */
{ {
int argc = 0; static char program[] = "program";
char *argv[10]; static char donald[] = "donald";
static char p[] = "-p";
static char billy[] = "billy";
static char duck[] = "duck";
static char a[] = "-a";
static char bar[] = "bar";
char *argv[] = { program, donald, p, billy, duck, a, bar, NULL };
int c; int c;
argv[argc++] = "program";
argv[argc++] = "donald";
argv[argc++] = "-p";
argv[argc++] = "billy";
argv[argc++] = "duck";
argv[argc++] = "-a";
argv[argc++] = "bar";
argv[argc] = NULL;
optind = OPTIND_MIN; optind = OPTIND_MIN;
opterr = 0; opterr = 0;
c = getopt (argc, argv, "+abp:q:"); c = getopt (7, argv, "+abp:q:");
if (!(c == -1)) if (!(c == -1))
return 4; return 4;
if (!(strcmp (argv[0], "program") == 0)) if (!(strcmp (argv[0], "program") == 0))
...@@ -181,7 +177,9 @@ main () ...@@ -181,7 +177,9 @@ main ()
} }
/* Detect MacOS 10.5, AIX 7.1 bug. */ /* Detect MacOS 10.5, AIX 7.1 bug. */
{ {
char *argv[3] = { "program", "-ab", NULL }; static char program[] = "program";
static char ab[] = "-ab";
char *argv[3] = { program, ab, NULL };
optind = OPTIND_MIN; optind = OPTIND_MIN;
opterr = 0; opterr = 0;
if (getopt (2, argv, "ab:") != 'a') if (getopt (2, argv, "ab:") != 'a')
...@@ -239,19 +237,22 @@ dnl is ambiguous with environment values that contain newlines. ...@@ -239,19 +237,22 @@ dnl is ambiguous with environment values that contain newlines.
and fails on MacOS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, and fails on MacOS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5,
OSF/1 5.1, Solaris 10. */ OSF/1 5.1, Solaris 10. */
{ {
char *myargv[3]; static char conftest[] = "conftest";
myargv[0] = "conftest"; static char plus[] = "-+";
myargv[1] = "-+"; char *argv[3] = { conftest, plus, NULL };
myargv[2] = 0;
opterr = 0; opterr = 0;
if (getopt (2, myargv, "+a") != '?') if (getopt (2, argv, "+a") != '?')
result |= 1; result |= 1;
} }
/* This code succeeds on glibc 2.8, mingw, /* This code succeeds on glibc 2.8, mingw,
and fails on MacOS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, and fails on MacOS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11,
IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */
{ {
char *argv[] = { "program", "-p", "foo", "bar", NULL }; static char program[] = "program";
static char p[] = "-p";
static char foo[] = "foo";
static char bar[] = "bar";
char *argv[] = { program, p, foo, bar, NULL };
optind = 1; optind = 1;
if (getopt (4, argv, "p::") != 'p') if (getopt (4, argv, "p::") != 'p')
...@@ -265,7 +266,10 @@ dnl is ambiguous with environment values that contain newlines. ...@@ -265,7 +266,10 @@ dnl is ambiguous with environment values that contain newlines.
} }
/* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */
{ {
char *argv[] = { "program", "foo", "-p", NULL }; static char program[] = "program";
static char foo[] = "foo";
static char p[] = "-p";
char *argv[] = { program, foo, p, NULL };
optind = 0; optind = 0;
if (getopt (3, argv, "-p") != 1) if (getopt (3, argv, "-p") != 1)
result |= 16; result |= 16;
...@@ -274,13 +278,26 @@ dnl is ambiguous with environment values that contain newlines. ...@@ -274,13 +278,26 @@ dnl is ambiguous with environment values that contain newlines.
} }
/* This code fails on glibc 2.11. */ /* This code fails on glibc 2.11. */
{ {
char *argv[] = { "program", "-b", "-a", NULL }; static char program[] = "program";
static char b[] = "-b";
static char a[] = "-a";
char *argv[] = { program, b, a, NULL };
optind = opterr = 0; optind = opterr = 0;
if (getopt (3, argv, "+:a:b") != 'b') if (getopt (3, argv, "+:a:b") != 'b')
result |= 64; result |= 64;
else if (getopt (3, argv, "+:a:b") != ':') else if (getopt (3, argv, "+:a:b") != ':')
result |= 64; result |= 64;
} }
/* This code dumps core on glibc 2.14. */
{
static char program[] = "program";
static char w[] = "-W";
static char dummy[] = "dummy";
char *argv[] = { program, w, dummy, NULL };
optind = opterr = 1;
if (getopt (3, argv, "W;") != 'W')
result |= 128;
}
return result; return result;
]])], ]])],
[gl_cv_func_getopt_gnu=yes], [gl_cv_func_getopt_gnu=yes],
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment