[#21225] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

14 messages 2003/08/22
[#21227] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. — nobu.nakada@... 2003/08/22

なかだです。

[#21228] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. — matz@... (Yukihiro Matsumoto) 2003/08/22

まつもと ゆきひろです

[#21281] 大量メモリ消費攻撃に対する対応 — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

16 messages 2003/08/29
[#21285] Re: 大量メモリ消費攻撃に対する対応 — matz@... (Yukihiro Matsumoto) 2003/08/29

まつもと ゆきひろです

[#21288] Re: 大量メモリ消費攻撃に対する対応 — Hidetoshi NAGAI <nagai@...> 2003/08/29

永井@知能.九工大です.

[#21306] Re: 大量メモリ消費攻撃に対する対応 — matz@... (Yukihiro Matsumoto) 2003/09/03

まつもと ゆきひろです

[ruby-dev:21191] [PATCH] ext/curses

From: nobu.nakada@...
Date: 2003-08-13 01:08:15 UTC
List: ruby-dev #21191
なかだです。

Cursesのmodule functionで初期化が抜けているものがあるようです。

  $ ruby -rcurses -e Curses.getch
  -e:1: [BUG] Segmentation fault
  ruby 1.8.0 (2003-08-12) [i686-linux]

  アボートしました (core dumped)

それと、ブロックを取るメソッドCurses.open, Curses::Window.open
があると便利なように思います。


Index: ext/curses/curses.c
===================================================================
RCS file: /cvs/ruby/src/ruby/ext/curses/curses.c,v
retrieving revision 1.19
diff -u -2 -p -w -r1.19 curses.c
--- ext/curses/curses.c	5 Jun 2003 09:36:30 -0000	1.19
+++ ext/curses/curses.c	13 Aug 2003 00:33:16 -0000
@@ -16,4 +16,8 @@
 #include "ruby.h"
 
+#include <stdio.h>
+#include "rubyio.h"
+
+#define _XOPEN_SOURCE_EXTENDED 1
 #if defined(HAVE_NCURSES_H)
 # include <ncurses.h>
@@ -25,17 +29,19 @@
 #else
 # include <curses.h>
-# 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
@@ -48,7 +54,4 @@
 #endif
 
-#include <stdio.h>
-#include "rubyio.h"
-
 static VALUE mCurses;
 static VALUE mKey;
@@ -143,4 +146,15 @@ curses_close_screen()
 }
 
+static VALUE
+curses_s_open()
+{
+    VALUE scr = curses_stdscr();
+
+    if (rb_block_given_p()) {
+	return rb_ensure(rb_yield, scr, curses_close_screen, scr);
+    }
+    return scr;
+}
+
 static void
 curses_finalize(VALUE dummy)
@@ -175,4 +189,5 @@ curses_clear(obj)
     VALUE obj;
 {
+    curses_stdscr();
     wclear(stdscr);
     return Qnil;
@@ -184,4 +199,5 @@ curses_refresh(obj)
     VALUE obj;
 {
+    curses_stdscr();
     refresh();
     return Qnil;
@@ -193,4 +209,5 @@ curses_doupdate(obj)
     VALUE obj;
 {
+    curses_stdscr();
 #ifdef HAVE_DOUPDATE
     doupdate();
@@ -206,4 +223,5 @@ curses_echo(obj)
     VALUE obj;
 {
+    curses_stdscr();
     echo();
     return Qnil;
@@ -215,4 +233,5 @@ curses_noecho(obj)
     VALUE obj;
 {
+    curses_stdscr();
     noecho();
     return Qnil;
@@ -224,4 +243,5 @@ curses_raw(obj)
     VALUE obj;
 {
+    curses_stdscr();
     raw();
     return Qnil;
@@ -233,4 +253,5 @@ curses_noraw(obj)
     VALUE obj;
 {
+    curses_stdscr();
     noraw();
     return Qnil;
@@ -242,4 +263,5 @@ curses_cbreak(obj)
     VALUE obj;
 {
+    curses_stdscr();
     cbreak();
     return Qnil;
@@ -251,4 +273,5 @@ curses_nocbreak(obj)
     VALUE obj;
 {
+    curses_stdscr();
     nocbreak();
     return Qnil;
@@ -260,4 +283,5 @@ curses_nl(obj)
     VALUE obj;
 {
+    curses_stdscr();
     nl();
     return Qnil;
@@ -269,4 +293,5 @@ curses_nonl(obj)
     VALUE obj;
 {
+    curses_stdscr();
     nonl();
     return Qnil;
@@ -279,4 +304,5 @@ curses_beep(obj)
 {
 #ifdef HAVE_BEEP
+    curses_stdscr();
     beep();
 #endif
@@ -290,4 +316,5 @@ curses_flash(obj)
 {
 #ifdef HAVE_FLASH
+    curses_stdscr();
     flash();
 #endif
@@ -302,4 +329,5 @@ curses_ungetch(obj, ch)
 {
 #ifdef HAVE_UNGETCH
+    curses_stdscr();
     ungetch(NUM2INT(ch));
 #else
@@ -316,4 +344,5 @@ curses_setpos(obj, y, x)
     VALUE x;
 {
+    curses_stdscr();
     move(NUM2INT(y), NUM2INT(x));
     return Qnil;
@@ -343,4 +372,5 @@ curses_inch(obj)
     VALUE obj;
 {
+    curses_stdscr();
     return CHR2FIX(inch());
 }
@@ -352,4 +382,5 @@ curses_addch(obj, ch)
     VALUE ch;
 {
+    curses_stdscr();
     addch(NUM2CHR(ch));
     return Qnil;
@@ -362,4 +393,5 @@ curses_insch(obj, ch)
     VALUE ch;
 {
+    curses_stdscr();
     insch(NUM2CHR(ch));
     return Qnil;
@@ -372,4 +404,5 @@ curses_addstr(obj, str)
     VALUE str;
 {
+    curses_stdscr();
     if (!NIL_P(str)) {
 	addstr(STR2CSTR(str));
@@ -384,4 +417,5 @@ curses_getch(obj)
 {
     rb_read_check(stdin);
+    curses_stdscr();
     return UINT2NUM(getch());
 }
@@ -511,8 +545,8 @@ 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;
@@ -671,4 +705,6 @@ window_s_allocate(VALUE class)
 }
 
+static VALUE window_close _((VALUE));
+
 /* def initialize(h, w, top, left) */
 static VALUE
@@ -712,4 +748,8 @@ window_subwin(obj, h, w, top, left)
     win = prep_window(rb_obj_class(obj), window);
 
+    if (rb_block_given_p()) {
+	return rb_ensure(rb_yield, win, window_close, win);
+    }
+
     return win;
 }
@@ -1200,5 +1240,5 @@ 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)
@@ -1206,5 +1246,5 @@ window_resize(VALUE obj, VALUE lines, VA
 
   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;
@@ -1232,4 +1272,15 @@ window_keypad(VALUE obj, VALUE val)
 #endif /* HAVE_KEYPAD */
 
+static VALUE
+window_s_open(int argc, VALUE *argv, VALUE klass)
+{
+    VALUE win = rb_class_new_instance(argc, argv, klass);
+
+    if (rb_block_given_p()) {
+	return rb_ensure(rb_yield, win, window_close, win);
+    }
+    return win;
+}
+
 /*------------------------- Initialization -------------------------*/
 void
@@ -1253,4 +1304,5 @@ Init_curses()
     rb_define_module_function(mCurses, "init_screen", curses_init_screen, 0);
     rb_define_module_function(mCurses, "close_screen", curses_close_screen, 0);
+    rb_define_module_function(mCurses, "open", curses_s_open, 0);
     rb_define_module_function(mCurses, "closed?", curses_closed, 0);
     rb_define_module_function(mCurses, "stdscr", curses_stdscr, 0);
@@ -1317,4 +1369,5 @@ Init_curses()
     rb_define_alloc_func(cWindow, window_s_allocate);
     rb_define_method(cWindow, "initialize", window_initialize, 4);
+    rb_define_singleton_method(cWindow, "open", window_s_open, 4);
     rb_define_method(cWindow, "subwin", window_subwin, 4);
     rb_define_method(cWindow, "close", window_close, 0);
Index: ext/curses/extconf.rb
===================================================================
RCS file: /cvs/ruby/src/ruby/ext/curses/extconf.rb,v
retrieving revision 1.13
diff -u -2 -p -w -r1.13 extconf.rb
--- ext/curses/extconf.rb	4 Jul 2003 07:31:10 -0000	1.13
+++ ext/curses/extconf.rb	11 Aug 2003 08:34:21 -0000
@@ -14,8 +14,6 @@ elsif have_header("ncurses/curses.h") an
 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
 


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread

Prev Next