ruby-changes:16610
From: yugui <ko1@a...>
Date: Sat, 10 Jul 2010 13:06:24 +0900 (JST)
Subject: [ruby-changes:16610] Ruby:r28604 (ruby_1_9_2): merges r28561 from trunk into ruby_1_9_2.
yugui 2010-07-10 13:06:05 +0900 (Sat, 10 Jul 2010) New Revision: 28604 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28604 Log: merges r28561 from trunk into ruby_1_9_2. -- * missing/close.c: ignore ECONNRESET. FreeBSD wrongly sets ECONNRESET on close(2) and it causes false-negative exceptions. [ruby-dev:41778] * configure.in: ditto. Added files: branches/ruby_1_9_2/missing/close.c Modified files: branches/ruby_1_9_2/ChangeLog branches/ruby_1_9_2/configure.in branches/ruby_1_9_2/include/ruby/ruby.h Index: ruby_1_9_2/include/ruby/ruby.h =================================================================== --- ruby_1_9_2/include/ruby/ruby.h (revision 28603) +++ ruby_1_9_2/include/ruby/ruby.h (revision 28604) @@ -1421,6 +1421,17 @@ #define snprintf ruby_snprintf #define vsnprintf ruby_vsnprintf +#ifdef __FreeBSD__ +#undef getpeername +#define getpeername ruby_getpeername +#undef getsockname +#define getsockname ruby_getsockname +#undef shutdown +#define shutdown ruby_shutdown +#undef close +#define close ruby_close +#endif + #if defined(__cplusplus) #if 0 { /* satisfy cc-mode */ Index: ruby_1_9_2/configure.in =================================================================== --- ruby_1_9_2/configure.in (revision 28603) +++ ruby_1_9_2/configure.in (revision 28604) @@ -921,6 +921,10 @@ AC_DEFINE(BROKEN_SETREGID, 1) ac_cv_sizeof_rlim_t=8], [freebsd*], [ LIBS="-lm $LIBS" + ac_cv_func_getpeername=no + ac_cv_func_getsockname=no + ac_cv_func_shutdown=no + ac_cv_func_close=no ], [dragonfly*], [ LIBS="-lm $LIBS" ], @@ -1114,6 +1118,7 @@ rb_cv_broken_glibc_ia64_erfc=no)]) AS_CASE([$rb_cv_broken_glibc_ia64_erfc],[yes],[ac_cv_func_erf=no]) +AS_CASE(["$target_os"],[freebsd],[],[AC_REPLACE_FUNCS(close)]) AC_REPLACE_FUNCS(dup2 memmove strerror\ strchr strstr crypt flock\ isnan finite isinf hypot acosh erf tgamma lgamma_r cbrt \ @@ -1135,7 +1140,7 @@ setitimer setruid seteuid setreuid setresuid setproctitle socketpair\ setrgid setegid setregid setresgid issetugid pause lchown lchmod\ getpgrp setpgrp getpgid setpgid initgroups getgroups setgroups\ - getpriority getrlimit setrlimit sysconf \ + getpriority getrlimit setrlimit sysconf close\ dlopen sigprocmask sigaction sigsetjmp _setjmp _longjmp\ setsid telldir seekdir fchmod cosh sinh tanh log2 round\ setuid setgid daemon select_large_fdset setenv unsetenv\ Index: ruby_1_9_2/ChangeLog =================================================================== --- ruby_1_9_2/ChangeLog (revision 28603) +++ ruby_1_9_2/ChangeLog (revision 28604) @@ -1,3 +1,11 @@ +Wed Jul 7 10:26:20 2010 NARUSE, Yui <naruse@r...> + + * missing/close.c: ignore ECONNRESET. + FreeBSD wrongly sets ECONNRESET on close(2) and + it causes false-negative exceptions. [ruby-dev:41778] + + * configure.in: ditto. + Sun Jul 4 17:13:14 2010 Nobuyoshi Nakada <nobu@r...> * io.c (swallow, prepare_getline_args, rb_io_getline_1): fix for Index: ruby_1_9_2/missing/close.c =================================================================== --- ruby_1_9_2/missing/close.c (revision 0) +++ ruby_1_9_2/missing/close.c (revision 28604) @@ -0,0 +1,55 @@ +/* Ignore ECONNRESET of FreeBSD */ +#include <errno.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/socket.h> + +int +ruby_getpeername(int s, struct sockaddr * name, + socklen_t * namelen) +{ + errno = 0; + s = getpeername(s, name, namelen); + if (errno == ECONNRESET) { + errno = 0; + s = 0; + } + return s; +} + +int +ruby_getsockname(int s, struct sockaddr * name, + socklen_t * namelen) +{ + errno = 0; + s = getsockname(s, name, namelen); + if (errno == ECONNRESET) { + errno = 0; + s = 0; + } + return s; +} + +int +ruby_shutdown(int s, int how) +{ + errno = 0; + s = shutdown(s, how); + if (errno == ECONNRESET) { + errno = 0; + s = 0; + } + return s; +} + +int +ruby_close(int s) +{ + errno = 0; + s = close(s); + if (errno == ECONNRESET) { + errno = 0; + s = 0; + } + return s; +} -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/