summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--ext/curses/curses.c2
-rw-r--r--signal.c8
3 files changed, 14 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 424c7091fd..d5b79e0ae5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Thu Dec 4 13:56:31 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * ext/curses/curses.c (window_getch): avoid ISPRINT() macro which
+ has an issue with OpenSolaris. [ruby-core:20189]
+
+ * signal.c (ruby_signal): EINVAL from sigaction(2) is not a bug.
+
Thu Dec 4 11:38:40 2008 Akinori MUSHA <knu@iDaemons.org>
* vm_method.c (rb_obj_respond_to): Remove a duplicated rdoc
diff --git a/ext/curses/curses.c b/ext/curses/curses.c
index 778bee4da9..928c403a84 100644
--- a/ext/curses/curses.c
+++ b/ext/curses/curses.c
@@ -416,7 +416,7 @@ curses_getch(VALUE obj)
curses_stdscr();
c = getch();
if (c == EOF) return Qnil;
- if (ISPRINT(c)) {
+ if (rb_isprint(c)) {
char ch = (char)c;
return rb_locale_str_new(&ch, 1);
diff --git a/signal.c b/signal.c
index cb2fcb3557..91aa7c418e 100644
--- a/signal.c
+++ b/signal.c
@@ -15,6 +15,7 @@
#include "vm_core.h"
#include <signal.h>
#include <stdio.h>
+#include <errno.h>
#ifdef _WIN32
typedef LONG rb_atomic_t;
@@ -474,8 +475,11 @@ ruby_signal(int signum, sighandler_t handler)
if (signum == SIGSEGV)
sigact.sa_flags |= SA_ONSTACK;
#endif
- if (sigaction(signum, &sigact, &old) < 0)
- rb_bug("sigaction error.\n");
+ if (sigaction(signum, &sigact, &old) < 0) {
+ if (errno != 0 && errno != EINVAL) {
+ rb_bug("sigaction error.\n");
+ }
+ }
return old.sa_handler;
}