29 #define EXIT_SUCCESS 0
33 #define WIFEXITED(status) 1
37 #define WEXITSTATUS(status) (status)
42 #define REPORTBUG_MSG \
44 "You may have encountered a bug in the Ruby interpreter" \
45 " or extension libraries.\n" \
46 "Bug reports are welcome.\n" \
47 "For details: http://www.ruby-lang.org/bugreport.html\n\n" \
52 #define defined_error(name, num) if (err == (num)) return (name);
53 #define undefined_error(name)
56 #undef undefined_error
67 return snprintf(buf, len,
"%s: ", file);
70 return snprintf(buf, len,
"%s:%d: ", file, line);
87 vsnprintf((
char*)buf+n, len-n, fmt, args);
98 vsnprintf((
char*)buf+n, len-n, fmt, args);
160 snprintf(buf, BUFSIZ,
"warning: %s", fmt);
176 snprintf(buf, BUFSIZ,
"warning: %s", fmt);
203 snprintf(buf, BUFSIZ,
"warning: %s", fmt);
219 snprintf(buf, BUFSIZ,
"warning: %s", fmt);
251 if ((ssize_t)fwrite(buf, 1, len, out) == (ssize_t)len ||
252 (ssize_t)fwrite(buf, 1, len, (out = stdout)) == (ssize_t)len) {
254 fputs(
"[BUG] ", out);
255 vfprintf(out, fmt, args);
268 const char *file =
NULL;
280 #if defined(_WIN32) && defined(RT_VER) && RT_VER >= 80
281 _set_abort_behavior( 0, _CALL_REPORTFAULT);
291 rb_bug(
"%s: errno == 0 (NOERROR)", mesg);
305 #define write_or_abort(fd, str, len) (write((fd), (str), (len)) < 0 ? abort() : (void)0)
306 #define WRITE_CONST(fd,str) write_or_abort((fd),(str),sizeof(str) - 1)
315 if (errno_arg == 0) {
322 errno_str =
"undefined errno";
382 rb_bug(
"undef leaked to the Ruby space");
387 while (type < typeend) {
388 if (type->
type == t) {
412 if (xt >
T_MASK && xt <= 0x3f) {
413 rb_fatal(
"unknown type 0x%x (0x%x given, probably comes from extension library for ruby 1.8)", t, xt);
415 rb_bug(
"unknown type 0x%x (0x%x given)", t, xt);
423 if (child == parent)
return 1;
443 static const char mesg[] =
"wrong argument type %s (expected %s)";
548 if (argc == 0)
return self;
549 if (argc == 1 &&
self == argv[0])
return self;
661 static const char err[] =
"backtrace must be Array of String";
707 VALUE mesg, backtrace;
710 if (exc == obj)
return Qtrue;
714 ID id_message, id_backtrace;
716 CONST_ID(id_backtrace,
"backtrace");
746 if (argc > 0 &&
FIXNUM_P(argv[0])) {
783 if (
NIL_P(status_val))
821 name = (argc > 1) ? argv[--argc] :
Qnil;
878 #define NAME_ERR_MESG_COUNT 3
887 #define name_err_mesg_free RUBY_TYPED_DEFAULT_FREE
928 if (obj1 == obj2)
return Qtrue;
951 const char *desc = 0;
976 if (desc && desc[0] !=
'#') {
1056 if (!
st_lookup(syserr_tbl, n, &error)) {
1072 if (!
st_lookup(syserr_tbl, n, &error)) {
1075 snprintf(name,
sizeof(name),
"E%03d", n);
1095 #if !defined(_WIN32)
1106 error = mesg; mesg =
Qnil;
1109 klass = (
VALUE)data;
1114 RBASIC(
self)->klass = klass;
1122 else err =
"unknown error";
1579 va_start(args, fmt);
1591 va_start(args, fmt);
1601 "%s() function is unimplemented on this machine",
1611 va_start(args, fmt);
1625 rb_bug(
"rb_sys_fail(%s) - errno == 0", mesg ? mesg :
"");
1636 if (!mesg) mesg =
Qnil;
1639 rb_bug(
"rb_sys_fail_str(%s) - errno == 0", s);
1725 snprintf(buf, BUFSIZ,
"warning: %s", fmt);
1728 va_start(args, fmt);
1746 #undef rb_check_frozen
1757 #define defined_error(name, num) set_syserr((num), (name));
1758 #define undefined_error(name) set_syserr(0, (name));
1760 #undef defined_error
1761 #undef undefined_error