diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | ext/syslog/syslog.c | 54 | ||||
-rw-r--r-- | ext/syslog/test.rb | 28 |
3 files changed, 45 insertions, 47 deletions
@@ -1,3 +1,13 @@ +Wed Nov 27 16:22:09 2002 Akinori MUSHA <knu@iDaemons.org> + + * ext/syslog/syslog.c: Fix a problem where Syslog#ident was not + marked and could thus be GC'd. + + * ext/syslog/test.rb: Switch from RUnit to Test::Unit. + + * ext/syslog/test.rb: The output format of inspect() is slightly + altered. + Fri Nov 22 19:30:17 2002 Akinori MUSHA <knu@iDaemons.org> * instruby.rb: Install batch files on Windows. [Submitted by usa] diff --git a/ext/syslog/syslog.c b/ext/syslog/syslog.c index 22e1e02a87..98fb5ae4f3 100644 --- a/ext/syslog/syslog.c +++ b/ext/syslog/syslog.c @@ -12,8 +12,8 @@ /* Syslog class */ static VALUE mSyslog, mSyslogConstants; -static VALUE syslog_ident = Qnil, syslog_options = INT2FIX(-1), - syslog_facility = INT2FIX(-1), syslog_mask = INT2FIX(-1); +static const char *syslog_ident = NULL; +static int syslog_options = -1, syslog_facility = -1, syslog_mask = -1; static int syslog_opened = 0; /* Package helper routines */ @@ -67,14 +67,13 @@ static VALUE mSyslog_open(int argc, VALUE *argv, VALUE self) #else Check_SafeStr(ident); #endif - syslog_ident = ident; - syslog_options = opt; - syslog_facility = fac; - openlog(RSTRING(ident)->ptr, NUM2INT(opt), NUM2INT(fac)); + syslog_ident = (const char *)strdup(RSTRING(ident)->ptr); + syslog_options = NUM2INT(opt); + syslog_facility = NUM2INT(fac); + openlog(syslog_ident, syslog_options, syslog_facility); syslog_opened = 1; - setlogmask(mask = setlogmask(0)); - syslog_mask = INT2NUM(mask); + setlogmask(syslog_mask = setlogmask(0)); /* be like File.new.open {...} */ if (rb_block_given_p()) { @@ -98,22 +97,22 @@ static VALUE mSyslog_isopen(VALUE self) static VALUE mSyslog_ident(VALUE self) { - return syslog_ident; + return rb_str_new2(syslog_ident); } static VALUE mSyslog_options(VALUE self) { - return syslog_options; + return INT2NUM(syslog_options); } static VALUE mSyslog_facility(VALUE self) { - return syslog_facility; + return INT2NUM(syslog_facility); } static VALUE mSyslog_get_mask(VALUE self) { - return syslog_mask; + return INT2NUM(syslog_mask); } static VALUE mSyslog_set_mask(VALUE self, VALUE mask) @@ -122,8 +121,7 @@ static VALUE mSyslog_set_mask(VALUE self, VALUE mask) rb_raise(rb_eRuntimeError, "must open syslog before setting log mask"); } - setlogmask(NUM2INT(mask)); - syslog_mask = mask; + setlogmask(syslog_mask = NUM2INT(mask)); return mask; } @@ -150,22 +148,18 @@ static VALUE mSyslog_log(int argc, VALUE *argv, VALUE self) static VALUE mSyslog_inspect(VALUE self) { -#define N 7 - int argc = N; - VALUE argv[N]; - const char fmt[] = - "<#%s: opened=%s, ident=\"%s\", options=%d, facility=%d, mask=%d>"; - - argv[0] = rb_str_new(fmt, sizeof(fmt) - 1); - argv[1] = mSyslog; - argv[2] = syslog_opened ? Qtrue : Qfalse; - argv[3] = syslog_ident; - argv[4] = syslog_options; - argv[5] = syslog_facility; - argv[6] = syslog_mask; - - return rb_f_sprintf(argc, argv); -#undef N + char buf[1024]; + + snprintf(buf, sizeof(buf), + "<#%s: ident=\"%s\", options=%d, facility=%d, mask=%d%s>", + rb_class2name(self), + syslog_ident, + syslog_options, + syslog_facility, + syslog_mask, + syslog_opened ? ", opened" : ""); + + return rb_str_new2(buf); } static VALUE mSyslog_instance(VALUE self) diff --git a/ext/syslog/test.rb b/ext/syslog/test.rb index 6cd861b2b2..4b25852c36 100644 --- a/ext/syslog/test.rb +++ b/ext/syslog/test.rb @@ -5,17 +5,16 @@ # Please only run this test on machines reasonable for testing. # If in doubt, ask your admin. -require 'runit/testcase' -require 'runit/cui/testrunner' +require 'test/unit' # Prepend current directory to load path for testing. $:.unshift('.') require 'syslog' -class TestSyslog < RUNIT::TestCase +class TestSyslog < Test::Unit::TestCase def test_new - assert_exception(NameError) { + assert_raises(NameError) { Syslog.new } end @@ -41,7 +40,7 @@ class TestSyslog < RUNIT::TestCase assert_equal(Syslog::LOG_USER, Syslog.facility) # open without close - assert_exception(RuntimeError) { + assert_raises(RuntimeError) { Syslog.open } @@ -143,19 +142,14 @@ class TestSyslog < RUNIT::TestCase def test_inspect Syslog.open { |sl| - assert_equal(format('<#%s: opened=%s, ident="%s", ' + - 'options=%d, facility=%d, mask=%d>', - Syslog, sl.opened?, sl.ident, - sl.options, sl.facility, sl.mask), + assert_equal(format('<#%s: ident="%s", options=%d, facility=%d, mask=%d%s>', + Syslog, + sl.ident, + sl.options, + sl.facility, + sl.mask, + sl.opened? ? ', opened' : ''), sl.inspect) } end end - -if $0 == __FILE__ - suite = RUNIT::TestSuite.new - - suite.add_test(TestSyslog.suite) - - RUNIT::CUI::TestRunner.run(suite) -end |