From 1ab2de5bddd8db1c7a16a66699d7bb344af517bd Mon Sep 17 00:00:00 2001 From: matz Date: Fri, 30 Apr 1999 06:19:21 +0000 Subject: ipv6 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_3@452 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 13 + configure | 626 +++++++++++++++++--------------------- ext/socket/depend | 2 + ext/socket/extconf.rb | 227 ++++++++++++++ ext/socket/socket.c | 811 ++++++++++++++++++++++++++++++++++++++------------ lib/ftplib.rb | 81 ++++- lib/mkmf.rb | 7 +- parse.c | 348 +++++++++------------- 8 files changed, 1347 insertions(+), 768 deletions(-) diff --git a/ChangeLog b/ChangeLog index bdcebf1277..6ffc7e9cad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +Fri Apr 30 15:24:58 1999 Yukihiro Matsumoto + + * ext/socket/addrinfo.h: compatibility hack for ipv4. + + * ext/socket/socket.c: itojun's ipv6 patches applied. + + * ext/socket/extconf.rb: detect ipv6 features based on itojun's + ipv6 patches. + + * ext/extmk.rb.in (enable_config): can handle --enable-xxx now. + + * lib/mkmf.rb (enable_config): ditto. + Tue Apr 27 14:11:45 1999 Yukihiro Matsumoto * parse.y (fname): lazy workaround for keywords did not work well. diff --git a/configure b/configure index d2a11e95cf..3524f7b03b 100644 --- a/configure +++ b/configure @@ -1,7 +1,7 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.13 +# Generated automatically using autoconf version 2.12 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # # This configure script is free software; the Free Software Foundation @@ -61,7 +61,6 @@ mandir='${prefix}/man' # Initialize some other variables. subdirs= MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. ac_max_here_lines=12 @@ -345,7 +344,7 @@ EOF verbose=yes ;; -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.13" + echo "configure generated by autoconf version 2.12" exit 0 ;; -with-* | --with-*) @@ -515,11 +514,9 @@ ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross -ac_exeext= -ac_objext=o if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then @@ -584,26 +581,26 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # Make sure we can run config.sub. -if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : +if $ac_config_sub sun4 >/dev/null 2>&1; then : else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:593: checking host system type" >&5 +echo "configure:590: checking host system type" >&5 host_alias=$host case "$host_alias" in NONE) case $nonopt in NONE) - if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : + if host_alias=`$ac_config_guess`; then : else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } fi ;; *) host_alias=$nonopt ;; esac ;; esac -host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` +host=`$ac_config_sub $host_alias` host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` @@ -620,7 +617,7 @@ fi if test "$fat_binary" = yes ; then echo $ac_n "checking target architecture""... $ac_c" 1>&6 -echo "configure:624: checking target architecture" >&5 +echo "configure:621: checking target architecture" >&5 case "$host_os" in rhapsody*) @@ -685,16 +682,15 @@ test "$program_transform_name" = "" && program_transform_name="s,x,x," # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:689: checking for $ac_word" >&5 +echo "configure:686: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="gcc" @@ -715,17 +711,16 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:719: checking for $ac_word" >&5 +echo "configure:715: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" ac_prog_rejected=no - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do + for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then @@ -760,61 +755,25 @@ else echo "$ac_t""no" 1>&6 fi - if test -z "$CC"; then - case "`uname -s`" in - *win32* | *WIN32*) - # Extract the first word of "cl", so it can be a program name with args. -set dummy cl; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:770: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="cl" - break - fi - done - IFS="$ac_save_ifs" -fi -fi -CC="$ac_cv_prog_CC" -if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 -else - echo "$ac_t""no" 1>&6 -fi - ;; - esac - fi test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:802: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:763: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross -cat > conftest.$ac_ext << EOF - -#line 813 "configure" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:777: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -828,24 +787,18 @@ else ac_cv_prog_cc_works=no fi rm -fr conftest* -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:844: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:797: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:849: checking whether we are using GNU C" >&5 +echo "configure:802: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -854,7 +807,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:858: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:811: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -865,15 +818,11 @@ echo "$ac_t""$ac_cv_prog_gcc" 1>&6 if test $ac_cv_prog_gcc = yes; then GCC=yes -else - GCC= -fi - -ac_test_CFLAGS="${CFLAGS+set}" -ac_save_CFLAGS="$CFLAGS" -CFLAGS= -echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:877: checking whether ${CC-cc} accepts -g" >&5 + ac_test_CFLAGS="${CFLAGS+set}" + ac_save_CFLAGS="$CFLAGS" + CFLAGS= + echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:826: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -888,24 +837,20 @@ rm -f conftest* fi echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 -if test "$ac_test_CFLAGS" = set; then - CFLAGS="$ac_save_CFLAGS" -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then + if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" + elif test $ac_cv_prog_cc_g = yes; then CFLAGS="-g -O2" else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then CFLAGS="-O2" - else - CFLAGS= fi +else + GCC= + test "${CFLAGS+set}" = set || CFLAGS="-g" fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:909: checking how to run the C preprocessor" >&5 +echo "configure:854: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -920,14 +865,14 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:930: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +{ (eval echo configure:875: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then : else @@ -937,31 +882,14 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:947: \"$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 - : -else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - CPP="${CC-cc} -nologo -E" - cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:964: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +{ (eval echo configure:892: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then : else @@ -973,8 +901,6 @@ else fi rm -f conftest* fi -rm -f conftest* -fi rm -f conftest* ac_cv_prog_CPP="$CPP" fi @@ -986,13 +912,13 @@ echo "$ac_t""$CPP" 1>&6 if test $ac_cv_prog_gcc = yes; then echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 -echo "configure:990: checking whether ${CC-cc} needs -traditional" >&5 +echo "configure:916: checking whether ${CC-cc} needs -traditional" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_pattern="Autoconf.*'x'" cat > conftest.$ac_ext < Autoconf TIOCGETP @@ -1010,7 +936,7 @@ rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat > conftest.$ac_ext < Autoconf TCGETA @@ -1036,16 +962,15 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1040: checking for $ac_word" >&5 +echo "configure:966: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_YACC="$ac_prog" @@ -1069,16 +994,15 @@ test -n "$YACC" || YACC="yacc" # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1073: checking for $ac_word" >&5 +echo "configure:998: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_RANLIB="ranlib" @@ -1102,16 +1026,15 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1106: checking for $ac_word" >&5 +echo "configure:1030: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" - ac_dummy="$PATH" - for ac_dir in $ac_dummy; do + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_AR="$ac_prog" @@ -1139,30 +1062,28 @@ test -n "$AR" || AR="ar" # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1148: checking for a BSD compatible install" >&5 +echo "configure:1070: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else - IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do + for ac_prog in ginstall installbsd scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. + # OSF/1 installbsd also uses dspmsg, but is usable. : else ac_cv_path_install="$ac_dir/$ac_prog -c" @@ -1192,12 +1113,10 @@ echo "$ac_t""$INSTALL" 1>&6 # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' - test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:1201: checking whether ln -s works" >&5 +echo "configure:1120: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1218,7 +1137,7 @@ else fi echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 -echo "configure:1222: checking whether ${MAKE-make} sets \${MAKE}" >&5 +echo "configure:1141: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1248,18 +1167,18 @@ fi # checks for UNIX variants that set C preprocessor variables ac_safe=`echo "minix/config.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for minix/config.h""... $ac_c" 1>&6 -echo "configure:1252: checking for minix/config.h" >&5 +echo "configure:1171: checking for minix/config.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 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1262: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +{ (eval echo configure:1181: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" @@ -1297,7 +1216,7 @@ fi echo $ac_n "checking size of int""... $ac_c" 1>&6 -echo "configure:1301: checking size of int" >&5 +echo "configure:1220: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1305,7 +1224,7 @@ else { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < main() @@ -1316,7 +1235,7 @@ main() exit(0); } EOF -if { (eval echo configure:1320: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1239: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_int=`cat conftestval` else @@ -1336,7 +1255,7 @@ EOF echo $ac_n "checking size of short""... $ac_c" 1>&6 -echo "configure:1340: checking size of short" >&5 +echo "configure:1259: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1344,7 +1263,7 @@ else { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < main() @@ -1355,7 +1274,7 @@ main() exit(0); } EOF -if { (eval echo configure:1359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_short=`cat conftestval` else @@ -1375,7 +1294,7 @@ EOF echo $ac_n "checking size of long""... $ac_c" 1>&6 -echo "configure:1379: checking size of long" >&5 +echo "configure:1298: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1383,7 +1302,7 @@ else { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < main() @@ -1394,7 +1313,7 @@ main() exit(0); } EOF -if { (eval echo configure:1398: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1317: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long=`cat conftestval` else @@ -1414,7 +1333,7 @@ EOF echo $ac_n "checking size of void*""... $ac_c" 1>&6 -echo "configure:1418: checking size of void*" >&5 +echo "configure:1337: checking size of void*" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_voidp'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1422,7 +1341,7 @@ else { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < main() @@ -1433,7 +1352,7 @@ main() exit(0); } EOF -if { (eval echo configure:1437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_voidp=`cat conftestval` else @@ -1453,7 +1372,7 @@ EOF echo $ac_n "checking size of float""... $ac_c" 1>&6 -echo "configure:1457: checking size of float" >&5 +echo "configure:1376: checking size of float" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_float'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1461,7 +1380,7 @@ else { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < main() @@ -1472,7 +1391,7 @@ main() exit(0); } EOF -if { (eval echo configure:1476: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1395: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_float=`cat conftestval` else @@ -1492,7 +1411,7 @@ EOF echo $ac_n "checking size of double""... $ac_c" 1>&6 -echo "configure:1496: checking size of double" >&5 +echo "configure:1415: checking size of double" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_double'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1500,7 +1419,7 @@ else { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < main() @@ -1511,7 +1430,7 @@ main() exit(0); } EOF -if { (eval echo configure:1515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_double=`cat conftestval` else @@ -1532,19 +1451,19 @@ EOF echo $ac_n "checking for prototypes""... $ac_c" 1>&6 -echo "configure:1536: checking for prototypes" >&5 +echo "configure:1455: checking for prototypes" >&5 if eval "test \"`echo '$''{'rb_cv_have_prototypes'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1467: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_have_prototypes=yes else @@ -1565,19 +1484,19 @@ EOF fi echo $ac_n "checking token paste string""... $ac_c" 1>&6 -echo "configure:1569: checking token paste string" >&5 +echo "configure:1488: checking token paste string" >&5 if eval "test \"`echo '$''{'rb_cv_tokenpaste'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1500: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_tokenpaste=ansi else @@ -1603,12 +1522,12 @@ EOF fi echo $ac_n "checking for variable length prototypes and stdarg.h""... $ac_c" 1>&6 -echo "configure:1607: checking for variable length prototypes and stdarg.h" >&5 +echo "configure:1526: checking for variable length prototypes and stdarg.h" >&5 if eval "test \"`echo '$''{'rb_cv_stdarg'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < @@ -1625,7 +1544,7 @@ int main() { return foo(10, "", 3.14); ; return 0; } EOF -if { (eval echo configure:1629: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1548: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_stdarg=yes else @@ -1646,19 +1565,19 @@ EOF fi echo $ac_n "checking for gcc attribute noreturn""... $ac_c" 1>&6 -echo "configure:1650: checking for gcc attribute noreturn" >&5 +echo "configure:1569: checking for gcc attribute noreturn" >&5 if eval "test \"`echo '$''{'rb_cv_have_attr_noreturn'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1581: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_have_attr_noreturn=yes else @@ -1687,7 +1606,7 @@ beos*) ;; *) LIBS="-lm $LIBS";; esac echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 -echo "configure:1691: checking for crypt in -lcrypt" >&5 +echo "configure:1610: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1695,7 +1614,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1734,7 +1653,7 @@ else fi echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 -echo "configure:1738: checking for dlopen in -ldl" >&5 +echo "configure:1657: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1742,7 +1661,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1676: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1781,7 +1700,7 @@ else fi # Dynamic linking for SunOS/Solaris and SYSV echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 -echo "configure:1785: checking for shl_load in -ldld" >&5 +echo "configure:1704: checking for shl_load in -ldld" >&5 ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1789,7 +1708,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldld $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1723: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1828,7 +1747,7 @@ else fi # Dynamic linking for HP-UX echo $ac_n "checking for setlocale in -lxpg4""... $ac_c" 1>&6 -echo "configure:1832: checking for setlocale in -lxpg4" >&5 +echo "configure:1751: checking for setlocale in -lxpg4" >&5 ac_lib_var=`echo xpg4'_'setlocale | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1836,7 +1755,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lxpg4 $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1880,12 +1799,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1884: checking for $ac_hdr that defines DIR" >&5 +echo "configure:1803: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -1893,7 +1812,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:1897: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1816: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -1918,7 +1837,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:1922: checking for opendir in -ldir" >&5 +echo "configure:1841: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1926,7 +1845,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1959,7 +1878,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:1963: checking for opendir in -lx" >&5 +echo "configure:1882: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1967,7 +1886,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2001,12 +1920,12 @@ fi fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:2005: checking for ANSI C header files" >&5 +echo "configure:1924: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2014,8 +1933,8 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2018: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +{ (eval echo configure:1937: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* ac_cv_header_stdc=yes @@ -2031,7 +1950,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -2049,7 +1968,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -2070,7 +1989,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -2081,7 +2000,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:2085: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then : else @@ -2110,18 +2029,18 @@ for ac_hdr in stdlib.h unistd.h limits.h sys/file.h sys/ioctl.h pwd.h \ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2114: checking for $ac_hdr" >&5 +echo "configure:2033: checking for $ac_hdr" >&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 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2124: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +{ (eval echo configure:2043: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" @@ -2148,12 +2067,12 @@ done echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:2152: checking for uid_t in sys/types.h" >&5 +echo "configure:2071: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -2182,12 +2101,12 @@ EOF fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 -echo "configure:2186: checking for size_t" >&5 +echo "configure:2105: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -2196,7 +2115,7 @@ else #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + egrep "size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_size_t=yes else @@ -2215,12 +2134,12 @@ EOF fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:2219: checking for st_blksize in struct stat" >&5 +echo "configure:2138: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2228,7 +2147,7 @@ int main() { struct stat s; s.st_blksize; ; return 0; } EOF -if { (eval echo configure:2232: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2151: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_blksize=yes else @@ -2250,12 +2169,12 @@ fi save_LIBOJBS="$LIBOBJS" echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:2254: checking for st_blocks in struct stat" >&5 +echo "configure:2173: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_blocks'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2263,7 +2182,7 @@ int main() { struct stat s; s.st_blocks; ; return 0; } EOF -if { (eval echo configure:2267: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2186: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_blocks=yes else @@ -2282,17 +2201,17 @@ if test $ac_cv_struct_st_blocks = yes; then EOF else - LIBOBJS="$LIBOBJS fileblocks.${ac_objext}" + LIBOBJS="$LIBOBJS fileblocks.o" fi LIBOBJS="$save_LIBOBJS" echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:2291: checking for st_rdev in struct stat" >&5 +echo "configure:2210: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2300,7 +2219,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:2304: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2223: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -2322,7 +2241,7 @@ fi echo $ac_n "checking type of array argument to getgroups""... $ac_c" 1>&6 -echo "configure:2326: checking type of array argument to getgroups" >&5 +echo "configure:2245: checking type of array argument to getgroups" >&5 if eval "test \"`echo '$''{'ac_cv_type_getgroups'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2330,7 +2249,7 @@ else ac_cv_type_getgroups=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_type_getgroups=gid_t else @@ -2369,7 +2288,7 @@ fi if test $ac_cv_type_getgroups = cross; then cat > conftest.$ac_ext < EOF @@ -2393,12 +2312,12 @@ EOF echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:2397: checking return type of signal handlers" >&5 +echo "configure:2316: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2415,7 +2334,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:2419: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2338: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -2436,19 +2355,19 @@ EOF # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 -echo "configure:2440: checking for working alloca.h" >&5 +echo "configure:2359: checking for working alloca.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF -if { (eval echo configure:2452: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* ac_cv_header_alloca_h=yes else @@ -2469,30 +2388,25 @@ EOF fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 -echo "configure:2473: checking for alloca" >&5 +echo "configure:2392: checking for alloca" >&5 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < -# define alloca _alloca +# if HAVE_ALLOCA_H +# include # else -# if HAVE_ALLOCA_H -# include -# else -# ifdef _AIX +# ifdef _AIX #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); -# endif # endif # endif # endif @@ -2502,7 +2416,7 @@ int main() { char *p = (char *) alloca(1); ; return 0; } EOF -if { (eval echo configure:2506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2420: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* ac_cv_func_alloca_works=yes else @@ -2527,19 +2441,19 @@ if test $ac_cv_func_alloca_works = no; then # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. - ALLOCA=alloca.${ac_objext} + ALLOCA=alloca.o cat >> confdefs.h <<\EOF #define C_ALLOCA 1 EOF echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 -echo "configure:2538: checking whether alloca needs Cray hooks" >&5 +echo "configure:2452: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2568: checking for $ac_func" >&5 +echo "configure:2482: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -2619,7 +2533,7 @@ done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 -echo "configure:2623: checking stack direction for C alloca" >&5 +echo "configure:2537: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2627,7 +2541,7 @@ else ac_cv_c_stack_direction=0 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2564: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else @@ -2668,12 +2582,12 @@ EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 -echo "configure:2672: checking for pid_t" >&5 +echo "configure:2586: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -2682,7 +2596,7 @@ else #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "(^|[^a-zA-Z_0-9])pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + egrep "pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_pid_t=yes else @@ -2702,18 +2616,18 @@ fi ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for vfork.h""... $ac_c" 1>&6 -echo "configure:2706: checking for vfork.h" >&5 +echo "configure:2620: checking for vfork.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 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2716: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +{ (eval echo configure:2630: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" @@ -2737,18 +2651,18 @@ else fi echo $ac_n "checking for working vfork""... $ac_c" 1>&6 -echo "configure:2741: checking for working vfork" >&5 +echo "configure:2655: checking for working vfork" >&5 if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then echo $ac_n "checking for vfork""... $ac_c" 1>&6 -echo "configure:2747: checking for vfork" >&5 +echo "configure:2661: checking for vfork" >&5 if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_vfork=yes" else @@ -2790,10 +2704,9 @@ else echo "$ac_t""no" 1>&6 fi -ac_cv_func_vfork_works=$ac_cv_func_vfork else cat > conftest.$ac_ext < @@ -2888,7 +2801,7 @@ main() { } } EOF -if { (eval echo configure:2892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2805: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_func_vfork_works=yes else @@ -2911,7 +2824,7 @@ EOF fi echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 -echo "configure:2915: checking for 8-bit clean memcmp" >&5 +echo "configure:2828: checking for 8-bit clean memcmp" >&5 if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2919,7 +2832,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2846: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_func_memcmp_clean=yes else @@ -2944,19 +2857,19 @@ fi fi echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6 -test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" +test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.o" for ac_func in dup2 memmove mkdir strcasecmp strerror strftime\ strchr strstr strtoul strdup crypt flock vsnprintf\ fnmatch isinf isnan finite do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2955: checking for $ac_func" >&5 +echo "configure:2868: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2896: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3000,7 +2913,7 @@ EOF else echo "$ac_t""no" 1>&6 -LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}" +LIBOBJS="$LIBOBJS ${ac_func}.o" fi done @@ -3012,12 +2925,12 @@ for ac_func in fmod killpg drand48 random wait4 waitpid syscall getcwd\ dlopen sigprocmask sigaction _setjmp setsid do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3016: checking for $ac_func" >&5 +echo "configure:2929: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3065,12 +2978,12 @@ fi done echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 -echo "configure:3069: checking whether struct tm is in sys/time.h or time.h" >&5 +echo "configure:2982: checking whether struct tm is in sys/time.h or time.h" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -3078,7 +2991,7 @@ int main() { struct tm *tp; tp->tm_sec; ; return 0; } EOF -if { (eval echo configure:3082: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2995: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else @@ -3099,12 +3012,12 @@ EOF fi echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6 -echo "configure:3103: checking for tm_zone in struct tm" >&5 +echo "configure:3016: checking for tm_zone in struct tm" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tm_zone'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_cv_struct_tm> @@ -3112,7 +3025,7 @@ int main() { struct tm tm; tm.tm_zone; ; return 0; } EOF -if { (eval echo configure:3116: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3029: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm_zone=yes else @@ -3132,12 +3045,12 @@ EOF else echo $ac_n "checking for tzname""... $ac_c" 1>&6 -echo "configure:3136: checking for tzname" >&5 +echo "configure:3049: checking for tzname" >&5 if eval "test \"`echo '$''{'ac_cv_var_tzname'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifndef tzname /* For SGI. */ @@ -3147,7 +3060,7 @@ int main() { atoi(*tzname); ; return 0; } EOF -if { (eval echo configure:3151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* ac_cv_var_tzname=yes else @@ -3170,14 +3083,14 @@ fi if test "$ac_cv_func_strftime" = no; then cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3094: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* cat >> confdefs.h <<\EOF #define HAVE_DAYLIGHT 1 @@ -3197,7 +3110,7 @@ EOF else echo $ac_n "checking for BSD signal semantics""... $ac_c" 1>&6 -echo "configure:3201: checking for BSD signal semantics" >&5 +echo "configure:3114: checking for BSD signal semantics" >&5 if eval "test \"`echo '$''{'rb_cv_bsd_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3205,7 +3118,7 @@ else rb_cv_bsd_signal=no else cat > conftest.$ac_ext < @@ -3227,7 +3140,7 @@ main() } EOF -if { (eval echo configure:3231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then rb_cv_bsd_signal=yes else @@ -3251,7 +3164,7 @@ EOF fi echo $ac_n "checking whether getpgrp takes no argument""... $ac_c" 1>&6 -echo "configure:3255: checking whether getpgrp takes no argument" >&5 +echo "configure:3168: checking whether getpgrp takes no argument" >&5 if eval "test \"`echo '$''{'ac_cv_func_getpgrp_void'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3259,7 +3172,7 @@ else { echo "configure: error: cannot check getpgrp if cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_func_getpgrp_void=yes else @@ -3338,7 +3251,7 @@ EOF fi echo $ac_n "checking whether setpgrp takes no argument""... $ac_c" 1>&6 -echo "configure:3342: checking whether setpgrp takes no argument" >&5 +echo "configure:3255: checking whether setpgrp takes no argument" >&5 if eval "test \"`echo '$''{'ac_cv_func_setpgrp_void'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3346,13 +3259,9 @@ else { echo "configure: error: cannot check setpgrp if cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < -#endif - /* * If this system has a BSD-style setpgrp, which takes arguments, exit * successfully. @@ -3366,7 +3275,7 @@ main() } EOF -if { (eval echo configure:3370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_func_setpgrp_void=no else @@ -3391,7 +3300,7 @@ fi echo $ac_n "checking for working strtod""... $ac_c" 1>&6 -echo "configure:3395: checking for working strtod" >&5 +echo "configure:3304: checking for working strtod" >&5 if eval "test \"`echo '$''{'rb_cv_func_strtod'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3399,7 +3308,7 @@ else rb_cv_func_strtod=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3342: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then rb_cv_func_strtod=yes else @@ -3447,14 +3356,14 @@ echo "$ac_t""$rb_cv_func_strtod" 1>&6 test $rb_cv_func_strtod = no && LIBOBJS="$LIBOBJS strtod.o" echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:3451: checking whether byte ordering is bigendian" >&5 +echo "configure:3360: 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 < #include @@ -3465,11 +3374,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3469: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3378: \"$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 < #include @@ -3480,7 +3389,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:3484: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3393: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -3500,7 +3409,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 <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3426: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -3537,12 +3446,12 @@ EOF fi echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:3541: checking for working const" >&5 +echo "configure:3450: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3504: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -3612,14 +3521,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:3616: checking whether char is unsigned" >&5 +echo "configure:3525: checking whether char is unsigned" >&5 if eval "test \"`echo '$''{'ac_cv_c_char_unsigned'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$GCC" = yes; then # GCC predefines this symbol on systems where it applies. cat > conftest.$ac_ext <&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3564: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_c_char_unsigned=yes else @@ -3676,7 +3585,7 @@ fi echo $ac_n "checking whether right shift preserve sign bit""... $ac_c" 1>&6 -echo "configure:3680: checking whether right shift preserve sign bit" >&5 +echo "configure:3589: checking whether right shift preserve sign bit" >&5 if eval "test \"`echo '$''{'rb_cv_rshift_sign'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3684,7 +3593,7 @@ else rb_cv_rshift_sign=yes else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then rb_cv_rshift_sign=yes else @@ -3724,19 +3633,19 @@ EOF fi echo $ac_n "checking count field in FILE structures""... $ac_c" 1>&6 -echo "configure:3728: checking count field in FILE structures" >&5 +echo "configure:3637: checking count field in FILE structures" >&5 if eval "test \"`echo '$''{'rb_cv_fcnt'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { FILE *f = stdin; f->_cnt = 0; ; return 0; } EOF -if { (eval echo configure:3740: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3649: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_fcnt="_cnt" else @@ -3746,14 +3655,14 @@ fi rm -f conftest* if test "$rb_cv_fcnt" = ""; then cat > conftest.$ac_ext < int main() { FILE *f = stdin; f->__cnt = 0; ; return 0; } EOF -if { (eval echo configure:3757: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3666: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_fcnt="__cnt" else @@ -3764,14 +3673,14 @@ rm -f conftest* fi if test "$rb_cv_fcnt" = ""; then cat > conftest.$ac_ext < int main() { FILE *f = stdin; f->_r = 0; ; return 0; } EOF -if { (eval echo configure:3775: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3684: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_fcnt="_r" else @@ -3782,14 +3691,14 @@ rm -f conftest* fi if test "$rb_cv_fcnt" = ""; then cat > conftest.$ac_ext < int main() { FILE *f = stdin; f->readCount = 0; ; return 0; } EOF -if { (eval echo configure:3793: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3702: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_fcnt="readCount" else @@ -3800,14 +3709,14 @@ rm -f conftest* fi if test "$rb_cv_fcnt" = ""; then cat > conftest.$ac_ext < int main() { FILE *f = stdin; f->_rcount = 0; ; return 0; } EOF -if { (eval echo configure:3811: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3720: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_fcnt="_rcount" else @@ -3873,7 +3782,7 @@ fi case "$host_os" in linux*) echo $ac_n "checking whether ELF binaries are produced""... $ac_c" 1>&6 -echo "configure:3877: checking whether ELF binaries are produced" >&5 +echo "configure:3786: checking whether ELF binaries are produced" >&5 if eval "test \"`echo '$''{'rb_cv_binary_elf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3881,7 +3790,7 @@ else rb_cv_binary_elf=yes else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then rb_cv_binary_elf=yes else @@ -3931,7 +3840,7 @@ STATIC= if test "$with_dln_a_out" != yes; then rb_cv_dlopen=unknown echo $ac_n "checking whether OS depend dynamic link works""... $ac_c" 1>&6 -echo "configure:3935: checking whether OS depend dynamic link works" >&5 +echo "configure:3844: checking whether OS depend dynamic link works" >&5 if test "$GCC" = yes; then case "$host_os" in nextstep*) ;; @@ -4041,12 +3950,12 @@ if test "$ac_cv_header_a_out_h" = yes; then if test "$with_dln_a_out" = yes || test "$rb_cv_dlopen" = unknown; then cat confdefs.h > config.h echo $ac_n "checking whether matz's dln works""... $ac_c" 1>&6 -echo "configure:4045: checking whether matz's dln works" >&5 +echo "configure:3954: checking whether matz's dln works" >&5 if eval "test \"`echo '$''{'rb_cv_dln_a_out'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3969: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_dln_a_out=yes else @@ -4163,7 +4072,7 @@ fi case "$host_os" in human*) echo $ac_n "checking for _harderr in -lsignal""... $ac_c" 1>&6 -echo "configure:4167: checking for _harderr in -lsignal" >&5 +echo "configure:4076: checking for _harderr in -lsignal" >&5 ac_lib_var=`echo signal'_'_harderr | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4171,7 +4080,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsignal $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4095: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4210,7 +4119,7 @@ else fi echo $ac_n "checking for hmemset in -lhmem""... $ac_c" 1>&6 -echo "configure:4214: checking for hmemset in -lhmem" >&5 +echo "configure:4123: checking for hmemset in -lhmem" >&5 ac_lib_var=`echo hmem'_'hmemset | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -4218,7 +4127,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lhmem $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4142: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -4259,12 +4168,12 @@ fi for ac_func in select do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4263: checking for $ac_func" >&5 +echo "configure:4172: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4200: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4312,7 +4221,7 @@ fi done echo $ac_n "checking whether PD libc _dtos18 fail to convert big number""... $ac_c" 1>&6 -echo "configure:4316: checking whether PD libc _dtos18 fail to convert big number" >&5 +echo "configure:4225: checking whether PD libc _dtos18 fail to convert big number" >&5 if eval "test \"`echo '$''{'rb_cv_missing__dtos18'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4320,7 +4229,7 @@ else rb_cv_missing__dtos18=no else cat > conftest.$ac_ext < @@ -4332,7 +4241,7 @@ main () } EOF -if { (eval echo configure:4336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4245: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then rb_cv_missing__dtos18=yes else @@ -4354,7 +4263,7 @@ EOF fi echo $ac_n "checking whether PD libc fconvert fail to round""... $ac_c" 1>&6 -echo "configure:4358: checking whether PD libc fconvert fail to round" >&5 +echo "configure:4267: checking whether PD libc fconvert fail to round" >&5 if eval "test \"`echo '$''{'rb_cv_missing_fconvert'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -4362,7 +4271,7 @@ else rb_cv_missing_fconvert=no else cat > conftest.$ac_ext < @@ -4375,7 +4284,7 @@ main () } EOF -if { (eval echo configure:4379: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4288: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then rb_cv_missing_fconvert=yes else @@ -4587,7 +4496,7 @@ EOF # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in + case `(ac_space=' '; set) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). @@ -4666,7 +4575,7 @@ do echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.13" + echo "$CONFIG_STATUS generated by autoconf version 2.12" exit 0 ;; -help | --help | --hel | --he | --h) echo "\$ac_cs_usage"; exit 0 ;; @@ -4686,11 +4595,9 @@ sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF $ac_vpsub $extrasub -s%@SHELL@%$SHELL%g s%@CFLAGS@%$CFLAGS%g s%@CPPFLAGS@%$CPPFLAGS%g s%@CXXFLAGS@%$CXXFLAGS%g -s%@FFLAGS@%$FFLAGS%g s%@DEFS@%$DEFS%g s%@LDFLAGS@%$LDFLAGS%g s%@LIBS@%$LIBS%g @@ -4723,7 +4630,6 @@ s%@YACC@%$YACC%g s%@RANLIB@%$RANLIB%g s%@AR@%$AR%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g -s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g s%@INSTALL_DATA@%$INSTALL_DATA%g s%@LN_S@%$LN_S%g s%@SET_MAKE@%$SET_MAKE%g diff --git a/ext/socket/depend b/ext/socket/depend index 6e8c3b7d97..ee405e9cd1 100644 --- a/ext/socket/depend +++ b/ext/socket/depend @@ -1 +1,3 @@ socket.o : socket.c $(hdrdir)/ruby.h $(hdrdir)/config.h $(hdrdir)/defines.h $(hdrdir)/rubyio.h $(hdrdir)/rubysig.h + +.PATH: $(hdrdir)/missing diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb index 5b3986735c..5e059a425f 100644 --- a/ext/socket/extconf.rb +++ b/ext/socket/extconf.rb @@ -1,5 +1,8 @@ require 'mkmf' $LDFLAGS = "-L/usr/local/lib" if File.directory?("/usr/local/lib") +$CFLAGS ||= "" +$CFLAGS+=" -Dss_family=__ss_family -Dss_len=__ss_len" + case PLATFORM when /mswin32/ test_func = "WSACleanup" @@ -17,6 +20,230 @@ else have_library("nsl", "t_open") have_library("socket", "socket") end + +$ipv6 = false +if enable_config("ipv6", "yes") + if try_run(< +#include +main() +{ + exit(0); + if (socket(AF_INET6, SOCK_STREAM, 0) < 0) + exit(1); + else + exit(0); +} +EOF + $CFLAGS+=" -DENABLE_IPV6" + $ipv6 = true + end +end + +$ipv6type = nil +$ipv6lib = nil +$ipv6libdir = nil +if $ipv6 + if egrep_cpp("yes", < +#ifdef IPV6_INRIA_VERSION +yes +#endif +EOF + $ipv6type = "inria" + $CFLAGS="-DINET6 "+$CFLAGS + elsif egrep_cpp("yes", < +#ifdef __KAME__ +yes +#endif +EOF + $ipv6type = "kame" + $ipv6lib="inet6" + $ipv6libdir="/usr/local/v6/lib" + $CFLAGS="-DINET6 "+$CFLAGS + elsif File.directory? "/usr/inet6" + $ipv6type = "linux" + $ipv6lib="inet6" + $ipv6libdir="/usr/inet6/lib" + $CFLAGS="-DINET6 -I/usr/inet6/include "+$CFLAGS + elsif egrep_cpp("yes", < +#ifdef _TOSHIBA_INET6 +yes +#endif +EOF + $ipv6type = "toshiba" + $ipv6lib="inet6" + $ipv6libdir="/usr/local/v6/lib" + $CFLAGS="-DINET6 "+$CFLAGS + elsif egrep_cpp("yes", < +#ifdef __V6D__ +yes +#endif +EOF + $ipv6type = "v6d" + $ipv6lib="v6" + $ipv6libdir="/usr/local/v6/lib" + $CFLAGS="-DINET6 -I/usr/local/v6/include "+$CFLAGS + elsif egrep_cpp("yes", < +#ifdef _ZETA_MINAMI_INET6 +yes +#endif +EOF + $ipv6type = "zeta" + $ipv6lib="inet6" + $ipv6libdir="/usr/local/v6/lib" + $CFLAGS="-DINET6 "+$CFLAGS + end + + if $ipv6lib + if File.directory? $ipv6libdir and File.exist? "#{$ipv6libdir}/#{ipv6lib}.a" + $LDFLAGS += " -L#$ipv6libdir -l#$ipv6lib" + else + print < +#include +#include +#include +#include +int +main() +{ + struct sockaddr_in sin; + + sin.sin_len; + return 0; +} +EOF + $CFLAGS="-DHAVE_SIN_LEN "+$CFLAGS +end + + if try_link(< +#include +#include +#include +#include +int +main() +{ + struct sockaddr sa; + + sa.sa_len; + return 0; +} +EOF + $CFLAGS="-DHAVE_SA_LEN "+$CFLAGS +end + +$getaddr_info_ok = false +if try_run(< +#include +#include +#include +#include + +main() +{ + int passive, gaierr, inet4 = 0, inet6 = 0; + struct addrinfo hints, *ai, *aitop; + char straddr[INET6_ADDRSTRLEN], strport[16]; + + for (passive = 0; passive <= 1; passive++) { + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_flags = passive ? AI_PASSIVE : 0; + hints.ai_socktype = SOCK_STREAM; + if ((gaierr = getaddrinfo(NULL, "54321", &hints, &aitop)) != 0) { + (void)gai_strerror(gaierr); + goto bad; + } + for (ai = aitop; ai; ai = ai->ai_next) { + if (ai->ai_addr == NULL || + ai->ai_addrlen == 0 || + getnameinfo(ai->ai_addr, ai->ai_addrlen, + straddr, sizeof(straddr), strport, sizeof(strport), + NI_NUMERICHOST|NI_NUMERICSERV) != 0) { + goto bad; + } + if (strcmp(strport, "54321") != 0) { + goto bad; + } + switch (ai->ai_family) { + case AF_INET: + if (passive) { + if (strcmp(straddr, "0.0.0.0") != 0) { + goto bad; + } + } else { + if (strcmp(straddr, "127.0.0.1") != 0) { + goto bad; + } + } + inet4++; + break; + case AF_INET6: + if (passive) { + if (strcmp(straddr, "::") != 0) { + goto bad; + } + } else { + if (strcmp(straddr, "::1") != 0) { + goto bad; + } + } + inet6++; + break; + case AF_UNSPEC: + goto bad; + break; + default: + /* another family support? */ + break; + } + } + } + + if (inet6 != 2 || inet4 != 2) + goto bad; + + if (aitop) + freeaddrinfo(aitop); + exit(0); + + bad: + if (aitop) + freeaddrinfo(aitop); + exit(1); +} +EOF + $getaddr_info_ok = true +end + +$objs = ["socket.o"] + +if $getaddr_info_ok + have_func("getaddrinfo") + have_func("getnameinfo") +else + $objs += "getaddrinfo.o" + $objs += "getnameinfo.o" +end + have_header("sys/un.h") if have_func(test_func) have_func("inet_aton") diff --git a/ext/socket/socket.c b/ext/socket/socket.c index 07b9b2b411..f8a0297ff3 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -44,6 +44,9 @@ extern int rb_thread_select(int, fd_set*, fd_set*, fd_set*, struct timeval*); /* #ifndef EWOULDBLOCK #define EWOULDBLOCK EAGAIN #endif +#ifndef HAVE_GETADDRINFO +# include "addrinfo.h" +#endif VALUE rb_cBasicSocket; VALUE rb_cIPSocket; @@ -317,9 +320,9 @@ bsock_send(argc, argv, sock) return INT2FIX(n); } -static VALUE ipaddr _((struct sockaddr_in*)); +static VALUE ipaddr _((struct sockaddr *)); #ifdef HAVE_SYS_UN_H -static VALUE unixaddr _((struct sockaddr_un*)); +static VALUE unixaddr _((struct sockaddr_un *)); #endif enum sock_recv_type { @@ -377,13 +380,15 @@ s_recv(sock, argc, argv, from) case RECV_RECV: return (VALUE)str; case RECV_TCP: +#if 0 if (alen != sizeof(struct sockaddr_in)) { rb_raise(rb_eTypeError, "sockaddr size differs - should not happen"); } - return rb_assoc_new(str, ipaddr((struct sockaddr_in *)buf)); +#endif + return rb_assoc_new(str, ipaddr((struct sockaddr *)buf)); case RECV_UDP: { - VALUE addr = ipaddr((struct sockaddr_in *)buf); + VALUE addr = ipaddr((struct sockaddr *)buf); return rb_assoc_new(str, rb_assoc_new(RARRAY(addr)->ptr[2], RARRAY(addr)->ptr[1])); @@ -407,43 +412,62 @@ bsock_recv(argc, argv, sock) } static VALUE -mkipaddr(x) - unsigned long x; +mkipaddr(addr) + struct sockaddr *addr; { - char buf[16]; + char buf[1024]; + int error; - x = ntohl(x); - sprintf(buf, "%d.%d.%d.%d", - (int) (x>>24) & 0xff, (int) (x>>16) & 0xff, - (int) (x>> 8) & 0xff, (int) (x>> 0) & 0xff); + error = getnameinfo(addr, SA_LEN(addr), buf, sizeof(buf), NULL, 0, + NI_NUMERICHOST); + if (error) { + rb_raise(rb_eSocket, gai_strerror(error)); + } return rb_str_new2(buf); } static VALUE ipaddr(sockaddr) - struct sockaddr_in *sockaddr; + struct sockaddr *sockaddr; { VALUE family, port, addr1, addr2; VALUE ary; - struct hostent *hostent; + struct addrinfo hints, *res; + int error; + char hbuf[1024], pbuf[1024]; - family = rb_str_new2("AF_INET"); - hostent = gethostbyaddr((char*)&sockaddr->sin_addr.s_addr, - sizeof(sockaddr->sin_addr), - AF_INET); - addr1 = 0; - if (hostent) { - addr1 = rb_str_new2(hostent->h_name); + switch (sockaddr->sa_family) { + case AF_INET: + family = rb_str_new2("AF_INET"); + break; +#ifdef INET6 + case AF_INET6: + family = rb_str_new2("AF_INET6"); + break; +#endif + default: + family = 0; + break; } - addr2 = mkipaddr(sockaddr->sin_addr.s_addr); - if (!addr1) addr1 = addr2; - - port = INT2FIX(ntohs(sockaddr->sin_port)); + error = getnameinfo(sockaddr, SA_LEN(sockaddr), hbuf, sizeof(hbuf), + NULL, 0, 0); + if (error) { + rb_raise(rb_eSocket, gai_strerror(error)); + } + addr1 = rb_str_new2(hbuf); + error = getnameinfo(sockaddr, SA_LEN(sockaddr), hbuf, sizeof(hbuf), + pbuf, sizeof(pbuf), NI_NUMERICHOST | NI_NUMERICSERV); + if (error) { + rb_raise(rb_eSocket, gai_strerror(error)); + } + addr2 = rb_str_new2(hbuf); + port = INT2FIX(atoi(pbuf)); ary = rb_ary_new3(4, family, port, addr1, addr2); return ary; } + #ifndef HAVE_INET_ATON static unsigned long inet_aton(host, inp) @@ -468,30 +492,34 @@ inet_aton(host, inp) static void setipaddr(name, addr) char *name; - struct sockaddr_in *addr; + struct sockaddr *addr; { - struct hostent *hp; + struct addrinfo hints, *res; + struct sockaddr_in *sin; + int error; + sin = (struct sockaddr_in *)addr; if (name[0] == 0) { - addr->sin_addr.s_addr = INADDR_ANY; + memset(sin, 0, sizeof(*sin)); + sin->sin_family = AF_INET; + SET_SIN_LEN(*sin, sizeof(*sin)); + sin->sin_addr.s_addr = INADDR_ANY; } else if (name[0] == '<' && strcmp(name, "") == 0) { - addr->sin_addr.s_addr = INADDR_BROADCAST; - } - else if (inet_aton(name, &addr->sin_addr) != 0) { - /* ok to set addr->sin_addr */ + sin->sin_family = AF_INET; + SET_SIN_LEN(*sin, sizeof(*sin)); + sin->sin_addr.s_addr = INADDR_BROADCAST; } else { - hp = gethostbyname(name); - if (!hp) { -#ifdef HAVE_HSTRERROR - extern int h_errno; - rb_raise(rb_eSocket, (char *)hstrerror(h_errno)); -#else - rb_raise(rb_eSocket, "host not found"); -#endif + memset(&hints, 0, sizeof(hints)); + hints.ai_family = PF_UNSPEC; + error = getaddrinfo(name, NULL, &hints, &res); + if (error) { + rb_raise(rb_eSocket, gai_strerror(error)); } - memcpy((char *) &addr->sin_addr, hp->h_addr, hp->h_length); + /* just take the first one */ + memcpy(addr, res->ai_addr, res->ai_addrlen); + freeaddrinfo(res); } } @@ -565,115 +593,90 @@ open_inet(class, h, serv, type) VALUE class, h, serv; int type; { - char *host; - struct hostent *hostent, _hostent; - struct servent *servent, _servent; - struct protoent *protoent; - struct sockaddr_in sockaddr; + struct addrinfo hints, *res, *res0; int fd, status; - int hostaddr, hostaddrPtr[2]; - int servport; char *syscall; + VALUE sock; + char pbuf[1024], *portp; + char *host; + int error; if (h) { Check_SafeStr(h); host = RSTRING(h)->ptr; - hostent = gethostbyname(host); - if (hostent == NULL) { - if (!inet_aton(host, &sockaddr.sin_addr)) { - if (type == INET_SERVER && !strlen(host)) - hostaddr = INADDR_ANY; - else { -#ifdef HAVE_HSTRERROR - extern int h_errno; - rb_raise(rb_eSocket, (char *)hstrerror(h_errno)); -#else - rb_raise(rb_eSocket, "host not found"); -#endif - } - } - hostaddr = sockaddr.sin_addr.s_addr; - _hostent.h_addr_list = (char **)hostaddrPtr; - _hostent.h_addr_list[0] = (char *)&hostaddr; - _hostent.h_addr_list[1] = NULL; - _hostent.h_length = sizeof(hostaddr); - _hostent.h_addrtype = AF_INET; - hostent = &_hostent; - } } - servent = NULL; - if (FIXNUM_P(serv)) { - servport = FIX2UINT(serv); - goto setup_servent; - } - servent = getservbyname(STR2CSTR(serv), "tcp"); - if (servent == NULL) { - char *s = STR2CSTR(serv); - char *end; - - servport = strtoul(s, &end, 0); - if (*end != '\0') { - rb_raise(rb_eSocket, "no such servce %s", s); - } - setup_servent: - _servent.s_port = htons(servport); - _servent.s_proto = "tcp"; - servent = &_servent; - } -#ifdef __BEOS__ - fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); -#else - protoent = getprotobyname(servent->s_proto); - if (protoent == NULL) { - rb_raise(rb_eSocket, "no such proto %s", servent->s_proto); + else { + host = NULL; } - - fd = socket(AF_INET, SOCK_STREAM, protoent->p_proto); -#endif - - memset(&sockaddr, 0, sizeof(sockaddr)); - sockaddr.sin_family = AF_INET; - if (h) { - memcpy((char *)&(sockaddr.sin_addr.s_addr), - (char *) hostent->h_addr_list[0], - (size_t) hostent->h_length); + if (FIXNUM_P(serv)) { + snprintf(pbuf, sizeof(pbuf), "%d", FIX2UINT(serv)); + portp = pbuf; } else { - sockaddr.sin_addr.s_addr = INADDR_ANY; + strcpy(pbuf, STR2CSTR(serv)); + portp = pbuf; } - sockaddr.sin_port = servent->s_port; - + memset(&hints, 0, sizeof(hints)); + hints.ai_family = PF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; if (type == INET_SERVER) { - status = 1; - setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,(char*)&status,sizeof(status)); - status = bind(fd, (struct sockaddr*)&sockaddr, sizeof(sockaddr)); - syscall = "bind(2)"; + hints.ai_flags = AI_PASSIVE; } - else { + error = getaddrinfo(host, portp, &hints, &res0); + if (error) { + rb_raise(rb_eSocket, gai_strerror(error)); + } + + fd = -1; + for (res = res0; res; res = res->ai_next) { + status = socket(res->ai_family, res->ai_socktype, res->ai_protocol); + syscall = "socket(2)"; + fd = status; + if (fd < 0) + continue; + if (type == INET_SERVER) { + status = 1; + setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&status, + sizeof(status)); + status = bind(fd, res->ai_addr, res->ai_addrlen); + syscall = "bind(2)"; + } + else { #if defined(HAVE_FCNTL) - status = thread_connect(fd, (struct sockaddr*)&sockaddr, - sizeof(sockaddr), type); + status = thread_connect(fd, res->ai_addr, res->ai_addrlen, type); #else #ifdef SOCKS - if (type == INET_SOCKS) { - status = Rconnect(fd, &sockaddr, sizeof(sockaddr)); - } - else + if (type == INET_SOCKS) { + status = Rconnect(fd, res->ai_addr, res->ai_addrlen); + } + else #endif - { - status = connect(fd, (struct sockaddr*)&sockaddr, sizeof(sockaddr)); - } + { + status = connect(fd, res->ai_addr, res->ai_addrlen); + } #endif - syscall = "connect(2)"; - } + syscall = "connect(2)"; + } + if (status < 0) { + close(fd); + fd = -1; + continue; + } else + break; + } if (status < 0) { - close(fd); + if (fd >= 0) + close(fd); + freeaddrinfo(res0); rb_sys_fail(syscall); } - if (type == INET_SERVER) listen(fd, 5); + + if (type == INET_SERVER) + listen(fd, 5); /* create new instance */ + freeaddrinfo(res0); return sock_new(class, fd); } @@ -702,19 +705,55 @@ socks_s_open(class, host, serv) } #endif +/* + * NOTE: using gethostbyname() against AF_INET6 is a bad idea, as it + * does not initialize sin_flowinfo nor sin_scope_id properly. + */ static VALUE tcp_s_gethostbyname(obj, host) VALUE obj, host; { - struct sockaddr_in addr; + struct sockaddr_storage addr; struct hostent *h; char **pch; VALUE ary, names; - setipaddr(STR2CSTR(host), &addr); - h = gethostbyaddr((char *)&addr.sin_addr, - sizeof(addr.sin_addr), - AF_INET); + if (rb_obj_is_kind_of(host, rb_cInteger)) { + int i = NUM2INT(host); + struct sockaddr_in *sin; + sin = (struct sockaddr_in *)&addr; + memset(sin, 0, sizeof(*sin)); + sin->sin_family = AF_INET; + SET_SIN_LEN(sin, sizeof(*sin)); + sin->sin_addr.s_addr = htonl(i); + } + else { + setipaddr(STR2CSTR(host), (struct sockaddr *)&addr); + } + switch (addr.ss_family) { + case AF_INET: + { + struct sockaddr_in *sin; + sin = (struct sockaddr_in *)&addr; + h = gethostbyaddr((char *)&sin->sin_addr, + sizeof(sin->sin_addr), + sin->sin_family); + break; + } +#ifdef INET6 + case AF_INET6: + { + struct sockaddr_in6 *sin6; + sin6 = (struct sockaddr_in6 *)&addr; + h = gethostbyaddr((char *)&sin6->sin6_addr, + sizeof(sin6->sin6_addr), + sin6->sin6_family); + break; + } +#endif + default: + h = NULL; + } if (h == NULL) { #ifdef HAVE_HSTRERROR @@ -734,8 +773,38 @@ tcp_s_gethostbyname(obj, host) rb_ary_push(ary, INT2NUM(h->h_addrtype)); #ifdef h_addr for (pch = h->h_addr_list; *pch; pch++) { - memcpy((char *) &addr.sin_addr, *pch, h->h_length); - rb_ary_push(ary, mkipaddr(addr.sin_addr.s_addr)); + switch (addr.ss_family) { + case AF_INET: + { + struct sockaddr_in sin; + memset(&sin, 0, sizeof(sin)); + sin.sin_family = AF_INET; + SET_SIN_LEN(sin, sizeof(sin)); + memcpy((char *) &sin.sin_addr, *pch, h->h_length); + h = gethostbyaddr((char *)&sin.sin_addr, + sizeof(sin.sin_addr), + sin.sin_family); + rb_ary_push(ary, mkipaddr((struct sockaddr *)&sin)); + break; + } +#ifdef INET6 + case AF_INET6: + { + struct sockaddr_in6 sin6; + memset(&sin6, 0, sizeof(sin6)); + sin6.sin6_family = AF_INET; + sin6.sin6_len = sizeof(sin6); + memcpy((char *) &sin6.sin6_addr, *pch, h->h_length); + h = gethostbyaddr((char *)&sin6.sin6_addr, + sizeof(sin6.sin6_addr), + sin6.sin6_family); + rb_ary_push(ary, mkipaddr((struct sockaddr *)&sin6)); + break; + } +#endif + default: + h = NULL; + } } #else memcpy((char *)&addr.sin_addr, h->h_addr, h->h_length); @@ -793,11 +862,11 @@ tcp_accept(sock) VALUE sock; { OpenFile *fptr; - struct sockaddr_in from; + struct sockaddr_storage from; int fromlen; GetOpenFile(sock, fptr); - fromlen = sizeof(struct sockaddr_in); + fromlen = sizeof(from); return s_accept(rb_cTCPSocket, fileno(fptr->f), (struct sockaddr*)&from, &fromlen); } @@ -859,14 +928,14 @@ ip_addr(sock) VALUE sock; { OpenFile *fptr; - struct sockaddr_in addr; + struct sockaddr_storage addr; int len = sizeof addr; GetOpenFile(sock, fptr); if (getsockname(fileno(fptr->f), (struct sockaddr*)&addr, &len) < 0) rb_sys_fail("getsockname(2)"); - return ipaddr(&addr); + return ipaddr((struct sockaddr *)&addr); } static VALUE @@ -874,92 +943,124 @@ ip_peeraddr(sock) VALUE sock; { OpenFile *fptr; - struct sockaddr_in addr; + struct sockaddr_storage addr; int len = sizeof addr; GetOpenFile(sock, fptr); if (getpeername(fileno(fptr->f), (struct sockaddr*)&addr, &len) < 0) rb_sys_fail("getpeername(2)"); - return ipaddr(&addr); + return ipaddr((struct sockaddr *)&addr); } static VALUE ip_s_getaddress(obj, host) VALUE obj, host; { - struct sockaddr_in addr; + struct sockaddr_storage addr; if (rb_obj_is_kind_of(host, rb_cInteger)) { int i = NUM2INT(host); - addr.sin_addr.s_addr = htonl(i); + struct sockaddr_in *sin; + sin = (struct sockaddr_in *)&addr; + memset(sin, 0, sizeof(*sin)); + sin->sin_family = AF_INET; + SET_SIN_LEN(*sin, sizeof(*sin)); + sin->sin_addr.s_addr = htonl(i); } else { - setipaddr(STR2CSTR(host), &addr); + setipaddr(STR2CSTR(host), (struct sockaddr *)&addr); } - return mkipaddr(addr.sin_addr.s_addr); + return mkipaddr((struct sockaddr *)&addr); } static VALUE -udp_s_open(class) +udp_s_open(argc, argv, class) + int argc; + VALUE *argv; VALUE class; { - return sock_new(class, socket(AF_INET, SOCK_DGRAM, 0)); + VALUE arg; + + if (rb_scan_args(argc, argv, "01", &arg) == 1) { + if (rb_obj_is_kind_of(arg, rb_cInteger)) { + return sock_new(class, socket(NUM2INT(arg), SOCK_DGRAM, 0)); + } + else { + rb_raise(rb_eSocket, "argument must be Integer"); + } + } + else { + return sock_new(class, socket(AF_INET, SOCK_DGRAM, 0)); + } } -static void -udp_addrsetup(host, port, addr) +static struct addrinfo * +udp_addrsetup(fptr, host, port) + OpenFile *fptr; /* use for AF check? */ VALUE host, port; - struct sockaddr_in *addr; { - memset(addr, 0, sizeof(struct sockaddr_in)); - addr->sin_family = AF_INET; + struct addrinfo hints, *res; + int error; + char *hostp, *portp; + char hbuf[1024], pbuf[1024]; + if (NIL_P(host)) { - addr->sin_addr.s_addr = INADDR_ANY; + hostp = NULL; } else if (rb_obj_is_kind_of(host, rb_cInteger)) { + struct sockaddr_in sin; int i = NUM2INT(host); - addr->sin_addr.s_addr = htonl(i); + memset(&sin, 0, sizeof(sin)); + sin.sin_family = AF_INET; + SET_SIN_LEN(sin, sizeof(sin)); + sin.sin_addr.s_addr = htonl(i); + error = getnameinfo((struct sockaddr *)&sin, SIN_LEN(sin), + hbuf, sizeof(hbuf), NULL, 0, NI_NUMERICHOST); + if (error) { + rb_raise(rb_eSocket, gai_strerror(error)); + } + hostp = hbuf; } else { - setipaddr(STR2CSTR(host), addr); + strcpy(hbuf, STR2CSTR(host)); + hostp = hbuf; } if (FIXNUM_P(port)) { - addr->sin_port = htons(FIX2INT(port)); + snprintf(pbuf, sizeof(pbuf), "%d", FIX2INT(port)); + portp = pbuf; } else { - struct servent *servent; - - servent = getservbyname(STR2CSTR(port), "udp"); - if (servent) { - addr->sin_port = servent->s_port; - } - else { - char *s = STR2CSTR(port); - char *end; - int portno; + portp = STR2CSTR(port); + } - portno = strtoul(s, &end, 0); - if (*end != '\0') { - rb_raise(rb_eSocket, "no such servce %s", s); - } - addr->sin_port = htons(port); - } + memset(&hints, 0, sizeof(hints)); + hints.ai_family = PF_UNSPEC; + hints.ai_socktype = SOCK_DGRAM; + error = getaddrinfo(hostp, portp, &hints, &res); + if (error) { + rb_raise(rb_eSocket, gai_strerror(error)); } + + return res; } static VALUE udp_connect(sock, host, port) VALUE sock, host, port; { - struct sockaddr_in addr; OpenFile *fptr; + struct addrinfo *res0, *res; - udp_addrsetup(host, port, &addr); GetOpenFile(sock, fptr); + res0 = udp_addrsetup(fptr, host, port); + for (res0 = res; res; res = res->ai_next) { retry: - if (connect(fileno(fptr->f), (struct sockaddr*)&addr, sizeof(addr))<0) { + if (connect(fileno(fptr->f), res->ai_addr, res->ai_addrlen) >= 0) { + freeaddrinfo(res0); + return INT2FIX(0); + } switch (errno) { case EINTR: case EWOULDBLOCK: @@ -969,9 +1070,10 @@ udp_connect(sock, host, port) rb_thread_schedule(); goto retry; } - rb_sys_fail("connect(2)"); } + freeaddrinfo(res0); + rb_sys_fail("connect(2)"); return INT2FIX(0); } @@ -979,14 +1081,21 @@ static VALUE udp_bind(sock, host, port) VALUE sock, host, port; { - struct sockaddr_in addr; + struct sockaddr_storage addr; OpenFile *fptr; + struct addrinfo *res0, *res; - udp_addrsetup(host, port, &addr); GetOpenFile(sock, fptr); - if (bind(fileno(fptr->f), (struct sockaddr*)&addr, sizeof(addr))<0) { - rb_sys_fail("bind(2)"); + res0 = udp_addrsetup(fptr, host, port); + for (res = res0; res; res = res->ai_next) { + if (bind(fileno(fptr->f), res->ai_addr, res->ai_addrlen) < 0) { + continue; + } + freeaddrinfo(res0); + return INT2FIX(0); } + freeaddrinfo(res0); + rb_sys_fail("bind(2)"); return INT2FIX(0); } @@ -997,26 +1106,30 @@ udp_send(argc, argv, sock) VALUE sock; { VALUE mesg, flags, host, port; - struct sockaddr_in addr; OpenFile *fptr; FILE *f; int n; char *m; int mlen; + struct addrinfo *res0, *res; if (argc == 2) { return bsock_send(argc, argv, sock); } rb_scan_args(argc, argv, "4", &mesg, &flags, &host, &port); - udp_addrsetup(host, port, &addr); GetOpenFile(sock, fptr); + res0 = udp_addrsetup(fptr, host, port); f = GetWriteFile(fptr); m = rb_str2cstr(mesg, &mlen); + for (res = res0; res; res = res->ai_next) { retry: - n = sendto(fileno(f), m, mlen, NUM2INT(flags), - (struct sockaddr*)&addr, sizeof(addr)); - if (n < 0) { + n = sendto(fileno(f), m, mlen, NUM2INT(flags), res->ai_addr, + res->ai_addrlen); + if (n >= 0) { + freeaddrinfo(res0); + return INT2FIX(n); + } switch (errno) { case EINTR: case EWOULDBLOCK: @@ -1026,8 +1139,9 @@ udp_send(argc, argv, sock) rb_thread_schedule(); goto retry; } - rb_sys_fail("sendto(2)"); } + freeaddrinfo(res0); + rb_sys_fail("sendto(2)"); return INT2FIX(n); } @@ -1407,23 +1521,75 @@ mkhostent(h) return ary; } +static VALUE +mkaddrinfo(res0) + struct addrinfo *res0; +{ + char **pch; + VALUE base, ary; + struct addrinfo *res; + + if (res0 == NULL) { + rb_raise(rb_eSocket, "host not found"); + } + base = rb_ary_new(); + for (res = res0; res; res = res->ai_next) { + ary = ipaddr(res->ai_addr); + rb_ary_push(ary, INT2FIX(res->ai_family)); + rb_ary_push(ary, INT2FIX(res->ai_socktype)); + rb_ary_push(ary, INT2FIX(res->ai_protocol)); + rb_ary_push(base, ary); + } + return base; +} + +/* + * NOTE: using gethostbyname() against AF_INET6 is a bad idea, as it + * does not initialize sin_flowinfo nor sin_scope_id properly. + */ static VALUE sock_s_gethostbyname(obj, host) VALUE obj, host; { - struct sockaddr_in addr; + struct sockaddr_storage addr; struct hostent *h; if (rb_obj_is_kind_of(host, rb_cInteger)) { int i = NUM2INT(host); - addr.sin_addr.s_addr = htonl(i); + struct sockaddr_in *sin; + sin = (struct sockaddr_in *)&addr; + memset(sin, 0, sizeof(*sin)); + sin->sin_family = AF_INET; + SET_SIN_LEN(*sin, sizeof(*sin)); + sin->sin_addr.s_addr = htonl(i); } else { - setipaddr(STR2CSTR(host), &addr); + setipaddr(STR2CSTR(host), (struct sockaddr *)&addr); + } + switch (addr.ss_family) { + case AF_INET: + { + struct sockaddr_in *sin; + sin = (struct sockaddr_in *)&addr; + h = gethostbyaddr((char *)&sin->sin_addr, + sizeof(sin->sin_addr), + sin->sin_family); + break; + } +#ifdef INET6 + case AF_INET6: + { + struct sockaddr_in6 *sin6; + sin6 = (struct sockaddr_in6 *)&addr; + h = gethostbyaddr((char *)&sin6->sin6_addr, + sizeof(sin6->sin6_addr), + sin6->sin6_family); + break; + } +#endif + default: + h = NULL; } - h = gethostbyaddr((char *)&addr.sin_addr, - sizeof(addr.sin_addr), - AF_INET); return mkhostent(h); } @@ -1484,6 +1650,168 @@ sock_s_getservbyaname(argc, argv) return INT2FIX(port); } +static VALUE +sock_s_getaddrinfo(argc, argv) + int argc; + VALUE *argv; +{ + VALUE host, port, family, socktype, protocol, flags, ret; + char hbuf[1024], pbuf[1024]; + char *hptr, *pptr; + struct addrinfo hints, *res; + int error; + + host = port = family = socktype = protocol = flags = Qnil; + rb_scan_args(argc, argv, "24", &host, &port, &family, &socktype, &protocol, + &flags); + if (NIL_P(host)) { + hptr = NULL; + } + else { + strncpy(hbuf, STR2CSTR(host), sizeof(hbuf)); + hbuf[sizeof(hbuf) - 1] = '\0'; + hptr = hbuf; + } + if (NIL_P(port)) { + pptr = NULL; + } + else if (rb_obj_is_kind_of(port, rb_cInteger)) { + snprintf(pbuf, sizeof(pbuf), "%d", FIX2INT(port)); + pptr = pbuf; + } + else { + strncpy(pbuf, STR2CSTR(port), sizeof(pbuf)); + pbuf[sizeof(pbuf) - 1] = '\0'; + pptr = pbuf; + } + + memset(&hints, 0, sizeof(hints)); + if (!NIL_P(family) && rb_obj_is_kind_of(family, rb_cInteger)) { + hints.ai_family = FIX2INT(family); + } + else { + hints.ai_family = PF_UNSPEC; + } + if (!NIL_P(socktype) && rb_obj_is_kind_of(socktype, rb_cInteger)) { + hints.ai_socktype = socktype; + } + if (!NIL_P(protocol) && rb_obj_is_kind_of(protocol, rb_cInteger)) { + hints.ai_protocol = protocol; + } + if (!NIL_P(flags) && rb_obj_is_kind_of(flags, rb_cInteger)) { + hints.ai_flags = flags; + } + error = getaddrinfo(hptr, pptr, &hints, &res); + if (error) { + rb_raise(rb_eSocket, gai_strerror(error)); + } + + ret = mkaddrinfo(res); + freeaddrinfo(res); + return ret; +} + +static VALUE +sock_s_getnameinfo(argc, argv) + int argc; + VALUE *argv; +{ + VALUE sa, af, host, port, flags; + static char hbuf[1024], pbuf[1024]; + char *hptr, *pptr; + int fl; + struct addrinfo hints, *res = NULL; + int error; + struct sockaddr_storage ss; + struct sockaddr *sap; + + sa = flags = Qnil; + rb_scan_args(argc, argv, "11", &sa, &flags); + + if (TYPE(sa) == T_STRING) { + if (sizeof(ss) < RSTRING(sa)->len) { + rb_raise(rb_eTypeError, "sockaddr length too big"); + } + memcpy(&ss, RSTRING(sa)->ptr, RSTRING(sa)->len); + if (RSTRING(sa)->len != ss.ss_len) { + rb_raise(rb_eTypeError, "sockaddr size differs - should not happen"); + } + sap = (struct sockaddr *)&ss; + } + else if (TYPE(sa) == T_ARRAY) { + if (RARRAY(sa)->len == 3) { + af = RARRAY(sa)->ptr[0]; + port = RARRAY(sa)->ptr[1]; + host = RARRAY(sa)->ptr[2]; + } + else if (RARRAY(sa)->len >= 4) { + af = RARRAY(sa)->ptr[0]; + port = RARRAY(sa)->ptr[1]; + host = RARRAY(sa)->ptr[3]; + if (NIL_P(host)) { + host = RARRAY(sa)->ptr[2]; + } + } + if (NIL_P(host)) { + hptr = NULL; + } + else { + strncpy(hbuf, STR2CSTR(host), sizeof(hbuf)); + hbuf[sizeof(hbuf) - 1] = '\0'; + hptr = hbuf; + } + if (NIL_P(port)) { + strcpy(pbuf, "0"); + pptr = NULL; + } + else if (rb_obj_is_kind_of(port, rb_cInteger)) { + snprintf(pbuf, sizeof(pbuf), "%d", FIX2INT(port)); + pptr = pbuf; + } + else { + strncpy(pbuf, STR2CSTR(port), sizeof(pbuf)); + pbuf[sizeof(pbuf) - 1] = '\0'; + pptr = pbuf; + } + memset(&hints, 0, sizeof(hints)); + if (strcmp(STR2CSTR(af), "AF_INET") == 0) { + hints.ai_family = PF_INET; + } + #ifdef INET6 + else if (strcmp(STR2CSTR(af), "AF_INET6") == 0) { + hints.ai_family = PF_INET6; + } + #endif + else { + hints.ai_family = PF_UNSPEC; + } + error = getaddrinfo(hptr, pptr, &hints, &res); + if (error) { + rb_raise(rb_eSocket, gai_strerror(error)); + } + sap = res->ai_addr; + } + else { + rb_raise(rb_eTypeError, "expecting String or Array"); + } + + fl = 0; + if (!NIL_P(flags) && rb_obj_is_kind_of(flags, rb_cInteger)) { + fl = FIX2INT(flags); + } + +gotsap: + error = getnameinfo(sap, SA_LEN(sap), hbuf, sizeof(hbuf), + pbuf, sizeof(pbuf), fl); + if (error) { + rb_raise(rb_eSocket, gai_strerror(error)); + } + if (res) + freeaddrinfo(res); + + return rb_ary_new3(2, rb_str_new2(hbuf), rb_str_new2(pbuf)); +} + static VALUE mConst; static void @@ -1540,8 +1868,8 @@ Init_socket() rb_cUDPSocket = rb_define_class("UDPSocket", rb_cIPSocket); rb_define_global_const("UDPsocket", rb_cUDPSocket); - rb_define_singleton_method(rb_cUDPSocket, "open", udp_s_open, 0); - rb_define_singleton_method(rb_cUDPSocket, "new", udp_s_open, 0); + rb_define_singleton_method(rb_cUDPSocket, "open", udp_s_open, -1); + rb_define_singleton_method(rb_cUDPSocket, "new", udp_s_open, -1); rb_define_method(rb_cUDPSocket, "connect", udp_connect, 2); rb_define_method(rb_cUDPSocket, "bind", udp_bind, 2); rb_define_method(rb_cUDPSocket, "send", udp_send, -1); @@ -1582,6 +1910,8 @@ Init_socket() rb_define_singleton_method(rb_cSocket, "gethostbyname", sock_s_gethostbyname, 1); rb_define_singleton_method(rb_cSocket, "gethostbyaddr", sock_s_gethostbyaddr, -1); rb_define_singleton_method(rb_cSocket, "getservbyname", sock_s_getservbyaname, -1); + rb_define_singleton_method(rb_cSocket, "getaddrinfo", sock_s_getaddrinfo, -1); + rb_define_singleton_method(rb_cSocket, "getnameinfo", sock_s_getnameinfo, -1); /* constants */ mConst = rb_define_module_under(rb_cSocket, "Constants"); @@ -1620,6 +1950,14 @@ Init_socket() sock_rb_define_const("AF_APPLETALK", AF_APPLETALK); sock_rb_define_const("PF_APPLETALK", PF_APPLETALK); #endif +#ifdef AF_UNSPEC + sock_rb_define_const("AF_UNSPEC", AF_UNSPEC); + sock_rb_define_const("PF_UNSPEC", PF_UNSPEC); +#endif +#ifdef AF_INET6 + sock_rb_define_const("AF_INET6", AF_INET6); + sock_rb_define_const("PF_INET6", PF_INET6); +#endif sock_rb_define_const("MSG_OOB", MSG_OOB); #ifdef MSG_PEEK @@ -1730,4 +2068,95 @@ Init_socket() #ifdef TCP_MAXSEG sock_rb_define_const("TCP_MAXSEG", TCP_MAXSEG); #endif + +#ifdef EAI_ADDRFAMILY + sock_rb_define_const("EAI_ADDRFAMILY", EAI_ADDRFAMILY); +#endif +#ifdef EAI_AGAIN + sock_rb_define_const("EAI_AGAIN", EAI_AGAIN); +#endif +#ifdef EAI_BADFLAGS + sock_rb_define_const("EAI_BADFLAGS", EAI_BADFLAGS); +#endif +#ifdef EAI_FAIL + sock_rb_define_const("EAI_FAIL", EAI_FAIL); +#endif +#ifdef EAI_FAMILY + sock_rb_define_const("EAI_FAMILY", EAI_FAMILY); +#endif +#ifdef EAI_MEMORY + sock_rb_define_const("EAI_MEMORY", EAI_MEMORY); +#endif +#ifdef EAI_NODATA + sock_rb_define_const("EAI_NODATA", EAI_NODATA); +#endif +#ifdef EAI_NONAME + sock_rb_define_const("EAI_NONAME", EAI_NONAME); +#endif +#ifdef EAI_SERVICE + sock_rb_define_const("EAI_SERVICE", EAI_SERVICE); +#endif +#ifdef EAI_SOCKTYPE + sock_rb_define_const("EAI_SOCKTYPE", EAI_SOCKTYPE); +#endif +#ifdef EAI_SYSTEM + sock_rb_define_const("EAI_SYSTEM", EAI_SYSTEM); +#endif +#ifdef EAI_BADHINTS + sock_rb_define_const("EAI_BADHINTS", EAI_BADHINTS); +#endif +#ifdef EAI_PROTOCOL + sock_rb_define_const("EAI_PROTOCOL", EAI_PROTOCOL); +#endif +#ifdef EAI_MAX + sock_rb_define_const("EAI_MAX", EAI_MAX); +#endif +#ifdef AI_PASSIVE + sock_rb_define_const("AI_PASSIVE", AI_PASSIVE); +#endif +#ifdef AI_CANONNAME + sock_rb_define_const("AI_CANONNAME", AI_CANONNAME); +#endif +#ifdef AI_NUMERICHOST + sock_rb_define_const("AI_NUMERICHOST", AI_NUMERICHOST); +#endif +#ifdef AI_MASK + sock_rb_define_const("AI_MASK", AI_MASK); +#endif +#ifdef AI_ALL + sock_rb_define_const("AI_ALL", AI_ALL); +#endif +#ifdef AI_V4MAPPED_CFG + sock_rb_define_const("AI_V4MAPPED_CFG", AI_V4MAPPED_CFG); +#endif +#ifdef AI_ADDRCONFIG + sock_rb_define_const("AI_ADDRCONFIG", AI_ADDRCONFIG); +#endif +#ifdef AI_V4MAPPED + sock_rb_define_const("AI_V4MAPPED", AI_V4MAPPED); +#endif +#ifdef AI_DEFAULT + sock_rb_define_const("AI_DEFAULT", AI_DEFAULT); +#endif +#ifdef NI_MAXHOST + sock_rb_define_const("NI_MAXHOST", NI_MAXHOST); +#endif +#ifdef NI_MAXSERV + sock_rb_define_const("NI_MAXSERV", NI_MAXSERV); +#endif +#ifdef NI_NOFQDN + sock_rb_define_const("NI_NOFQDN", NI_NOFQDN); +#endif +#ifdef NI_NUMERICHOST + sock_rb_define_const("NI_NUMERICHOST", NI_NUMERICHOST); +#endif +#ifdef NI_NAMEREQD + sock_rb_define_const("NI_NAMEREQD", NI_NAMEREQD); +#endif +#ifdef NI_NUMERICSERV + sock_rb_define_const("NI_NUMERICSERV", NI_NUMERICSERV); +#endif +#ifdef NI_DGRAM + sock_rb_define_const("NI_DGRAM", NI_DGRAM); +#endif } diff --git a/lib/ftplib.rb b/lib/ftplib.rb index 4cba9c50e5..9336e0a8c2 100644 --- a/lib/ftplib.rb +++ b/lib/ftplib.rb @@ -150,16 +150,23 @@ class FTP end def sendport(host, port) - hbytes = host.split(".") - pbytes = [port / 256, port % 256] - bytes = hbytes + pbytes - cmd = "PORT " + bytes.join(",") + af = (@sock.peeraddr)[0] + if af == "AF_INET" + hbytes = host.split(".") + pbytes = [port / 256, port % 256] + bytes = hbytes + pbytes + cmd = "PORT " + bytes.join(",") + elsif af == "AF_INET6" + cmd = "EPRT |2|" + host + "|" + sprintf("%d", port) + "|" + else + raise FTPProtoError, host + end voidcmd(cmd) end private :sendport def makeport - sock = TCPserver.open(0) + sock = TCPserver.open(@sock.addr[3], 0) port = sock.addr[1] host = TCPsocket.getaddress(@sock.addr[2]) resp = sendport(host, port) @@ -167,9 +174,20 @@ class FTP end private :makeport + def makepasv + if @sock.peeraddr[0] == "AF_INET" + host, port = parse227(sendcmd("PASV")) + else + host, port = parse229(sendcmd("EPSV")) +# host, port = parse228(sendcmd("LPSV")) + end + return host, port + end + private :makepasv + def transfercmd(cmd) if @passive - host, port = parse227(sendcmd("PASV")) + host, port = makepasv conn = open_socket(host, port) resp = sendcmd(cmd) if resp[0] != ?1 @@ -541,6 +559,57 @@ class FTP end private :parse227 + def parse228(resp) + if resp[0, 3] != "228" + raise FTPReplyError, resp + end + left = resp.index("(") + right = resp.index(")") + if left == nil or right == nil + raise FTPProtoError, resp + end + numbers = resp[left + 1 .. right - 1].split(",") + if numbers[0] == "4" + if numbers.length != 9 || numbers[1] != "4" || numbers[2 + 4] != "2" + raise FTPProtoError, resp + end + host = numbers[2, 4].join(".") + port = (numbers[7].to_i << 8) + numbers[8].to_i + elsif numbers[0] == "6" + if numbers.length != 21 || numbers[1] != "16" || numbers[2 + 16] != "2" + raise FTPProtoError, resp + end + v6 = ["", "", "", "", "", "", "", ""] + for i in 0 .. 7 + v6[i] = sprintf("%02x%02x", numbers[(i * 2) + 2].to_i, + numbers[(i * 2) + 3].to_i) + end + host = v6[0, 8].join(":") + port = (numbers[19].to_i << 8) + numbers[20].to_i + end + return host, port + end + private :parse228 + + def parse229(resp) + if resp[0, 3] != "229" + raise FTPReplyError, resp + end + left = resp.index("(") + right = resp.index(")") + if left == nil or right == nil + raise FTPProtoError, resp + end + numbers = resp[left + 1 .. right - 1].split(resp[left + 1, 1]) + if numbers.length != 4 + raise FTPProtoError, resp + end + port = numbers[3].to_i + host = (@sock.peeraddr())[3] + return host, port + end + private :parse228 + def parse257(resp) if resp[0, 3] != "257" raise FTPReplyError, resp diff --git a/lib/mkmf.rb b/lib/mkmf.rb index fb37cae9ea..f3654c3ca2 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb @@ -71,8 +71,9 @@ def xsystem command print command, "\n" return system(command) end - $stderr.reopen($null) - $stdout.reopen($null) +p command +# $stderr.reopen($null) +# $stdout.reopen($null) r = system(command) $stderr.reopen($orgerr) $stdout.reopen($orgout) @@ -83,7 +84,7 @@ def try_link(src, opt="") cfile = open("conftest.c", "w") cfile.print src cfile.close - xsystem(format(LINK, $CFLAGS, $LDFLAGS, libs)) + xsystem(format(LINK, $CFLAGS, $LDFLAGS, opt)) end def try_cpp(src, opt=$CFLAGS) diff --git a/parse.c b/parse.c index c939ae7a50..a36c9e4194 100644 --- a/parse.c +++ b/parse.c @@ -1,99 +1,99 @@ /* A Bison parser, made from parse.y - by GNU Bison version 1.25.90 + by GNU Bison version 1.25 */ #define YYBISON 1 /* Identify Bison output. */ -#define kCLASS 257 -#define kMODULE 258 -#define kDEF 259 -#define kUNDEF 260 -#define kBEGIN 261 -#define kRESCUE 262 -#define kENSURE 263 -#define kEND 264 -#define kIF 265 -#define kUNLESS 266 -#define kTHEN 267 -#define kELSIF 268 -#define kELSE 269 -#define kCASE 270 -#define kWHEN 271 -#define kWHILE 272 -#define kUNTIL 273 -#define kFOR 274 -#define kBREAK 275 -#define kNEXT 276 -#define kREDO 277 -#define kRETRY 278 -#define kIN 279 -#define kDO 280 -#define kRETURN 281 -#define kYIELD 282 -#define kSUPER 283 -#define kSELF 284 -#define kNIL 285 -#define kTRUE 286 -#define kFALSE 287 -#define kAND 288 -#define kOR 289 -#define kNOT 290 -#define kIF_MOD 291 -#define kUNLESS_MOD 292 -#define kWHILE_MOD 293 -#define kUNTIL_MOD 294 -#define kALIAS 295 -#define kDEFINED 296 -#define klBEGIN 297 -#define klEND 298 -#define k__LINE__ 299 -#define k__FILE__ 300 -#define tIDENTIFIER 301 -#define tFID 302 -#define tGVAR 303 -#define tIVAR 304 -#define tCONSTANT 305 -#define tINTEGER 306 -#define tFLOAT 307 -#define tSTRING 308 -#define tXSTRING 309 -#define tREGEXP 310 -#define tDSTRING 311 -#define tDXSTRING 312 -#define tDREGEXP 313 -#define tNTH_REF 314 -#define tBACK_REF 315 -#define tUPLUS 316 -#define tUMINUS 317 -#define tPOW 318 -#define tCMP 319 -#define tEQ 320 -#define tEQQ 321 -#define tNEQ 322 -#define tGEQ 323 -#define tLEQ 324 -#define tANDOP 325 -#define tOROP 326 -#define tMATCH 327 -#define tNMATCH 328 -#define tDOT2 329 -#define tDOT3 330 -#define tAREF 331 -#define tASET 332 -#define tLSHFT 333 -#define tRSHFT 334 -#define tCOLON2 335 -#define tCOLON3 336 -#define tOP_ASGN 337 -#define tASSOC 338 -#define tLPAREN 339 -#define tLBRACK 340 -#define tLBRACE 341 -#define tSTAR 342 -#define tAMPER 343 -#define tSYMBEG 344 -#define LAST_TOKEN 345 +#define kCLASS 258 +#define kMODULE 259 +#define kDEF 260 +#define kUNDEF 261 +#define kBEGIN 262 +#define kRESCUE 263 +#define kENSURE 264 +#define kEND 265 +#define kIF 266 +#define kUNLESS 267 +#define kTHEN 268 +#define kELSIF 269 +#define kELSE 270 +#define kCASE 271 +#define kWHEN 272 +#define kWHILE 273 +#define kUNTIL 274 +#define kFOR 275 +#define kBREAK 276 +#define kNEXT 277 +#define kREDO 278 +#define kRETRY 279 +#define kIN 280 +#define kDO 281 +#define kRETURN 282 +#define kYIELD 283 +#define kSUPER 284 +#define kSELF 285 +#define kNIL 286 +#define kTRUE 287 +#define kFALSE 288 +#define kAND 289 +#define kOR 290 +#define kNOT 291 +#define kIF_MOD 292 +#define kUNLESS_MOD 293 +#define kWHILE_MOD 294 +#define kUNTIL_MOD 295 +#define kALIAS 296 +#define kDEFINED 297 +#define klBEGIN 298 +#define klEND 299 +#define k__LINE__ 300 +#define k__FILE__ 301 +#define tIDENTIFIER 302 +#define tFID 303 +#define tGVAR 304 +#define tIVAR 305 +#define tCONSTANT 306 +#define tINTEGER 307 +#define tFLOAT 308 +#define tSTRING 309 +#define tXSTRING 310 +#define tREGEXP 311 +#define tDSTRING 312 +#define tDXSTRING 313 +#define tDREGEXP 314 +#define tNTH_REF 315 +#define tBACK_REF 316 +#define tUPLUS 317 +#define tUMINUS 318 +#define tPOW 319 +#define tCMP 320 +#define tEQ 321 +#define tEQQ 322 +#define tNEQ 323 +#define tGEQ 324 +#define tLEQ 325 +#define tANDOP 326 +#define tOROP 327 +#define tMATCH 328 +#define tNMATCH 329 +#define tDOT2 330 +#define tDOT3 331 +#define tAREF 332 +#define tASET 333 +#define tLSHFT 334 +#define tRSHFT 335 +#define tCOLON2 336 +#define tCOLON3 337 +#define tOP_ASGN 338 +#define tASSOC 339 +#define tLPAREN 340 +#define tLBRACK 341 +#define tLBRACE 342 +#define tSTAR 343 +#define tAMPER 344 +#define tSYMBEG 345 +#define LAST_TOKEN 346 #line 13 "parse.y" @@ -219,7 +219,7 @@ typedef union { #define YYFLAG -32768 #define YYNTBASE 118 -#define YYTRANSLATE(x) ((unsigned)(x) <= 345 ? yytranslate[x] : 212) +#define YYTRANSLATE(x) ((unsigned)(x) <= 346 ? yytranslate[x] : 212) static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 116, @@ -247,16 +247,16 @@ static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 106 + 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 106 }; #if YYDEBUG != 0 @@ -2182,7 +2182,6 @@ static const short yycheck[] = { 1, }; /* -*-C-*- Note some compilers choke on comments on `#line' lines. */ #line 3 "/usr/share/misc/bison.simple" -/* This file comes from bison-1.25.90. */ /* Skeleton output parser for bison, Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. @@ -2199,65 +2198,46 @@ static const short yycheck[] = { 1, You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, when this file is copied by Bison into a Bison output file, you may use that output file without restriction. This special exception was added by the Free Software Foundation in version 1.24 of Bison. */ -/* This is the parser code that is written into each bison parser - when the %semantic_parser declaration is not specified in the grammar. - It was written by Richard Stallman by simplifying the hairy parser - used when %semantic_parser is specified. */ - -#ifndef YYSTACK_USE_ALLOCA -#ifdef alloca -#define YYSTACK_USE_ALLOCA -#else /* alloca not defined */ +#ifndef alloca #ifdef __GNUC__ -#define YYSTACK_USE_ALLOCA #define alloca __builtin_alloca #else /* not GNU C. */ -#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) -#define YYSTACK_USE_ALLOCA +#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) #include #else /* not sparc */ -/* We think this test detects Watcom and Microsoft C. */ -/* This used to test MSDOS, but that is a bad idea - since that symbol is in the user namespace. */ -#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) -#if 0 /* No need for malloc.h, which pollutes the namespace; - instead, just don't use alloca. */ +#if defined (MSDOS) && !defined (__TURBOC__) #include -#endif #else /* not MSDOS, or __TURBOC__ */ #if defined(_AIX) -/* I don't know what this was needed for, but it pollutes the namespace. - So I turned it off. rms, 2 May 1997. */ -/* #include */ +#include #pragma alloca -#define YYSTACK_USE_ALLOCA -#else /* not MSDOS, or __TURBOC__, or _AIX */ -#if 0 -#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up, - and on HPUX 10. Eventually we can turn this on. */ -#define YYSTACK_USE_ALLOCA -#define alloca __builtin_alloca +#else /* not MSDOS, __TURBOC__, or _AIX */ +#ifdef __hpux +#ifdef __cplusplus +extern "C" { +void *alloca (unsigned int); +}; +#else /* not __cplusplus */ +void *alloca (); +#endif /* not __cplusplus */ #endif /* __hpux */ -#endif #endif /* not _AIX */ #endif /* not MSDOS, or __TURBOC__ */ -#endif /* not sparc */ -#endif /* not GNU C */ -#endif /* alloca not defined */ -#endif /* YYSTACK_USE_ALLOCA not defined */ +#endif /* not sparc. */ +#endif /* not GNU C. */ +#endif /* alloca not defined. */ -#ifdef YYSTACK_USE_ALLOCA -#define YYSTACK_ALLOC alloca -#else -#define YYSTACK_ALLOC malloc -#endif +/* This is the parser code that is written into each bison parser + when the %semantic_parser declaration is not specified in the grammar. + It was written by Richard Stallman by simplifying the hairy parser + used when %semantic_parser is specified. */ /* Note: there must be only one dollar sign in this file. It is replaced by the list of actions, each action @@ -2267,8 +2247,8 @@ static const short yycheck[] = { 1, #define yyclearin (yychar = YYEMPTY) #define YYEMPTY -2 #define YYEOF 0 -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab +#define YYACCEPT return(0) +#define YYABORT return(1) #define YYERROR goto yyerrlab1 /* Like YYERROR except do call yyerror. This remains here temporarily to ease the @@ -2349,12 +2329,12 @@ int yydebug; /* nonzero means print parse trace */ #ifndef YYMAXDEPTH #define YYMAXDEPTH 10000 #endif - -/* Define __yy_memcpy. Note that the size argument - should be passed with type unsigned int, because that is what the non-GCC - definitions require. With GCC, __builtin_memcpy takes an arg - of type size_t, but it can handle unsigned int. */ +/* Prevent warning if -Wstrict-prototypes. */ +#ifdef __GNUC__ +int yyparse (void); +#endif + #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) #else /* not GNU C or C++ */ @@ -2366,7 +2346,7 @@ static void __yy_memcpy (to, from, count) char *to; char *from; - unsigned int count; + int count; { register char *f = from; register char *t = to; @@ -2381,10 +2361,10 @@ __yy_memcpy (to, from, count) /* This is the most reliable way to avoid incompatibilities in available built-in functions on various systems. */ static void -__yy_memcpy (char *to, char *from, unsigned int count) +__yy_memcpy (char *to, char *from, int count) { - register char *t = to; register char *f = from; + register char *t = to; register int i = count; while (i-- > 0) @@ -2394,7 +2374,7 @@ __yy_memcpy (char *to, char *from, unsigned int count) #endif #endif -#line 216 "/usr/share/misc/bison.simple" +#line 196 "/usr/share/misc/bison.simple" /* The user can define YYPARSE_PARAM as the name of an argument to be passed into yyparse. The argument should have type void *. @@ -2415,15 +2395,6 @@ __yy_memcpy (char *to, char *from, unsigned int count) #define YYPARSE_PARAM_DECL #endif /* not YYPARSE_PARAM */ -/* Prevent warning if -Wstrict-prototypes. */ -#ifdef __GNUC__ -#ifdef YYPARSE_PARAM -int yyparse (void *); -#else -int yyparse (void); -#endif -#endif - int yyparse(YYPARSE_PARAM_ARG) YYPARSE_PARAM_DECL @@ -2452,7 +2423,6 @@ yyparse(YYPARSE_PARAM_ARG) #endif int yystacksize = YYINITDEPTH; - int yyfree_stacks = 0; #ifdef YYPURE int yychar; @@ -2537,32 +2507,18 @@ yynewstate: if (yystacksize >= YYMAXDEPTH) { yyerror("parser stack overflow"); - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } return 2; } yystacksize *= 2; if (yystacksize > YYMAXDEPTH) yystacksize = YYMAXDEPTH; -#ifndef YYSTACK_USE_ALLOCA - yyfree_stacks = 1; -#endif - yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); - __yy_memcpy ((char *)yyss, (char *)yyss1, - size * (unsigned int) sizeof (*yyssp)); - yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); - __yy_memcpy ((char *)yyvs, (char *)yyvs1, - size * (unsigned int) sizeof (*yyvsp)); + yyss = (short *) alloca (yystacksize * sizeof (*yyssp)); + __yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp)); + yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp)); + __yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp)); #ifdef YYLSP_NEEDED - yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); - __yy_memcpy ((char *)yyls, (char *)yyls1, - size * (unsigned int) sizeof (*yylsp)); + yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp)); + __yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp)); #endif #endif /* no yyoverflow */ @@ -4445,7 +4401,7 @@ case 373: break;} } /* the action file gets copied in in place of this dollarsign */ -#line 542 "/usr/share/misc/bison.simple" +#line 498 "/usr/share/misc/bison.simple" yyvsp -= yylen; yyssp -= yylen; @@ -4640,30 +4596,6 @@ yyerrhandle: yystate = yyn; goto yynewstate; - - yyacceptlab: - /* YYACCEPT comes here. */ - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } - return 0; - - yyabortlab: - /* YYABORT comes here. */ - if (yyfree_stacks) - { - free (yyss); - free (yyvs); -#ifdef YYLSP_NEEDED - free (yyls); -#endif - } - return 1; } #line 1606 "parse.y" -- cgit v1.2.3