summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog14
-rw-r--r--error.c37
-rw-r--r--include/ruby/intern.h1
-rw-r--r--include/ruby/ruby.h1
-rw-r--r--signal.c2
-rw-r--r--thread_pthread.c22
6 files changed, 52 insertions, 25 deletions
diff --git a/ChangeLog b/ChangeLog
index 04a547bf3b..767443f8a2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+Tue Nov 24 20:01:49 2009 Tanaka Akira <akr@fsij.org>
+
+ * include/ruby/ruby.h (rb_bug_errno): declared.
+
+ * include/ruby/intern.h (rb_strerrno): declaration removed.
+
+ * error.c (rb_strerrno): make it static. return NULL for unknown
+ errors.
+ (rb_bug_errno): defined.
+
+ * thread_pthread.c: use rb_bug_errno.
+
+ * signal.c (ruby_signal): use rb_bug_errno.
+
Tue Nov 24 10:17:38 2009 NARUSE, Yui <naruse@ruby-lang.org>
* file.c (file_path_convert): fix fs_encoding is not assign.
diff --git a/error.c b/error.c
index 9633e9e252..55834a3cd8 100644
--- a/error.c
+++ b/error.c
@@ -24,6 +24,17 @@
extern const char ruby_description[];
+static const char *
+rb_strerrno(int err)
+{
+#define defined_error(name, num) if (err == num) return name;
+#define undefined_error(name)
+#include "known_errors.inc"
+#undef defined_error
+#undef undefined_error
+ return NULL;
+}
+
static int
err_position_0(char *buf, long len, const char *file, int line)
{
@@ -236,6 +247,20 @@ rb_bug(const char *fmt, ...)
}
void
+rb_bug_errno(const char *mesg, int errno_arg)
+{
+ if (errno_arg == 0)
+ rb_bug("%s: errno == 0 (NOERROR)", mesg);
+ else {
+ const char *errno_str = rb_strerrno(errno_arg);
+ if (errno_str)
+ rb_bug("%s: %s (%s)", mesg, strerror(errno_arg), errno_str);
+ else
+ rb_bug("%s: %s (%d)", mesg, strerror(errno_arg), errno_arg);
+ }
+}
+
+void
rb_compile_bug(const char *file, int line, const char *fmt, ...)
{
va_list args;
@@ -1258,18 +1283,6 @@ Init_syserr(void)
#undef undefined_error
}
-const char *
-rb_strerrno(int err)
-{
- if (err == 0) return "NOERROR";
-#define defined_error(name, num) if (err == num) return name;
-#define undefined_error(name)
-#include "known_errors.inc"
-#undef defined_error
-#undef undefined_error
- return "UNKNOWNERROR";
-}
-
static void
err_append(const char *s)
{
diff --git a/include/ruby/intern.h b/include/ruby/intern.h
index d7ec07ddfc..fd37ecab2a 100644
--- a/include/ruby/intern.h
+++ b/include/ruby/intern.h
@@ -200,7 +200,6 @@ PRINTF_ARGS(void rb_compile_error_append(const char*, ...), 1, 2);
NORETURN(void rb_load_fail(const char*));
NORETURN(void rb_error_frozen(const char*));
void rb_check_frozen(VALUE);
-const char *rb_strerrno(int);
/* eval.c */
int rb_sourceline(void);
const char *rb_sourcefile(void);
diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h
index 97ad41c70b..568d61ab47 100644
--- a/include/ruby/ruby.h
+++ b/include/ruby/ruby.h
@@ -1100,6 +1100,7 @@ VALUE *rb_ruby_debug_ptr(void);
PRINTF_ARGS(NORETURN(void rb_raise(VALUE, const char*, ...)), 2, 3);
PRINTF_ARGS(NORETURN(void rb_fatal(const char*, ...)), 1, 2);
PRINTF_ARGS(NORETURN(void rb_bug(const char*, ...)), 1, 2);
+NORETURN(void rb_bug_errno(const char*, int));
NORETURN(void rb_sys_fail(const char*));
NORETURN(void rb_mod_sys_fail(VALUE, const char*));
NORETURN(void rb_iter_break(void));
diff --git a/signal.c b/signal.c
index a2fce05d0e..43ed80b85b 100644
--- a/signal.c
+++ b/signal.c
@@ -487,7 +487,7 @@ ruby_signal(int signum, sighandler_t handler)
#endif
if (sigaction(signum, &sigact, &old) < 0) {
if (errno != 0 && errno != EINVAL) {
- rb_bug("sigaction error.\n");
+ rb_bug_errno("sigaction", errno);
}
}
return old.sa_handler;
diff --git a/thread_pthread.c b/thread_pthread.c
index 3e5e94dd26..6d011b81be 100644
--- a/thread_pthread.c
+++ b/thread_pthread.c
@@ -34,7 +34,7 @@ native_mutex_lock(pthread_mutex_t *lock)
{
int r;
if ((r = pthread_mutex_lock(lock)) != 0) {
- rb_bug("pthread_mutex_lock: %s (%s)", strerror(r), rb_strerrno(r));
+ rb_bug_errno("pthread_mutex_lock", r);
}
}
@@ -43,7 +43,7 @@ native_mutex_unlock(pthread_mutex_t *lock)
{
int r;
if ((r = pthread_mutex_unlock(lock)) != 0) {
- rb_bug("pthread_mutex_unlock: %s (%s)", strerror(r), rb_strerrno(r));
+ rb_bug_errno("pthread_mutex_unlock", r);
}
}
@@ -56,7 +56,7 @@ native_mutex_trylock(pthread_mutex_t *lock)
return EBUSY;
}
else {
- rb_bug("pthread_mutex_trylock: %s (%s)", strerror(r), rb_strerrno(r));
+ rb_bug_errno("pthread_mutex_trylock", r);
}
}
return 0;
@@ -67,7 +67,7 @@ native_mutex_initialize(pthread_mutex_t *lock)
{
int r = pthread_mutex_init(lock, 0);
if (r != 0) {
- rb_bug("pthread_mutex_init: %s (%s)", strerror(r), rb_strerrno(r));
+ rb_bug_errno("pthread_mutex_init", r);
}
}
@@ -78,7 +78,7 @@ native_mutex_destroy(pthread_mutex_t *lock)
{
int r = pthread_mutex_destroy(lock);
if (r != 0) {
- rb_bug("pthread_mutex_destroy: %s (%s)", strerror(r), rb_strerrno(r));
+ rb_bug_errno("pthread_mutex_destroy", r);
}
}
@@ -87,7 +87,7 @@ native_cond_initialize(pthread_cond_t *cond)
{
int r = pthread_cond_init(cond, 0);
if (r != 0) {
- rb_bug("pthread_cond_init: %s (%s)", strerror(r), rb_strerrno(r));
+ rb_bug_errno("pthread_cond_init", r);
}
}
@@ -96,7 +96,7 @@ native_cond_destroy(pthread_cond_t *cond)
{
int r = pthread_cond_destroy(cond);
if (r != 0) {
- rb_bug("pthread_cond_destroy: %s (%s)", strerror(r), rb_strerrno(r));
+ rb_bug_errno("pthread_cond_destroy", r);
}
}
@@ -304,7 +304,7 @@ ruby_init_stack(volatile VALUE *addr
}
#define CHECK_ERR(expr) \
- {int err = (expr); if (err) {rb_bug("%s: %s (%s)", #expr, strerror(err), rb_strerrno(err));}}
+ {int err = (expr); if (err) {rb_bug_errno(#expr, err);}}
static int
native_thread_init_stack(rb_thread_t *th)
@@ -621,7 +621,7 @@ native_sleep(rb_thread_t *th, struct timeval *tv)
thread_debug("native_sleep: pthread_cond_wait start\n");
r = pthread_cond_wait(&th->native_thread_data.sleep_cond,
&th->interrupt_lock);
- if (r) rb_bug("pthread_cond_wait: %s (%s)", strerror(r), rb_strerrno(r));
+ if (r) rb_bug_errno("pthread_cond_wait", r);
thread_debug("native_sleep: pthread_cond_wait end\n");
}
else {
@@ -630,7 +630,7 @@ native_sleep(rb_thread_t *th, struct timeval *tv)
(unsigned long)ts.tv_sec, ts.tv_nsec);
r = pthread_cond_timedwait(&th->native_thread_data.sleep_cond,
&th->interrupt_lock, &ts);
- if (r && r != ETIMEDOUT) rb_bug("pthread_cond_timedwait: %s (%s)", strerror(r), rb_strerrno(r));
+ if (r && r != ETIMEDOUT) rb_bug_errno("pthread_cond_timedwait", r);
thread_debug("native_sleep: pthread_cond_timedwait end (%d)\n", r);
}
@@ -763,7 +763,7 @@ thread_timer(void *dummy)
else if (err == 0 || err == EINTR) {
if (rb_signal_buff_size() == 0) break;
}
- else rb_bug("thread_timer/timedwait: %s (%s)", strerror(err), rb_strerrno(err));
+ else rb_bug_errno("thread_timer/timedwait", err);
#if !defined(__CYGWIN__) && !defined(__SYMBIAN32__)
if (signal_thread_list_anchor.next) {