diff options
-rw-r--r-- | Demo/pysvr/pysvr.c | 5 | ||||
-rw-r--r-- | Include/pygetopt.h | 17 | ||||
-rw-r--r-- | Modules/main.c | 28 | ||||
-rw-r--r-- | Python/Makefile.in | 2 | ||||
-rw-r--r-- | Python/getopt.c | 49 | ||||
-rwxr-xr-x | configure | 86 | ||||
-rw-r--r-- | configure.in | 16 |
7 files changed, 73 insertions, 130 deletions
diff --git a/Demo/pysvr/pysvr.c b/Demo/pysvr/pysvr.c index d7d755c..99d7b07 100644 --- a/Demo/pysvr/pysvr.c +++ b/Demo/pysvr/pysvr.c @@ -19,6 +19,7 @@ can log in on your machine. Use with caution! #include <netinet/in.h> #include <pthread.h> +#include <getopt.h> /* XXX Umpfh. Python.h defines a typedef destructor, which conflicts with pthread.h. @@ -32,10 +33,6 @@ extern int Py_VerboseFlag; #define PORT 4000 #endif -extern int optind; -extern char *optarg; -extern int getopt(int, char **, char *); - struct workorder { int conn; struct sockaddr_in addr; diff --git a/Include/pygetopt.h b/Include/pygetopt.h new file mode 100644 index 0000000..9c74cbe --- /dev/null +++ b/Include/pygetopt.h @@ -0,0 +1,17 @@ + +#ifndef Py_PYGETOPT_H +#define Py_PYGETOPT_H +#ifdef __cplusplus +extern "C" { +#endif + +extern DL_IMPORT(int) _PyOS_opterr; +extern DL_IMPORT(int) _PyOS_optind; +extern DL_IMPORT(char *) _PyOS_optarg; + +DL_IMPORT(int) _PyOS_GetOpt(int argc, char **argv, char *optstring); + +#ifdef __cplusplus +} +#endif +#endif /* !Py_PYGETOPT_H */ diff --git a/Modules/main.c b/Modules/main.c index b4d7cdf..c508eb6 100644 --- a/Modules/main.c +++ b/Modules/main.c @@ -17,15 +17,11 @@ #define PYTHONHOMEHELP "<prefix>/python2.0" #endif +#include "pygetopt.h" + #define COPYRIGHT \ "Type \"copyright\", \"credits\" or \"license\" for more information." -/* Interface to getopt(): */ -extern int optind; -extern char *optarg; -extern int getopt(); /* PROTO((int, char **, char *)); -- not standardized */ - - /* For Py_GetArgcArgv(); set by main() */ static char **orig_argv; static int orig_argc; @@ -105,16 +101,16 @@ Py_Main(int argc, char **argv) if ((p = getenv("PYTHONUNBUFFERED")) && *p != '\0') unbuffered = 1; - while ((c = getopt(argc, argv, "c:diOStuUvxXhV")) != EOF) { + while ((c = _PyOS_GetOpt(argc, argv, "c:diOStuUvxXhV")) != EOF) { if (c == 'c') { /* -c is the last option; following arguments that look like options are left for the the command to interpret. */ - command = malloc(strlen(optarg) + 2); + command = malloc(strlen(_PyOS_optarg) + 2); if (command == NULL) Py_FatalError( "not enough memory to copy -c argument"); - strcpy(command, optarg); + strcpy(command, _PyOS_optarg); strcat(command, "\n"); break; } @@ -181,10 +177,10 @@ Py_Main(int argc, char **argv) exit(0); } - if (command == NULL && optind < argc && - strcmp(argv[optind], "-") != 0) + if (command == NULL && _PyOS_optind < argc && + strcmp(argv[_PyOS_optind], "-") != 0) { - filename = argv[optind]; + filename = argv[_PyOS_optind]; if (filename != NULL) { if ((fp = fopen(filename, "r")) == NULL) { fprintf(stderr, "%s: can't open file '%s'\n", @@ -253,12 +249,12 @@ Py_Main(int argc, char **argv) if (command != NULL) { - /* Backup optind and force sys.argv[0] = '-c' */ - optind--; - argv[optind] = "-c"; + /* Backup _PyOS_optind and force sys.argv[0] = '-c' */ + _PyOS_optind--; + argv[_PyOS_optind] = "-c"; } - PySys_SetArgv(argc-optind, argv+optind); + PySys_SetArgv(argc-_PyOS_optind, argv+_PyOS_optind); if ((inspect || (command == NULL && filename == NULL)) && isatty(fileno(stdin))) { diff --git a/Python/Makefile.in b/Python/Makefile.in index 597cb20..0e4ca27 100644 --- a/Python/Makefile.in +++ b/Python/Makefile.in @@ -46,7 +46,7 @@ AROBJS= \ marshal.o modsupport.o mystrtoul.o \ pyfpe.o pystate.o pythonrun.o \ structmember.o sysmodule.o \ - traceback.o \ + traceback.o getopt.o \ $(DYNLOADFILE) \ $(LIBOBJS) OBJS= $(AROBJS) sigcheck.o diff --git a/Python/getopt.c b/Python/getopt.c index 8af67fa..d80f607 100644 --- a/Python/getopt.c +++ b/Python/getopt.c @@ -27,48 +27,35 @@ #include <stdio.h> #include <string.h> -#define bool int -#ifndef TRUE -#define TRUE 1 -#endif -#ifndef FALSE -#define FALSE 0 -#endif +int _PyOS_opterr = 1; /* generate error messages */ +int _PyOS_optind = 1; /* index into argv array */ +char *_PyOS_optarg = NULL; /* optional argument */ -bool opterr = TRUE; /* generate error messages */ -int optind = 1; /* index into argv array */ -char * optarg = NULL; /* optional argument */ - - -#ifndef __BEOS__ -int getopt(int argc, char *argv[], char optstring[]) -#else -int getopt(int argc, char *const *argv, const char *optstring) -#endif +int _PyOS_GetOpt(int argc, char **argv, char *optstring) { - static char *opt_ptr = ""; - register char *ptr; - int option; + static char *opt_ptr = ""; + char *ptr; + int option; if (*opt_ptr == '\0') { - if (optind >= argc || argv[optind][0] != '-' || - argv[optind][1] == '\0' /* lone dash */ ) + if (_PyOS_optind >= argc || argv[_PyOS_optind][0] != '-' || + argv[_PyOS_optind][1] == '\0' /* lone dash */ ) return -1; - else if (strcmp(argv[optind], "--") == 0) { - ++optind; + else if (strcmp(argv[_PyOS_optind], "--") == 0) { + ++_PyOS_optind; return -1; } - opt_ptr = &argv[optind++][1]; + opt_ptr = &argv[_PyOS_optind++][1]; } if ( (option = *opt_ptr++) == '\0') - return -1; + return -1; if ((ptr = strchr(optstring, option)) == NULL) { - if (opterr) + if (_PyOS_opterr) fprintf(stderr, "Unknown option: -%c\n", option); return '?'; @@ -76,19 +63,19 @@ int getopt(int argc, char *const *argv, const char *optstring) if (*(ptr + 1) == ':') { if (*opt_ptr != '\0') { - optarg = opt_ptr; + _PyOS_optarg = opt_ptr; opt_ptr = ""; } else { - if (optind >= argc) { - if (opterr) + if (_PyOS_optind >= argc) { + if (_PyOS_opterr) fprintf(stderr, "Argument expected for the -%c option\n", option); return '?'; } - optarg = argv[optind++]; + _PyOS_optarg = argv[_PyOS_optind++]; } } @@ -4839,7 +4839,7 @@ else int main() { /* Ultrix mips cc rejects this. */ -typedef int charset[2]; const charset x; +typedef int charset[2]; const charset x = {0,0}; /* SunOS 4.1.1 cc rejects this. */ char const *const *ccp; char **p; @@ -4914,7 +4914,7 @@ for ac_kw in inline __inline__ __inline; do #include "confdefs.h" int main() { -} $ac_kw foo() { +} int $ac_kw foo() { ; return 0; } EOF if { (eval echo configure:4921: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then @@ -5625,47 +5625,9 @@ done LIBS=$LIBS_SAVE -# check for getopt -echo $ac_n "checking for genuine getopt""... $ac_c" 1>&6 -echo "configure:5631: checking for genuine getopt" >&5 -if eval "test \"`echo '$''{'ac_cv_func_getopt'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test "$cross_compiling" = yes; then - ac_cv_func_getopt=no -else - cat > conftest.$ac_ext <<EOF -#line 5639 "configure" -#include "confdefs.h" -#include <stdio.h> -extern int optind, opterr, getopt(); -extern char* optarg; -int main() { - char* av[] = { "testprog", "parameter", "-fFlag", NULL }; - opterr = 0; - if (getopt(3, av, "f:") == 'f') { exit(1); } - exit(0); -} -EOF -if { (eval echo configure:5651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null -then - ac_cv_func_getopt=yes -else - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_func_getopt=no -fi -rm -fr conftest* -fi - -fi -echo "$ac_t""$ac_cv_func_getopt" 1>&6 -test $ac_cv_func_getopt = no && LIBOBJS="$LIBOBJS getopt.o" - # check whether malloc(0) returns NULL or not echo $ac_n "checking what malloc(0) returns""... $ac_c" 1>&6 -echo "configure:5669: checking what malloc(0) returns" >&5 +echo "configure:5631: checking what malloc(0) returns" >&5 if eval "test \"`echo '$''{'ac_cv_malloc_zero'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5673,7 +5635,7 @@ else { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 5677 "configure" +#line 5639 "configure" #include "confdefs.h" #include <stdio.h> #ifdef HAVE_STDLIB @@ -5692,7 +5654,7 @@ main() { exit(0); } EOF -if { (eval echo configure:5696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:5658: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_malloc_zero=nonnull else @@ -5718,17 +5680,17 @@ fi # check for wchar.h ac_safe=`echo "wchar.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for wchar.h""... $ac_c" 1>&6 -echo "configure:5722: checking for wchar.h" >&5 +echo "configure:5684: checking for wchar.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 5727 "configure" +#line 5689 "configure" #include "confdefs.h" #include <wchar.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:5732: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:5694: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -5758,12 +5720,12 @@ fi # check for usable wchar_t usable_wchar_t="unkown" echo $ac_n "checking for usable wchar_t""... $ac_c" 1>&6 -echo "configure:5762: checking for usable wchar_t" >&5 +echo "configure:5724: checking for usable wchar_t" >&5 if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 5767 "configure" +#line 5729 "configure" #include "confdefs.h" #include "wchar.h" @@ -5777,7 +5739,7 @@ main() { } EOF -if { (eval echo configure:5781: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:5743: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF #define HAVE_USABLE_WCHAR_T 1 @@ -5796,14 +5758,14 @@ echo "$ac_t""$usable_wchar_t" 1>&6 # check for endianness echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:5800: checking whether byte ordering is bigendian" >&5 +echo "configure:5762: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext <<EOF -#line 5807 "configure" +#line 5769 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/param.h> @@ -5814,11 +5776,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:5818: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:5780: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext <<EOF -#line 5822 "configure" +#line 5784 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/param.h> @@ -5829,7 +5791,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:5833: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:5795: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -5849,7 +5811,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 5853 "configure" +#line 5815 "configure" #include "confdefs.h" main () { /* Are we little or big endian? From Harbison&Steele. */ @@ -5862,7 +5824,7 @@ main () { exit (u.c[sizeof (long) - 1] == 1); } EOF -if { (eval echo configure:5866: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:5828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -5889,7 +5851,7 @@ fi # Check whether right shifting a negative integer extends the sign bit # or fills with zeros (like the Cray J90, according to Tim Peters). echo $ac_n "checking whether right shift extends the sign bit""... $ac_c" 1>&6 -echo "configure:5893: checking whether right shift extends the sign bit" >&5 +echo "configure:5855: checking whether right shift extends the sign bit" >&5 if eval "test \"`echo '$''{'ac_cv_rshift_extends_sign'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5898,7 +5860,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 5902 "configure" +#line 5864 "configure" #include "confdefs.h" int main() @@ -5907,7 +5869,7 @@ int main() } EOF -if { (eval echo configure:5911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:5873: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_rshift_extends_sign=yes else @@ -5939,12 +5901,12 @@ cat >> confdefs.h <<\EOF #endif EOF echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 -echo "configure:5943: checking for socklen_t" >&5 +echo "configure:5905: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 5948 "configure" +#line 5910 "configure" #include "confdefs.h" #include <sys/types.h> #if STDC_HEADERS @@ -5973,7 +5935,7 @@ fi echo $ac_n "checking for Modules/Setup""... $ac_c" 1>&6 -echo "configure:5977: checking for Modules/Setup" >&5 +echo "configure:5939: checking for Modules/Setup" >&5 if test ! -f Modules/Setup ; then if test ! -d Modules ; then mkdir Modules diff --git a/configure.in b/configure.in index 15e9a3a..f201748 100644 --- a/configure.in +++ b/configure.in @@ -1204,22 +1204,6 @@ LIBS="$LIBS $LIBM" AC_REPLACE_FUNCS(hypot) LIBS=$LIBS_SAVE -# check for getopt -AC_MSG_CHECKING(for genuine getopt) -AC_CACHE_VAL(ac_cv_func_getopt, -[AC_TRY_RUN([#include <stdio.h> -extern int optind, opterr, getopt(); -extern char* optarg; -int main() { - char* av[] = { "testprog", "parameter", "-fFlag", NULL }; - opterr = 0; - if (getopt(3, av, "f:") == 'f') { exit(1); } - exit(0); -}], ac_cv_func_getopt=yes, ac_cv_func_getopt=no, ac_cv_func_getopt=no)])dnl -AC_MSG_RESULT($ac_cv_func_getopt) -test $ac_cv_func_getopt = no && LIBOBJS="$LIBOBJS getopt.o" -AC_SUBST(LIBOBJS)dnl - # check whether malloc(0) returns NULL or not AC_MSG_CHECKING(what malloc(0) returns) AC_CACHE_VAL(ac_cv_malloc_zero, |