From: "h.shirosaki (Hiroshi Shirosaki)" Date: 2012-10-12T10:15:39+09:00 Subject: [ruby-core:47917] [Backport93 - Backport #6127] IO#ioctl range error in 1.9.3 Issue #6127 has been updated by h.shirosaki (Hiroshi Shirosaki). I have a build error of ruby_1_9_3 branch at r37146 with mingw. It seems due to r37138. compiling ../io.c ../io.c: In function 'rb_cloexec_fcntl_dupfd': ../io.c:213:21: error: 'F_DUPFD' undeclared (first use in this function) ../io.c:213:21: note: each undeclared identifier is reported only once for each function it appears in ../io.c: In function 'rb_io_each_byte': ../io.c:3081:15: warning: variable 'e' set but not used [-Wunused-but-set-variable] ../io.c: In function 'rb_io_advise': ../io.c:7892:16: warning: variable 'l' set but not used [-Wunused-but-set-variable] ../io.c:7892:11: warning: variable 'off' set but not used [-Wunused-but-set-variable] ../io.c: At top level: ../io.c:1575:14: warning: 'nogvl_fsync' defined but not used [-Wunused-function] make: *** [io.o] Error 1 Here is a patch. Index: io.c =================================================================== --- io.c (revision 37146) +++ io.c (working copy) @@ -209,8 +209,10 @@ else { ret = fcntl(fd, F_DUPFD, minfd); } +#elif defined(F_DUPFD) + ret = fcntl(fd, F_DUPFD, minfd); #else - ret = fcntl(fd, F_DUPFD, minfd); + ret = -1; #endif if (ret == -1) return -1; rb_maygvl_fd_fix_cloexec(ret); ---------------------------------------- Backport #6127: IO#ioctl range error in 1.9.3 https://bugs.ruby-lang.org/issues/6127#change-30360 Author: dlampa (Donovan Lampa) Status: Closed Priority: Normal Assignee: naruse (Yui NARUSE) Category: Target version: In 32-bit implementations of 1.9.3 passing an (apparently) unsigned value (BIOCIMMEDIATE = 0x80044270) to ioctl throws range error: ruby-1.9.3-p125 :001 > a,b = IO.pipe => [#, #] ruby-1.9.3-p125 :002 > a.ioctl(0x80044270, "\x01") RangeError: bignum too big to convert into `long' from (irb):2:in `ioctl' from (irb):2 from /Users/dlampa/.rvm/rubies/ruby-1.9.3-p125/bin/irb:16:in `
' ruby-1.9.3-p125 :001 > 0x80044270.class => Bignum When in 32-bit 1.9.1 and 1.9.2 it does not: ruby-1.9.1-p243 :001 > a,b = IO.pipe => [#, #] ruby-1.9.1-p243 :002 > a.ioctl(0x80044270, "\x01") Errno::ENOTTY: Inappropriate ioctl for device from (irb):2:in `ioctl' from (irb):2 from /Users/dlampa/.rvm/rubies/ruby-1.9.1-p243/bin/irb:16:in `
' ruby-1.9.1-p243 :001 > 0x80044270.class => Bignum OS is [x86_64-darwin10.8.0] however ruby was compiled as 32-bit through rvm using: rvm_archflags="-arch i386" CFLAGS="-arch i386" LDFLAGS="-arch i386" rvm install [ruby-version] --patch osx-arch-fix The patch is installed in ~/.rvm/patches/ruby/1.9.3/ and is as follows: --- a/Makefile.in 2010-11-11 15:54:26.000000000 -0600 +++ b/Makefile.in 2010-11-11 15:55:24.000000000 -0600 @@ -55,7 +55,7 @@ XLDFLAGS = @XLDFLAGS@ $(EXTLDFLAGS) EXTLIBS = LIBS = @LIBS@ $(EXTLIBS) MISSING = @LIBOBJS@ @ALLOCA@ -LDSHARED = @LIBRUBY_LDSHARED@ +LDSHARED = @LIBRUBY_LDSHARED@ $(LDFLAGS) DLDFLAGS = @LIBRUBY_DLDFLAGS@ $(EXTLDFLAGS) @ARCH_FLAG@ SOLIBS = @SOLIBS@ MAINLIBS = @MAINLIBS@ this issue appears to be related (http://bugs.ruby-lang.org/issues/5429), but I don't speak Japanese. -- http://bugs.ruby-lang.org/