diff options
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | MANIFEST | 2 | ||||
-rw-r--r-- | configure | 186 | ||||
-rw-r--r-- | configure.in | 1 | ||||
-rw-r--r-- | eval.c | 18 | ||||
-rw-r--r-- | lib/date.rb | 21 | ||||
-rw-r--r-- | lib/ftplib.rb | 1117 | ||||
-rw-r--r-- | lib/sync.rb | 2 | ||||
-rw-r--r-- | lib/thread.rb | 28 | ||||
-rw-r--r-- | missing/memcmp.c | 21 | ||||
-rw-r--r-- | struct.c | 8 |
11 files changed, 711 insertions, 707 deletions
@@ -1,3 +1,17 @@ +Tue Mar 3 11:21:28 1998 Yukihiro Matsumoto <matz@netlab.co.jp> + + * eval.c (thread_stop): stopping only thread raises ThreadError + exception. + +Tue Mar 3 08:04:56 1998 Tadayoshi Funaba <tadf@kt.rim.or.jp> + + * struct.c (struct_alloc): imcomplete struct initialization made + GC to access unallocated addresses. + +Mon Mar 2 16:28:27 1998 Yukihiro Matsumoto <matz@netlab.co.jp> + + * eval.c (thread_stop_method): remove Thread#stop. + Fri Feb 27 18:16:26 1998 Yukihiro Matsumoto <matz@netlab.co.jp> * version 1.1b9 released. @@ -104,6 +104,7 @@ lib/mailread.rb lib/mathn.rb lib/matrix.rb lib/mkmf.rb +lib/monitor.rb lib/mutex_m.rb lib/observer.rb lib/ostruct.rb @@ -133,6 +134,7 @@ missing/dir.h missing/dup2.c missing/file.h missing/flock.c +missing/memcmp.c missing/memmove.c missing/mkdir.c missing/nt.c @@ -2516,16 +2516,52 @@ EOF fi +echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6 +echo "configure:2521: 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 + if test "$cross_compiling" = yes; then + ac_cv_func_memcmp_clean=no +else + cat > conftest.$ac_ext <<EOF +#line 2529 "configure" +#include "confdefs.h" + +main() +{ + char c0 = 0x40, c1 = 0x80, c2 = 0x81; + exit(memcmp(&c0, &c2, 1) < 0 && memcmp(&c1, &c2, 1) < 0 ? 0 : 1); +} + +EOF +if { (eval echo configure:2539: \"$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 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_func_memcmp_clean=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6 +test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.o" + for ac_func in dup2 setenv memmove mkdir strcasecmp strerror strftime\ strstr strtoul strdup crypt flock do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2524: checking for $ac_func" >&5 +echo "configure:2560: 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 <<EOF -#line 2529 "configure" +#line 2565 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -2548,7 +2584,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:2552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -2581,12 +2617,12 @@ for ac_func in fmod killpg random wait4 waitpid syscall getcwd\ dlopen sigprocmask sigaction _setjmp do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2585: checking for $ac_func" >&5 +echo "configure:2621: 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 <<EOF -#line 2590 "configure" +#line 2626 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -2609,7 +2645,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:2613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2649: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -2635,12 +2671,12 @@ done if test "$ac_cv_func_strftime" = no; then echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 -echo "configure:2639: checking whether struct tm is in sys/time.h or time.h" >&5 +echo "configure:2675: 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 <<EOF -#line 2644 "configure" +#line 2680 "configure" #include "confdefs.h" #include <sys/types.h> #include <time.h> @@ -2648,7 +2684,7 @@ int main() { struct tm *tp; tp->tm_sec; ; return 0; } EOF -if { (eval echo configure:2652: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2688: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else @@ -2669,12 +2705,12 @@ EOF fi echo $ac_n "checking for tm_zone in struct tm""... $ac_c" 1>&6 -echo "configure:2673: checking for tm_zone in struct tm" >&5 +echo "configure:2709: 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 <<EOF -#line 2678 "configure" +#line 2714 "configure" #include "confdefs.h" #include <sys/types.h> #include <$ac_cv_struct_tm> @@ -2682,7 +2718,7 @@ int main() { struct tm tm; tm.tm_zone; ; return 0; } EOF -if { (eval echo configure:2686: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2722: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm_zone=yes else @@ -2702,12 +2738,12 @@ EOF else echo $ac_n "checking for tzname""... $ac_c" 1>&6 -echo "configure:2706: checking for tzname" >&5 +echo "configure:2742: 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 <<EOF -#line 2711 "configure" +#line 2747 "configure" #include "confdefs.h" #include <time.h> #ifndef tzname /* For SGI. */ @@ -2717,7 +2753,7 @@ int main() { atoi(*tzname); ; return 0; } EOF -if { (eval echo configure:2721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2757: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* ac_cv_var_tzname=yes else @@ -2739,14 +2775,14 @@ EOF fi cat > conftest.$ac_ext <<EOF -#line 2743 "configure" +#line 2779 "configure" #include "confdefs.h" int main() { extern int daylight; int i = daylight; ; return 0; } EOF -if { (eval echo configure:2750: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2786: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* cat >> confdefs.h <<\EOF #define HAVE_DAYLIGHT 1 @@ -2766,7 +2802,7 @@ EOF else echo $ac_n "checking for BSD signal semantics""... $ac_c" 1>&6 -echo "configure:2770: checking for BSD signal semantics" >&5 +echo "configure:2806: 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 @@ -2774,7 +2810,7 @@ else { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 2778 "configure" +#line 2814 "configure" #include "confdefs.h" #include <stdio.h> @@ -2796,7 +2832,7 @@ main() } EOF -if { (eval echo configure:2800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then rb_cv_bsd_signal=yes else @@ -2830,19 +2866,19 @@ EOF else echo $ac_n "checking whether getpgrp() has arg""... $ac_c" 1>&6 -echo "configure:2834: checking whether getpgrp() has arg" >&5 +echo "configure:2870: checking whether getpgrp() has arg" >&5 if eval "test \"`echo '$''{'rb_cv_bsdgetpgrp'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2839 "configure" +#line 2875 "configure" #include "confdefs.h" #include <unistd.h> int main() { getpgrp(0); ; return 0; } EOF -if { (eval echo configure:2846: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2882: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_bsdgetpgrp=yes else @@ -2863,19 +2899,19 @@ EOF fi echo $ac_n "checking whether setpgrp() has args""... $ac_c" 1>&6 -echo "configure:2867: checking whether setpgrp() has args" >&5 +echo "configure:2903: checking whether setpgrp() has args" >&5 if eval "test \"`echo '$''{'rb_cv_bsdsetpgrp'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2872 "configure" +#line 2908 "configure" #include "confdefs.h" #include <unistd.h> int main() { setpgrp(1, 1); ; return 0; } EOF -if { (eval echo configure:2879: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_bsdsetpgrp=yes else @@ -2897,14 +2933,14 @@ EOF fi echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:2901: checking whether byte ordering is bigendian" >&5 +echo "configure:2937: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext <<EOF -#line 2908 "configure" +#line 2944 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/param.h> @@ -2915,11 +2951,11 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:2919: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2955: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext <<EOF -#line 2923 "configure" +#line 2959 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/param.h> @@ -2930,7 +2966,7 @@ int main() { #endif ; return 0; } EOF -if { (eval echo configure:2934: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2970: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -2950,7 +2986,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 2954 "configure" +#line 2990 "configure" #include "confdefs.h" main () { /* Are we little or big endian? From Harbison&Steele. */ @@ -2963,7 +2999,7 @@ main () { exit (u.c[sizeof (long) - 1] == 1); } EOF -if { (eval echo configure:2967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -2987,14 +3023,14 @@ EOF fi echo $ac_n "checking whether char is unsigned""... $ac_c" 1>&6 -echo "configure:2991: checking whether char is unsigned" >&5 +echo "configure:3027: 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 <<EOF -#line 2998 "configure" +#line 3034 "configure" #include "confdefs.h" #ifdef __CHAR_UNSIGNED__ yes @@ -3016,7 +3052,7 @@ if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 3020 "configure" +#line 3056 "configure" #include "confdefs.h" /* volatile prevents gcc2 from optimizing the test away on sparcs. */ #if !defined(__STDC__) || __STDC__ != 1 @@ -3026,7 +3062,7 @@ main() { volatile char c = 255; exit(c < 0); } EOF -if { (eval echo configure:3030: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3066: \"$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 @@ -3051,19 +3087,19 @@ fi echo $ac_n "checking count field in FILE structures""... $ac_c" 1>&6 -echo "configure:3055: checking count field in FILE structures" >&5 +echo "configure:3091: 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 <<EOF -#line 3060 "configure" +#line 3096 "configure" #include "confdefs.h" #include <stdio.h> int main() { FILE *f = stdin; f->_cnt = 0; ; return 0; } EOF -if { (eval echo configure:3067: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3103: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_fcnt="_cnt" else @@ -3073,14 +3109,14 @@ fi rm -f conftest* if test "$rb_cv_fcnt" = ""; then cat > conftest.$ac_ext <<EOF -#line 3077 "configure" +#line 3113 "configure" #include "confdefs.h" #include <stdio.h> int main() { FILE *f = stdin; f->__cnt = 0; ; return 0; } EOF -if { (eval echo configure:3084: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_fcnt="__cnt" else @@ -3091,14 +3127,14 @@ rm -f conftest* fi if test "$rb_cv_fcnt" = ""; then cat > conftest.$ac_ext <<EOF -#line 3095 "configure" +#line 3131 "configure" #include "confdefs.h" #include <stdio.h> int main() { FILE *f = stdin; f->_r = 0; ; return 0; } EOF -if { (eval echo configure:3102: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3138: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_fcnt="_r" else @@ -3109,14 +3145,14 @@ rm -f conftest* fi if test "$rb_cv_fcnt" = ""; then cat > conftest.$ac_ext <<EOF -#line 3113 "configure" +#line 3149 "configure" #include "confdefs.h" #include <stdio.h> int main() { FILE *f = stdin; f->readCount = 0; ; return 0; } EOF -if { (eval echo configure:3120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3156: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_fcnt="readCount" else @@ -3141,9 +3177,9 @@ fi if test "$ac_cv_func_getpwent" = yes; then echo $ac_n "checking struct passwd""... $ac_c" 1>&6 -echo "configure:3145: checking struct passwd" >&5 +echo "configure:3181: checking struct passwd" >&5 cat > conftest.$ac_ext <<EOF -#line 3147 "configure" +#line 3183 "configure" #include "confdefs.h" #include <pwd.h> EOF @@ -3158,7 +3194,7 @@ fi rm -f conftest* cat > conftest.$ac_ext <<EOF -#line 3162 "configure" +#line 3198 "configure" #include "confdefs.h" #include <pwd.h> EOF @@ -3173,7 +3209,7 @@ fi rm -f conftest* cat > conftest.$ac_ext <<EOF -#line 3177 "configure" +#line 3213 "configure" #include "confdefs.h" #include <pwd.h> EOF @@ -3188,7 +3224,7 @@ fi rm -f conftest* cat > conftest.$ac_ext <<EOF -#line 3192 "configure" +#line 3228 "configure" #include "confdefs.h" #include <pwd.h> EOF @@ -3203,7 +3239,7 @@ fi rm -f conftest* cat > conftest.$ac_ext <<EOF -#line 3207 "configure" +#line 3243 "configure" #include "confdefs.h" #include <pwd.h> EOF @@ -3218,7 +3254,7 @@ fi rm -f conftest* cat > conftest.$ac_ext <<EOF -#line 3222 "configure" +#line 3258 "configure" #include "confdefs.h" #include <pwd.h> EOF @@ -3251,7 +3287,7 @@ fi case "$host_os" in linux*) echo $ac_n "checking whether ELF binaries are produced""... $ac_c" 1>&6 -echo "configure:3255: checking whether ELF binaries are produced" >&5 +echo "configure:3291: checking whether ELF binaries are produced" >&5 if eval "test \"`echo '$''{'rb_cv_linux_elf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3259,7 +3295,7 @@ else : else cat > conftest.$ac_ext <<EOF -#line 3263 "configure" +#line 3299 "configure" #include "confdefs.h" /* Test for whether ELF binaries are produced */ @@ -3279,7 +3315,7 @@ main() { } EOF -if { (eval echo configure:3283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then rb_cv_linux_elf=yes else @@ -3309,7 +3345,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:3313: checking whether OS depend dynamic link works" >&5 +echo "configure:3349: checking whether OS depend dynamic link works" >&5 if test "$GCC" = yes; then case "$host_os" in nextstep*) ;; @@ -3367,13 +3403,13 @@ dln_a_out_works=no if test "$ac_cv_header_a_out_h" = yes; then if test "$with_dln_a_out" = yes || test "$rb_cv_dlopen" = unknown; then echo $ac_n "checking whether matz's dln works""... $ac_c" 1>&6 -echo "configure:3371: checking whether matz's dln works" >&5 +echo "configure:3407: checking whether matz's dln works" >&5 cat confdefs.h > config.h 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 <<EOF -#line 3377 "configure" +#line 3413 "configure" #include "confdefs.h" #define USE_DLN_A_OUT @@ -3383,7 +3419,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:3387: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:3423: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* rb_cv_dln_a_out=yes else @@ -3466,7 +3502,7 @@ fi case "$host_os" in human*) echo $ac_n "checking for _harderr in -lsignal""... $ac_c" 1>&6 -echo "configure:3470: checking for _harderr in -lsignal" >&5 +echo "configure:3506: 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 @@ -3474,7 +3510,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lsignal $LIBS" cat > conftest.$ac_ext <<EOF -#line 3478 "configure" +#line 3514 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -3485,7 +3521,7 @@ int main() { _harderr() ; return 0; } EOF -if { (eval echo configure:3489: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3525: \"$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 @@ -3513,7 +3549,7 @@ else fi echo $ac_n "checking for hmemset in -lhmem""... $ac_c" 1>&6 -echo "configure:3517: checking for hmemset in -lhmem" >&5 +echo "configure:3553: 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 @@ -3521,7 +3557,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lhmem $LIBS" cat > conftest.$ac_ext <<EOF -#line 3525 "configure" +#line 3561 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -3532,7 +3568,7 @@ int main() { hmemset() ; return 0; } EOF -if { (eval echo configure:3536: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3572: \"$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 @@ -3562,12 +3598,12 @@ fi for ac_func in select do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:3566: checking for $ac_func" >&5 +echo "configure:3602: 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 <<EOF -#line 3571 "configure" +#line 3607 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -3590,7 +3626,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:3594: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:3630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -3615,7 +3651,7 @@ fi done echo $ac_n "checking whether PD libc _dtos18 fail to convert big number""... $ac_c" 1>&6 -echo "configure:3619: checking whether PD libc _dtos18 fail to convert big number" >&5 +echo "configure:3655: 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 @@ -3623,7 +3659,7 @@ else { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 3627 "configure" +#line 3663 "configure" #include "confdefs.h" #include <stdio.h> @@ -3635,7 +3671,7 @@ main () } EOF -if { (eval echo configure:3639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3675: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then rb_cv_missing__dtos18=yes else @@ -3657,7 +3693,7 @@ EOF fi echo $ac_n "checking whether PD libc fconvert fail to round""... $ac_c" 1>&6 -echo "configure:3661: checking whether PD libc fconvert fail to round" >&5 +echo "configure:3697: 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 @@ -3665,7 +3701,7 @@ else { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <<EOF -#line 3669 "configure" +#line 3705 "configure" #include "confdefs.h" #include <stdio.h> @@ -3678,7 +3714,7 @@ main () } EOF -if { (eval echo configure:3682: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3718: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then rb_cv_missing_fconvert=yes else diff --git a/configure.in b/configure.in index 567e58cc3e..54202cfd92 100644 --- a/configure.in +++ b/configure.in @@ -108,6 +108,7 @@ AC_TYPE_GETGROUPS AC_TYPE_SIGNAL AC_FUNC_ALLOCA AC_FUNC_VFORK +AC_FUNC_MEMCMP AC_REPLACE_FUNCS(dup2 setenv memmove mkdir strcasecmp strerror strftime\ strstr strtoul strdup crypt flock) AC_CHECK_FUNCS(fmod killpg random wait4 waitpid syscall getcwd\ @@ -5463,22 +5463,15 @@ thread_pass() } static VALUE -thread_stop_method(thread) - VALUE thread; +thread_stop() { - thread_t th = thread_check(thread); - thread_critical = 0; - th->status = THREAD_STOPPED; + curr_thread->status = THREAD_STOPPED; + if (curr_thread == curr_thread->next) { + Raise(eThreadError, "stopping only thread"); + } thread_schedule(); - return thread; -} - -static VALUE -thread_stop() -{ - thread_stop_method(curr_thread->thread); return Qnil; } @@ -5887,7 +5880,6 @@ Init_Thread() rb_define_method(cThread, "run", thread_run, 0); rb_define_method(cThread, "wakeup", thread_wakeup, 0); - rb_define_method(cThread, "stop", thread_stop_method, 0); rb_define_method(cThread, "exit", thread_kill, 0); rb_define_method(cThread, "value", thread_value, 0); rb_define_method(cThread, "status", thread_status, 0); diff --git a/lib/date.rb b/lib/date.rb index 030b8a3afb..c1a2be96f1 100644 --- a/lib/date.rb +++ b/lib/date.rb @@ -1,8 +1,8 @@ # # Date.rb - # $Release Version: $ -# $Revision: 1.1.1.1.4.3 $ -# $Date: 1998/02/03 10:02:57 $ +# $Revision: 1.1.1.1.4.4 $ +# $Date: 1998/02/18 01:56:47 $ # by Yasuo OHBA(SHL Japan Inc. Technology Dept.) # # -- @@ -109,6 +109,9 @@ class Date else raise TypeError, "Illegal type. (Integer or Date)" end + if d <= 0 + raise ArgumentError, "argument out of range. (self > other)" + end return Date.at(d) end @@ -146,11 +149,7 @@ class Date end def leapyear? - if Date.leapyear(@year) == 1 - return FALSE - else - return TRUE - end + Date.leapyear(@year) != 1 end def _check_date @@ -221,10 +220,10 @@ def Date.period!(y, m, d) p += dl[mm] end p += (y - 1) * 365 + ((y - 1) / 4.0).to_i - if (y - 1) > 1752 - p -= ((y - 1 - 1752) / 100.0).to_i - p += ((y - 1 - 1752) / 400.0).to_i - p -= (14 - 3) + if y > 1752 + p -= ((y - 1) / 100.0).to_i + p += ((y - 1) / 400.0).to_i + p += 2 elsif y == 1752 && m == 9 && d >= 14 && d <= 30 p -= (14 - 3) end diff --git a/lib/ftplib.rb b/lib/ftplib.rb index ab93f64545..b58a01cdaa 100644 --- a/lib/ftplib.rb +++ b/lib/ftplib.rb @@ -1,13 +1,12 @@ -### ftplib.rb -*- Mode: ruby; tab-width: 8; -*- +## ftplib.rb -## $Revision: 1.5 $ -## $Date: 1997/09/16 08:03:31 $ -## by maeda shugo <shugo@po.aianet.ne.jp> +# Author: Shugo Maeda <shugo@po.aianet.ne.jp> +# Version: $Revision: 1.6 $ -### Code: +## Code: require "socket" -require "sync" if defined? Thread +require "monitor" class FTPError < Exception; end class FTPReplyError < FTPError; end @@ -16,609 +15,549 @@ class FTPPermError < FTPError; end class FTPProtoError < FTPError; end class FTP - - RCS_ID = %q$Id: ftplib.rb,v 1.5 1997/09/16 08:03:31 shugo Exp $ - - FTP_PORT = 21 - CRLF = "\r\n" - - attr :passive, TRUE - attr :return_code, TRUE - attr :debug_mode, TRUE - attr :welcome - attr :lastresp - - THREAD_SAFE = defined?(Thread) != FALSE - - if THREAD_SAFE - def synchronize(mode = :EX) - if @sync - @sync.synchronize(mode) do - yield - end - end - end - - def sock_synchronize(mode = :EX) - if @sock - @sock.synchronize(mode) do - yield - end - end - end - else - def synchronize(mode = :EX) - yield - end - - def sock_synchronize(mode = :EX) - yield - end - end - private :sock_synchronize - - def FTP.open(host, user = nil, passwd = nil, acct = nil) - new(host, user, passwd, acct) - end + + RCS_ID = %q$Id: ftplib.rb,v 1.6 1998/03/01 08:49:57 shugo Exp shugo $ + + include MonitorMixin + + FTP_PORT = 21 + CRLF = "\r\n" + + attr_accessor :passive, :return_code, :debug_mode + attr_reader :welcome, :lastresp + + def FTP.open(host, user = nil, passwd = nil, acct = nil) + new(host, user, passwd, acct) + end - def initialize(host = nil, user = nil, - passwd = nil, acct = nil) - if THREAD_SAFE - @sync = Sync.new - end - @passive = FALSE - @return_code = "\n" - @debug_mode = FALSE - if host - connect(host) - if user - login(user, passwd, acct) - end - end - end - - def open_socket(host, port) - if defined? SOCKSsocket and ENV["SOCKS_SERVER"] - @passive = TRUE - SOCKSsocket.open(host, port) - else - TCPsocket.open(host, port) - end - end - private :open_socket - - def connect(host, port = FTP_PORT) - if @debug_mode - print "connect: ", host, ", ", port, "\n" - end - synchronize do - @sock = open_socket(host, port) - if THREAD_SAFE - @sock.extend Sync_m - end - voidresp - end - end - - def sanitize(s) - if s =~ /^PASS /i - s[0, 5] + "*" * (s.length - 5) - else - s - end - end - private :sanitize - - def putline(line) - if @debug_mode - print "put: ", sanitize(line), "\n" - end - line = line + CRLF - @sock.write(line) - end - private :putline - - def getline - line = @sock.readline # if get EOF, raise EOFError - if line[-2, 2] == CRLF - line = line[0 .. -3] - elsif line[-1] == ?\r or - line[-1] == ?\n - line = line[0 .. -2] - end - if @debug_mode - print "get: ", sanitize(line), "\n" - end - line - end - private :getline - - def getmultiline - line = getline - buff = line - if line[3] == ?- - code = line[0, 3] - begin - line = getline - buff << "\n" << line - end until line[0, 3] == code and line[3] != ?- - end - buff << "\n" - end - private :getmultiline - - def getresp - resp = getmultiline - @lastresp = resp[0, 3] - c = resp[0] - case c - when ?1, ?2, ?3 - return resp - when ?4 - raise FTPTempError, resp - when ?5 - raise FTPPermError, resp - else - raise FTPProtoError, resp - end - end - private :getresp - - def voidresp - resp = getresp - if resp[0] != ?2 - raise FTPReplyError, resp - end - end - private :voidresp - - def sendcmd(cmd) - synchronize do - sock_synchronize do - putline(cmd) - getresp - end - end - end - - def voidcmd(cmd) - synchronize do - sock_synchronize do - putline(cmd) - voidresp - end - end - nil - end - - def sendport(host, port) - hbytes = host.split(".") - pbytes = [port / 256, port % 256] - bytes = hbytes + pbytes - cmd = "PORT " + bytes.join(",") - voidcmd(cmd) - end - private :sendport - - def makeport - sock = TCPserver.open(0) - port = sock.addr[1] - host = TCPsocket.getaddress(@sock.addr[2]) - resp = sendport(host, port) - sock - end - private :makeport - - def transfercmd(cmd) - if @passive - host, port = parse227(sendcmd("PASV")) - conn = open_socket(host, port) - resp = sendcmd(cmd) - if resp[0] != ?1 - raise FTPReplyError, resp - end - else - sock = makeport - resp = sendcmd(cmd) - if resp[0] != ?1 - raise FTPReplyError, resp - end - conn = sock.accept - end - conn - end - private :transfercmd - - def getaddress - thishost = Socket.gethostname - if not thishost.index(".") - thishost = Socket.gethostbyname(thishost)[0] - end - if ENV.has_key?("LOGNAME") - realuser = ENV["LOGNAME"] - elsif ENV.has_key?("USER") - realuser = ENV["USER"] - else - realuser = "anonymous" - end - realuser + "@" + thishost - end - private :getaddress - - def login(user = "anonymous", passwd = nil, acct = nil) - if user == "anonymous" and passwd == nil - passwd = getaddress - end - - resp = "" - synchronize do - resp = sendcmd('USER ' + user) - if resp[0] == ?3 - resp = sendcmd('PASS ' + passwd) - end - if resp[0] == ?3 - resp = sendcmd('ACCT ' + acct) - end - end - if resp[0] != ?2 - raise FTPReplyError, resp - end - @welcome = resp - end + def initialize(host = nil, user = nil, passwd = nil, acct = nil) + super + @passive = false + @return_code = "\n" + @debug_mode = false + if host + connect(host) + if user + login(user, passwd, acct) + end + end + end + + def open_socket(host, port) + if defined? SOCKSsocket and ENV["SOCKS_SERVER"] + @passive = true + return SOCKSsocket.open(host, port) + else + return TCPsocket.open(host, port) + end + end + private :open_socket + + def connect(host, port = FTP_PORT) + if @debug_mode + print "connect: ", host, ", ", port, "\n" + end + synchronize do + @sock = open_socket(host, port) + voidresp + end + end + + def sanitize(s) + if s =~ /^PASS /i + return s[0, 5] + "*" * (s.length - 5) + else + return s + end + end + private :sanitize + + def putline(line) + if @debug_mode + print "put: ", sanitize(line), "\n" + end + line = line + CRLF + @sock.write(line) + end + private :putline + + def getline + line = @sock.readline # if get EOF, raise EOFError + if line[-2, 2] == CRLF + line = line[0 .. -3] + elsif line[-1] == ?\r or + line[-1] == ?\n + line = line[0 .. -2] + end + if @debug_mode + print "get: ", sanitize(line), "\n" + end + return line + end + private :getline + + def getmultiline + line = getline + buff = line + if line[3] == ?- + code = line[0, 3] + begin + line = getline + buff << "\n" << line + end until line[0, 3] == code and line[3] != ?- + end + return buff << "\n" + end + private :getmultiline + + def getresp + resp = getmultiline + @lastresp = resp[0, 3] + c = resp[0] + case c + when ?1, ?2, ?3 + return resp + when ?4 + raise FTPTempError, resp + when ?5 + raise FTPPermError, resp + else + raise FTPProtoError, resp + end + end + private :getresp + + def voidresp + resp = getresp + if resp[0] != ?2 + raise FTPReplyError, resp + end + end + private :voidresp + + def sendcmd(cmd) + synchronize do + putline(cmd) + return getresp + end + end - def retrbinary(cmd, blocksize, callback = Proc.new) - synchronize do - voidcmd("TYPE I") - conn = transfercmd(cmd) - while TRUE - data = conn.read(blocksize) - break if data == nil - callback.call(data) - end - conn.close - voidresp - end - end + def voidcmd(cmd) + synchronize do + putline(cmd) + voidresp + end + end - def retrlines(cmd, callback = nil) - if iterator? - callback = Proc.new - elsif not callback.is_a?(Proc) - callback = Proc.new {|line| print line, "\n"} - end - synchronize do - voidcmd("TYPE A") - conn = transfercmd(cmd) - while TRUE - line = conn.gets - break if line == nil - if line[-2, 2] == CRLF - line = line[0 .. -3] - elsif line[-1] == ?\n - line = line[0 .. -2] - end - callback.call(line) - end - conn.close - voidresp - end - end + def sendport(host, port) + hbytes = host.split(".") + pbytes = [port / 256, port % 256] + bytes = hbytes + pbytes + cmd = "PORT " + bytes.join(",") + voidcmd(cmd) + end + private :sendport + + def makeport + sock = TCPserver.open(0) + port = sock.addr[1] + host = TCPsocket.getaddress(@sock.addr[2]) + resp = sendport(host, port) + return sock + end + private :makeport + + def transfercmd(cmd) + if @passive + host, port = parse227(sendcmd("PASV")) + conn = open_socket(host, port) + resp = sendcmd(cmd) + if resp[0] != ?1 + raise FTPReplyError, resp + end + else + sock = makeport + resp = sendcmd(cmd) + if resp[0] != ?1 + raise FTPReplyError, resp + end + conn = sock.accept + end + return conn + end + private :transfercmd + + def getaddress + thishost = Socket.gethostname + if not thishost.index(".") + thishost = Socket.gethostbyname(thishost)[0] + end + if ENV.has_key?("LOGNAME") + realuser = ENV["LOGNAME"] + elsif ENV.has_key?("USER") + realuser = ENV["USER"] + else + realuser = "anonymous" + end + return realuser + "@" + thishost + end + private :getaddress - def storbinary(cmd, file, blocksize, callback = nil) - if iterator? - callback = Proc.new - end - use_callback = callback.is_a?(Proc) - synchronize do - voidcmd("TYPE I") - conn = transfercmd(cmd) - while TRUE - buf = file.read(blocksize) - break if buf == nil - conn.write(buf) - if use_callback - callback.call(buf) - end - end - conn.close - voidresp - end - end + def login(user = "anonymous", passwd = nil, acct = nil) + if user == "anonymous" and passwd == nil + passwd = getaddress + end + + resp = "" + synchronize do + resp = sendcmd('USER ' + user) + if resp[0] == ?3 + resp = sendcmd('PASS ' + passwd) + end + if resp[0] == ?3 + resp = sendcmd('ACCT ' + acct) + end + end + if resp[0] != ?2 + raise FTPReplyError, resp + end + @welcome = resp + end + + def retrbinary(cmd, blocksize, callback = Proc.new) + synchronize do + voidcmd("TYPE I") + conn = transfercmd(cmd) + loop do + data = conn.read(blocksize) + break if data == nil + callback.call(data) + end + conn.close + voidresp + end + end - def storlines(cmd, file, callback = nil) - if iterator? - callback = Proc.new - end - use_callback = callback.is_a?(Proc) - synchronize do - voidcmd("TYPE A") - conn = transfercmd(cmd) - while TRUE - buf = file.gets - break if buf == nil - if buf[-2, 2] != CRLF - if buf[-1] == ?\r or - buf[-1] == ?\n - buf = buf[0 .. -2] - end - buf = buf + CRLF - end - conn.write(buf) - if use_callback - callback.call(buf) - end - end - conn.close - voidresp - end - end + def retrlines(cmd, callback = nil) + if iterator? + callback = Proc.new + elsif not callback.is_a?(Proc) + callback = Proc.new {|line| print line, "\n"} + end + synchronize do + voidcmd("TYPE A") + conn = transfercmd(cmd) + loop do + line = conn.gets + break if line == nil + if line[-2, 2] == CRLF + line = line[0 .. -3] + elsif line[-1] == ?\n + line = line[0 .. -2] + end + callback.call(line) + end + conn.close + voidresp + end + end + + def storbinary(cmd, file, blocksize, callback = nil) + if iterator? + callback = Proc.new + end + use_callback = callback.is_a?(Proc) + synchronize do + voidcmd("TYPE I") + conn = transfercmd(cmd) + loop do + buf = file.read(blocksize) + break if buf == nil + conn.write(buf) + callback.call(buf) if use_callback + end + conn.close + voidresp + end + end - def getbinaryfile(remotefile, localfile, - blocksize, callback = nil) - if iterator? - callback = Proc.new - end - use_callback = callback.is_a?(Proc) - f = open(localfile, "w") - begin + def storlines(cmd, file, callback = nil) + if iterator? + callback = Proc.new + end + use_callback = callback.is_a?(Proc) + synchronize do + voidcmd("TYPE A") + conn = transfercmd(cmd) + loop do + buf = file.gets + break if buf == nil + if buf[-2, 2] != CRLF + if buf[-1] == ?\r or + buf[-1] == ?\n + buf = buf[0 .. -2] + end + buf = buf + CRLF + end + conn.write(buf) + callback.call(buf) if use_callback + end + conn.close + voidresp + end + end + + def getbinaryfile(remotefile, localfile, blocksize, callback = nil) + if iterator? + callback = Proc.new + end + use_callback = callback.is_a?(Proc) + f = open(localfile, "w") + begin f.binmode - retrbinary("RETR " + remotefile, blocksize) do |data| - f.write(data) - if use_callback - callback.call(data) - end - end - ensure - f.close + retrbinary("RETR " + remotefile, blocksize) do |data| + f.write(data) + callback.call(data) if use_callback end - end + ensure + f.close + end + end - def gettextfile(remotefile, localfile, callback = nil) - if iterator? - callback = Proc.new - end - use_callback = callback.is_a?(Proc) - f = open(localfile, "w") - begin - retrlines("RETR " + remotefile) do |line| - line = line + @return_code - f.write(line) - if use_callback - callback.call(line) - end - end - ensure - f.close - end - end + def gettextfile(remotefile, localfile, callback = nil) + if iterator? + callback = Proc.new + end + use_callback = callback.is_a?(Proc) + f = open(localfile, "w") + begin + retrlines("RETR " + remotefile) do |line| + line = line + @return_code + f.write(line) + callback.call(line) if use_callback + end + ensure + f.close + end + end - def putbinaryfile(localfile, remotefile, - blocksize, callback = nil) - if iterator? - callback = Proc.new - end - use_callback = callback.is_a?(Proc) - f = open(localfile) - begin + def putbinaryfile(localfile, remotefile, blocksize, callback = nil) + if iterator? + callback = Proc.new + end + use_callback = callback.is_a?(Proc) + f = open(localfile) + begin f.binmode - storbinary("STOR " + remotefile, f, blocksize) do |data| - if use_callback - callback.call(data) - end - end - ensure - f.close + storbinary("STOR " + remotefile, f, blocksize) do |data| + callback.call(data) if use_callback end - end + ensure + f.close + end + end + + def puttextfile(localfile, remotefile, callback = nil) + if iterator? + callback = Proc.new + end + use_callback = callback.is_a?(Proc) + f = open(localfile) + begin + storlines("STOR " + remotefile, f) do |line| + callback.call(line) if use_callback + end + ensure + f.close + end + end - def puttextfile(localfile, remotefile, callback = nil) - if iterator? - callback = Proc.new - end - use_callback = callback.is_a?(Proc) - f = open(localfile) + def acct(account) + cmd = "ACCT " + account + voidcmd(cmd) + end + + def nlst(dir = nil) + cmd = "NLST" + if dir + cmd = cmd + " " + dir + end + files = [] + retrlines(cmd) do |line| + files.push(line) + end + return files + end + + def list(*args) + cmd = "LIST" + if iterator? + callback = Proc.new + elsif args[-1].is_a?(Proc) + callback = args.pop + else + callback = nil + end + args.each do |arg| + cmd = cmd + " " + arg + end + retrlines(cmd, callback) + end + alias ls list + alias dir list + + def rename(fromname, toname) + resp = sendcmd("RNFR " + fromname) + if resp[0] != ?3 + raise FTPReplyError, resp + end + voidcmd("RNTO " + toname) + end + + def delete(filename) + resp = sendcmd("DELE " + filename) + if resp[0, 3] == "250" + return + elsif resp[0] == ?5 + raise FTPPermError, resp + else + raise FTPReplyError, resp + end + end + + def chdir(dirname) + if dirname == ".." begin - storlines("STOR " + remotefile, f) do |line| - if use_callback - callback.call(line) - end - end - ensure - f.close - end - end - - def acct(account) - cmd = "ACCT " + account - voidcmd(cmd) - end - - def nlst(dir = nil) - cmd = "NLST" - if dir - cmd = cmd + " " + dir - end - files = [] - retrlines(cmd) do |line| - files.push(line) - end - files - end - - def list(*args) - cmd = "LIST" - if iterator? - callback = Proc.new - elsif args[-1].is_a?(Proc) - callback = args.pop - else - callback = nil - end - args.each do |arg| - cmd = cmd + " " + arg - end - retrlines(cmd, callback) - end - alias ls list - alias dir list - - def rename(fromname, toname) - resp = sendcmd("RNFR " + fromname) - if resp[0] != ?3 - raise FTPReplyError, resp - end - voidcmd("RNTO " + toname) - end - - def delete(filename) - resp = sendcmd("DELE " + filename) - if resp[0, 3] == "250" - return - elsif resp[0] == ?5 - raise FTPPermError, resp - else - raise FTPReplyError, resp - end - end - - def chdir(dirname) - if dirname == ".." - begin - voidcmd("CDUP") - return - rescue FTPPermError - if $![0, 3] != "500" - raise FTPPermError, $! - end - end - end - cmd = "CWD " + dirname - voidcmd(cmd) - end - - def size(filename) - resp = sendcmd("SIZE " + filename) - if resp[0, 3] == "213" - return Integer(resp[3 .. -1].strip) - end - end - - def mkdir(dirname) - resp = sendcmd("MKD " + dirname) - return parse257(resp) - end + voidcmd("CDUP") + return + rescue FTPPermError + if $![0, 3] != "500" + raise FTPPermError, $! + end + end + end + cmd = "CWD " + dirname + voidcmd(cmd) + end - def rmdir(dirname) - voidcmd("RMD " + dirname) - end + def size(filename) + resp = sendcmd("SIZE " + filename) + if resp[0, 3] == "213" + return resp[3 .. -1].strip.to_i + end + end - def pwd - resp = sendcmd("PWD") + def mkdir(dirname) + resp = sendcmd("MKD " + dirname) + return parse257(resp) + end + + def rmdir(dirname) + voidcmd("RMD " + dirname) + end + + def pwd + resp = sendcmd("PWD") return parse257(resp) - end - alias getdir pwd - - def system - resp = sendcmd("SYST") - if resp[0, 3] != "215" - raise FTPReplyError, resp - end - return resp[4 .. -1] - end - - def abort - line = "ABOR" + CRLF - resp = "" - sock_synchronize do - print "put: ABOR\n" if @debug_mode - @sock.send(line, Socket::MSG_OOB) - resp = getmultiline - end - unless ["426", "226", "225"].include?(resp[0, 3]) - raise FTPProtoError, resp - end - resp - end - - def status - line = "STAT" + CRLF - resp = "" - sock_synchronize do - print "put: STAT\n" if @debug_mode - @sock.send(line, Socket::MSG_OOB) - resp = getresp - end - resp - end - - def mdtm(filename) - resp = sendcmd("MDTM " + filename) - if resp[0, 3] == "213" - return resp[3 .. -1].strip - end - end - - def help(arg = nil) - cmd = "HELP" - if arg - cmd = cmd + " " + arg - end - sendcmd(cmd) - end - - def quit - voidcmd("QUIT") - end - - def close - @sock.close if @sock and not @sock.closed? - end + end + alias getdir pwd + + def system + resp = sendcmd("SYST") + if resp[0, 3] != "215" + raise FTPReplyError, resp + end + return resp[4 .. -1] + end + + def abort + line = "ABOR" + CRLF + print "put: ABOR\n" if @debug_mode + @sock.send(line, Socket::MSG_OOB) + resp = getmultiline + unless ["426", "226", "225"].include?(resp[0, 3]) + raise FTPProtoError, resp + end + return resp + end + def status + line = "STAT" + CRLF + print "put: STAT\n" if @debug_mode + @sock.send(line, Socket::MSG_OOB) + return getresp + end + + def mdtm(filename) + resp = sendcmd("MDTM " + filename) + if resp[0, 3] == "213" + return resp[3 .. -1].strip + end + end + + def help(arg = nil) + cmd = "HELP" + if arg + cmd = cmd + " " + arg + end + sendcmd(cmd) + end + + def quit + voidcmd("QUIT") + end + + def close + @sock.close if @sock and not @sock.closed? + end + def closed? @sock == nil or @sock.closed? end - def parse227(resp) - if resp[0, 3] != "227" - 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.length != 6 - raise FTPProtoError, resp - end - host = numbers[0, 4].join(".") - port = (Integer(numbers[4]) << 8) + Integer(numbers[5]) - return host, port - end - private :parse227 - - def parse257(resp) - if resp[0, 3] != "257" - raise FTPReplyError, resp - end - if resp[3, 2] != ' "' - return "" - end - dirname = "" - i = 5 - n = resp.length - while i < n - c = resp[i, 1] - i = i + 1 - if c == '"' - if i > n or resp[i, 1] != '"' - break - end - i = i + 1 - end - dirname = dirname + c - end - return dirname - end - private :parse257 + def parse227(resp) + if resp[0, 3] != "227" + 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.length != 6 + raise FTPProtoError, resp + end + host = numbers[0, 4].join(".") + port = (numbers[4].to_i << 8) + numbers[5].to_i + return host, port + end + private :parse227 + + def parse257(resp) + if resp[0, 3] != "257" + raise FTPReplyError, resp + end + if resp[3, 2] != ' "' + return "" + end + dirname = "" + i = 5 + n = resp.length + while i < n + c = resp[i, 1] + i = i + 1 + if c == '"' + if i > n or resp[i, 1] != '"' + break + end + i = i + 1 + end + dirname = dirname + c + end + return dirname + end + private :parse257 end + +## ftplib.rb ends here diff --git a/lib/sync.rb b/lib/sync.rb index 1cf70a66ab..6d79cc26bf 100644 --- a/lib/sync.rb +++ b/lib/sync.rb @@ -297,8 +297,8 @@ module Sync_m private :sync_try_lock_sub def sync_synchronize(mode = EX) + sync_lock(mode) begin - sync_lock(mode) yield ensure sync_unlock diff --git a/lib/thread.rb b/lib/thread.rb index 91c588f603..709aa83c25 100644 --- a/lib/thread.rb +++ b/lib/thread.rb @@ -59,8 +59,8 @@ class Mutex end def synchronize + lock begin - lock yield ensure unlock @@ -115,22 +115,22 @@ class Queue end def pop non_block=false - item = nil - until item - Thread.critical = true - if @que.length == 0 - if non_block - Thread.critical = false - raise ThreadError, "queue empty" + Thread.critical = true + begin + loop do + if @que.length == 0 + if non_block + raise ThreadError, "queue empty" + end + @waiting.push Thread.current + Thread.stop + else + return @que.shift end - @waiting.push Thread.current - Thread.stop - else - item = @que.shift end + ensure + Thread.critical = false end - Thread.critical = false - item end def empty? diff --git a/missing/memcmp.c b/missing/memcmp.c new file mode 100644 index 0000000000..762eaf5260 --- /dev/null +++ b/missing/memcmp.c @@ -0,0 +1,21 @@ +/* + * memcmp --- compare memories. + * + */ + +int +memcmp(s1,s2,len) + char *s1; + char *s2; + register int len; +{ + register unsigned char *a = (unsigned char*)s1; + register unsigned char *b = (unsigned char*)s2; + register int tmp; + + while (len--) { + if (tmp = *a++ - *b++) + return tmp; + } + return 0; +} @@ -210,9 +210,9 @@ struct_alloc(klass, values) else { NEWOBJ(st, struct RStruct); OBJSETUP(st, klass, T_STRUCT); - st->len = n; - st->ptr = 0; /* avoid GC crashing */ + st->len = 0; /* avoid GC crashing */ st->ptr = ALLOC_N(VALUE, n); + st->len = n; MEMCPY(st->ptr, RARRAY(values)->ptr, VALUE, RARRAY(values)->len); memclear(st->ptr+RARRAY(values)->len, n - RARRAY(values)->len); @@ -318,9 +318,9 @@ struct_clone(s) { NEWOBJ(st, struct RStruct); CLONESETUP(st, s); - st->len = RSTRUCT(s)->len; - st->ptr = 0; /* avoid GC crashing */ + st->len = 0; /* avoid GC crashing */ st->ptr = ALLOC_N(VALUE, RSTRUCT(s)->len); + st->len = RSTRUCT(s)->len; MEMCPY(st->ptr, RSTRUCT(s)->ptr, VALUE, st->len); return (VALUE)st; |