L
Lloyd Zusman
--=-=-=
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 <termios.h>
#include <unistd.h>
#include <string.h>
@@ -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
(e-mail address removed)
God bless you.
--=-=-=--
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 <termios.h>
#include <unistd.h>
#include <string.h>
@@ -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
(e-mail address removed)
God bless you.
--=-=-=--