From: Lloyd Zusman Date: 2005-05-27T15:56:27+09:00 Subject: ruby-termios: Patch to make it work under both 1.8 and 1.9 --=-=-= I recently had problems getting ruby-termios to compile properly under ruby 1.9. It turns out that "rubyio.h" has changed between these two ruby versions, and therefore, I offer the following patch, which should enable ruby-termios to compile and run under all 1.8 and 1.9 ruby versions. --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=ruby-termios.patch Content-Description: Allows ruby-termios to work under 1.8.x and 1.9.x --- termios.c.orig 2005-05-27 02:37:18.000000000 -0400 +++ termios.c 2005-05-27 02:39:20.000000000 -0400 @@ -8,6 +8,14 @@ #include "ruby.h" #include "rubyio.h" +#include "version.h" + +#if RUBY_VERSION_CODE >= 190 +# define FPTR_FILE fptr->stdio_file +#else +# define FPTR_FILE fptr->f +#endif + #include #include #include @@ -201,7 +209,7 @@ Check_Type(io, T_FILE); GetOpenFile(io, fptr); - if (tcgetattr(fileno(fptr->f), &t) < 0) { + if (tcgetattr(fileno(FPTR_FILE), &t) < 0) { rb_raise(rb_eRuntimeError, "can't get terminal parameters (%s)", strerror(errno)); } @@ -243,7 +251,7 @@ old = termios_tcgetattr(io); GetOpenFile(io, fptr); Termios_to_termios(param, &t); - if (tcsetattr(fileno(fptr->f), tcsetattr_option, &t) < 0) { + if (tcsetattr(fileno(FPTR_FILE), tcsetattr_option, &t) < 0) { rb_raise(rb_eRuntimeError, "can't set terminal parameters (%s)", strerror(errno)); } @@ -268,7 +276,7 @@ Check_Type(duration, T_FIXNUM); GetOpenFile(io, fptr); - if (tcsendbreak(fileno(fptr->f), FIX2INT(duration)) < 0) { + if (tcsendbreak(fileno(FPTR_FILE), FIX2INT(duration)) < 0) { rb_raise(rb_eRuntimeError, "can't transmits break (%s)", strerror(errno)); } @@ -292,7 +300,7 @@ Check_Type(io, T_FILE); GetOpenFile(io, fptr); - if (tcdrain(fileno(fptr->f)) < 0) { + if (tcdrain(fileno(FPTR_FILE)) < 0) { rb_raise(rb_eRuntimeError, "can't drain (%s)", strerror(errno)); } @@ -322,7 +330,7 @@ } GetOpenFile(io, fptr); - if (tcflush(fileno(fptr->f), queue_selector) < 0) { + if (tcflush(fileno(FPTR_FILE), queue_selector) < 0) { rb_raise(rb_eRuntimeError, "can't flush (%s)", strerror(errno)); } @@ -352,7 +360,7 @@ } GetOpenFile(io, fptr); - if (tcflow(fileno(fptr->f), action) < 0) { + if (tcflow(fileno(FPTR_FILE), action) < 0) { rb_raise(rb_eRuntimeError, "can't control transmitting data flow (%s)", strerror(errno)); } @@ -376,7 +384,7 @@ Check_Type(io, T_FILE); GetOpenFile(io, fptr); - if ((pid = tcgetpgrp(fileno(fptr->f))) < 0) { + if ((pid = tcgetpgrp(fileno(FPTR_FILE))) < 0) { rb_raise(rb_eRuntimeError, "can't get process group id (%s)", strerror(errno)); } @@ -401,7 +409,7 @@ Check_Type(pgrpid, T_FIXNUM); GetOpenFile(io, fptr); - if (tcsetpgrp(fileno(fptr->f), FIX2INT(pgrpid)) < 0) { + if (tcsetpgrp(fileno(FPTR_FILE), FIX2INT(pgrpid)) < 0) { rb_raise(rb_eRuntimeError, "can't set process group id (%s)", strerror(errno)); } --=-=-= -- Lloyd Zusman ljz@asfast.com God bless you. --=-=-=--