diff --git a/ChangeLog b/ChangeLog index 7e5f150eec..9042c62221 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +Fri Aug 15 12:01:43 2003 Nobuyoshi Nakada + + * configure.in (HUGE_ST_INO): check whether struct stat.st_ino + is larger than long. [ruby-dev:21194] + http://www.geocities.co.jp/SiliconValley-PaloAlto/1409/ruby/beos.html + + * error.c (syserr_eqq): errno might exceed Fixnum limit. + + * error.c (Init_Exception): moved base initialization from + init_syserr(). + + * inits.c (rb_call_inits): postpone initializing errnos until + Bignum is available. + +Fri Aug 15 12:01:43 2003 Nobuyoshi Nakada + + * ext/curses/curses.c (_XOPEN_SOURCE_EXTENDED): needed to let + keyname() and so on be declared. + + * ext/curses/curses.c (curses_resizeterm, window_resize): + arguments conflicted with macros in term.h. + + * ext/curses/curses.c (Curses module methods): ensure + initialized. [ruby-dev:21191] + Fri Aug 15 02:08:53 2003 Yukihiro Matsumoto * gc.c (id2ref): recycle check should be done by klass == 0. diff --git a/configure.in b/configure.in index 8486894869..77b3b0bbf4 100644 --- a/configure.in +++ b/configure.in @@ -624,6 +624,18 @@ if test "$rb_cv_need_io_flush_before_seek" = yes; then AC_DEFINE(NEED_IO_FLUSH_BEFORE_SEEK, 1) fi +AC_CACHE_CHECK([whether st_ino is huge], rb_cv_huge_st_ino, +[AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([ +#include +struct stat test_stat; +], [sizeof(test_stat.st_ino)>sizeof(long)])], +rb_cv_huge_st_ino=yes, +rb_cv_huge_st_ino=no) +]) +if test $rb_cv_huge_st_ino = yes; then + AC_DEFINE(HUGE_ST_INO) +fi + case "$target_cpu" in m68*|i?86|sparc) rb_cv_stack_grow_dir=-1;; esac diff --git a/error.c b/error.c index 674c87d122..e1f62aa2fc 100644 --- a/error.c +++ b/error.c @@ -607,7 +607,7 @@ static VALUE syserr_eqq(self, exc) VALUE self, exc; { - VALUE num; + VALUE num, e; if (!rb_obj_is_kind_of(exc, rb_eSystemCallError)) return Qfalse; if (self == rb_eSystemCallError) return Qtrue; @@ -621,7 +621,8 @@ syserr_eqq(self, exc) } num = rb_const_get(klass, rb_intern("Errno")); } - if (rb_const_get(self, rb_intern("Errno")) == num) + e = rb_const_get(self, rb_intern("Errno")); + if (FIXNUM_P(num) ? num == e : rb_equal(num, e)) return Qtrue; return Qfalse; } @@ -671,7 +672,13 @@ Init_Exception() rb_eSecurityError = rb_define_class("SecurityError", rb_eStandardError); rb_eNoMemError = rb_define_class("NoMemoryError", rb_eException); - init_syserr(); + syserr_tbl = st_init_numtable(); + rb_eSystemCallError = rb_define_class("SystemCallError", rb_eStandardError); + rb_define_method(rb_eSystemCallError, "initialize", syserr_initialize, -1); + rb_define_method(rb_eSystemCallError, "errno", syserr_errno, 0); + rb_define_singleton_method(rb_eSystemCallError, "===", syserr_eqq, 1); + + rb_mErrno = rb_define_module("Errno"); rb_define_global_function("warn", rb_warn_m, 1); } @@ -805,16 +812,9 @@ rb_check_frozen(obj) if (OBJ_FROZEN(obj)) rb_error_frozen(rb_obj_classname(obj)); } -static void -init_syserr() +void +Init_syserr() { - syserr_tbl = st_init_numtable(); - rb_eSystemCallError = rb_define_class("SystemCallError", rb_eStandardError); - rb_define_method(rb_eSystemCallError, "initialize", syserr_initialize, -1); - rb_define_method(rb_eSystemCallError, "errno", syserr_errno, 0); - rb_define_singleton_method(rb_eSystemCallError, "===", syserr_eqq, 1); - - rb_mErrno = rb_define_module("Errno"); #ifdef EPERM set_syserr(EPERM, "EPERM"); #endif diff --git a/ext/curses/curses.c b/ext/curses/curses.c index 52c8ab1e7f..e1080f1bd8 100644 --- a/ext/curses/curses.c +++ b/ext/curses/curses.c @@ -15,6 +15,10 @@ #include "ruby.h" +#include +#include "rubyio.h" + +#define _XOPEN_SOURCE_EXTENDED 1 #if defined(HAVE_NCURSES_H) # include #elif defined(HAVE_NCURSES_CURSES_H) @@ -24,19 +28,21 @@ # include #else # include -# if (defined(__bsdi__) || defined(__NetBSD__) || defined(__APPLE__)) && !defined(_maxx) +# if defined(__bsdi__) || defined(__NetBSD__) || defined(__APPLE__) +# if !defined(_maxx) # define _maxx maxx # endif -# if (defined(__bsdi__) || defined(__NetBSD__) || defined(__APPLE__)) && !defined(_maxy) +# if !defined(_maxy) # define _maxy maxy # endif -# if (defined(__bsdi__) || defined(__NetBSD__) || defined(__APPLE__)) && !defined(_begx) +# if !defined(_begx) # define _begx begx # endif -# if (defined(__bsdi__) || defined(__NetBSD__) || defined(__APPLE__)) && !defined(_begy) +# if !defined(_begy) # define _begy begy # endif #endif +#endif #ifdef HAVE_INIT_COLOR # define USE_COLOR 1 @@ -47,9 +53,6 @@ # define USE_MOUSE 1 #endif -#include -#include "rubyio.h" - static VALUE mCurses; static VALUE mKey; static VALUE cWindow; @@ -174,6 +177,7 @@ static VALUE curses_clear(obj) VALUE obj; { + curses_stdscr(); wclear(stdscr); return Qnil; } @@ -183,6 +187,7 @@ static VALUE curses_refresh(obj) VALUE obj; { + curses_stdscr(); refresh(); return Qnil; } @@ -192,6 +197,7 @@ static VALUE curses_doupdate(obj) VALUE obj; { + curses_stdscr(); #ifdef HAVE_DOUPDATE doupdate(); #else @@ -205,6 +211,7 @@ static VALUE curses_echo(obj) VALUE obj; { + curses_stdscr(); echo(); return Qnil; } @@ -214,6 +221,7 @@ static VALUE curses_noecho(obj) VALUE obj; { + curses_stdscr(); noecho(); return Qnil; } @@ -223,6 +231,7 @@ static VALUE curses_raw(obj) VALUE obj; { + curses_stdscr(); raw(); return Qnil; } @@ -232,6 +241,7 @@ static VALUE curses_noraw(obj) VALUE obj; { + curses_stdscr(); noraw(); return Qnil; } @@ -241,6 +251,7 @@ static VALUE curses_cbreak(obj) VALUE obj; { + curses_stdscr(); cbreak(); return Qnil; } @@ -250,6 +261,7 @@ static VALUE curses_nocbreak(obj) VALUE obj; { + curses_stdscr(); nocbreak(); return Qnil; } @@ -259,6 +271,7 @@ static VALUE curses_nl(obj) VALUE obj; { + curses_stdscr(); nl(); return Qnil; } @@ -268,6 +281,7 @@ static VALUE curses_nonl(obj) VALUE obj; { + curses_stdscr(); nonl(); return Qnil; } @@ -278,6 +292,7 @@ curses_beep(obj) VALUE obj; { #ifdef HAVE_BEEP + curses_stdscr(); beep(); #endif return Qnil; @@ -289,6 +304,7 @@ curses_flash(obj) VALUE obj; { #ifdef HAVE_FLASH + curses_stdscr(); flash(); #endif return Qnil; @@ -301,6 +317,7 @@ curses_ungetch(obj, ch) VALUE ch; { #ifdef HAVE_UNGETCH + curses_stdscr(); ungetch(NUM2INT(ch)); #else rb_notimplement(); @@ -315,6 +332,7 @@ curses_setpos(obj, y, x) VALUE y; VALUE x; { + curses_stdscr(); move(NUM2INT(y), NUM2INT(x)); return Qnil; } @@ -342,6 +360,7 @@ static VALUE curses_inch(obj) VALUE obj; { + curses_stdscr(); return CHR2FIX(inch()); } @@ -351,6 +370,7 @@ curses_addch(obj, ch) VALUE obj; VALUE ch; { + curses_stdscr(); addch(NUM2CHR(ch)); return Qnil; } @@ -361,6 +381,7 @@ curses_insch(obj, ch) VALUE obj; VALUE ch; { + curses_stdscr(); insch(NUM2CHR(ch)); return Qnil; } @@ -371,6 +392,7 @@ curses_addstr(obj, str) VALUE obj; VALUE str; { + curses_stdscr(); if (!NIL_P(str)) { addstr(STR2CSTR(str)); } @@ -383,6 +405,7 @@ curses_getch(obj) VALUE obj; { rb_read_check(stdin); + curses_stdscr(); return UINT2NUM(getch()); } @@ -510,10 +533,10 @@ curses_bkgd(VALUE obj, VALUE ch) } static VALUE -curses_resizeterm(VALUE obj, VALUE lines, VALUE columns) +curses_resizeterm(VALUE obj, VALUE lin, VALUE col) { #if defined(HAVE_RESIZETERM) - return (resizeterm(NUM2INT(lines),NUM2INT(columns)) == OK) ? Qtrue : Qfalse; + return (resizeterm(NUM2INT(lin),NUM2INT(col)) == OK) ? Qtrue : Qfalse; #else return Qnil; #endif @@ -1199,13 +1222,13 @@ window_getbkgd(VALUE obj) } static VALUE -window_resize(VALUE obj, VALUE lines, VALUE columns) +window_resize(VALUE obj, VALUE lin, VALUE col) { #if defined(HAVE_WRESIZE) struct windata *winp; GetWINDOW(obj,winp); - return wresize(winp->window, NUM2INT(lines), NUM2INT(columns)) == OK ? Qtrue : Qfalse; + return wresize(winp->window, NUM2INT(lin), NUM2INT(col)) == OK ? Qtrue : Qfalse; #else return Qnil; #endif diff --git a/ext/curses/extconf.rb b/ext/curses/extconf.rb index 94d1e2e549..46fcc8f471 100644 --- a/ext/curses/extconf.rb +++ b/ext/curses/extconf.rb @@ -13,10 +13,8 @@ elsif have_header("ncurses/curses.h") and have_library("ncurses", "initscr") make=true elsif have_header("curses_colr/curses.h") and have_library("cur_colr", "initscr") make=true -else - if have_header("curses.h") and have_library("curses", "initscr") +elsif have_header("curses.h") and have_library("curses", "initscr") make=true - end end if make diff --git a/file.c b/file.c index 12d71f0bf3..b159256f65 100644 --- a/file.c +++ b/file.c @@ -161,7 +161,11 @@ static VALUE rb_stat_ino(self) VALUE self; { +#ifdef HUGE_ST_INO + return ULL2NUM(get_stat(self)->st_ino); +#else return ULONG2NUM(get_stat(self)->st_ino); +#endif } static VALUE @@ -171,7 +175,7 @@ rb_stat_mode(self) #ifdef __BORLANDC__ return UINT2NUM((unsigned short)(get_stat(self)->st_mode)); #else - return UINT2NUM(get_stat(self)->st_mode); + return UINT2NUM(get_stat(self)->st_mode); #endif } diff --git a/inits.c b/inits.c index 1e89a36caf..a6decb0b9d 100644 --- a/inits.c +++ b/inits.c @@ -18,6 +18,7 @@ void Init_Comparable _((void)); void Init_Dir _((void)); void Init_Enumerable _((void)); void Init_Exception _((void)); +void Init_syserr _((void)); void Init_eval _((void)); void Init_load _((void)); void Init_Proc _((void)); @@ -59,6 +60,7 @@ rb_call_inits() Init_Thread(); Init_Numeric(); Init_Bignum(); + Init_syserr(); Init_Array(); Init_Hash(); Init_Struct();