[#23295] [proposal] new function for mathing path name — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
6 messages
2004/04/01
[#23296] Re: [proposal] new function for mathing path name
— matz@... (Yukihiro Matsumoto)
2004/04/01
まつもと ゆきひろです
[#23309] 100000000000000000000000 == 100000000000000000000000.0 — Tanaka Akira <akr@...17n.org>
ふと (またしても) 気がついたのですが、次のように
5 messages
2004/04/02
[#23310] Re: 100000000000000000000000 == 100000000000000000000000.0
— matz@... (Yukihiro Matsumoto)
2004/04/02
まつもと ゆきひろです
[#23311] Re: 100000000000000000000000 == 100000000000000000000000.0
— Tanaka Akira <akr@...17n.org>
2004/04/02
In article <1080884868.201381.30812.nullmailer@picachu.netlab.jp>,
[#23324] test_pack_U/test_huge_difference error — MIYAMUKO Katsuyuki <k-miyamuko@...>
みやむこです。
9 messages
2004/04/05
[#23353] Re: test_pack_U/test_huge_difference error
— "NAKAMURA, Hiroshi" <nakahiro@...>
2004/04/08
なひです。
[#23332] to_str再考 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
15 messages
2004/04/05
[#23392] Re: to_str再考
— nobu.nakada@...
2004/04/16
なかだです。
[#23396] Re: to_str再考
— Tanaka Akira <akr@...17n.org>
2004/04/16
In article <200404160100.i3G10FjJ003540@sharui.nakada.niregi.kanuma.tochigi.jp>,
[#23346] Solaris Errno::E000 — とみたまさひろ <tommy@...>
とみたです。
4 messages
2004/04/07
[#23380] [SEGV] make test-all (bccwin32 ruby1.9.0) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
17 messages
2004/04/15
[#23400] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/16
山本です。落ちる場所がわかりました。
[#23402] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/16
山本です。
[#23403] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— nobu.nakada@...
2004/04/16
なかだです。
[#23405] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/16
山本です。
[#23407] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/16
山本です。
[#23412] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/20
山本です。原因を絞り込めました。
[#23413] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/20
山本です。
[#23414] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "U.Nakamura" <usa@...>
2004/04/20
こんにちは、なかむら(う)です。
[#23415] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/20
山本です。
[#23416] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/20
山本です。
[#23417] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/04/20
山本です。SEGVの原因がわかりました。
[#23418] Re: [SEGV] make test-all (bccwin32 ruby1.9.0)
— nobu.nakada@...
2004/04/20
なかだです。
[#23381] gdbm read only access — Tanaka Akira <akr@...17n.org>
ふと、GDBM を read only で access したくなったのですが、GDBM.open には
4 messages
2004/04/15
[#23385] Process::Status as boolean — nobu.nakada@...
なかだです。
7 messages
2004/04/15
[#23394] drb test failure due to multiple value class — nobu.nakada@...
なかだです。
3 messages
2004/04/16
[#23408] Ruby/Bsearch — MoonWolf <moonwolf@...>
MoonWolfです。
6 messages
2004/04/19
[#23432] Resolv.getaddress(IPv6) causes error — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
7 messages
2004/04/23
[#23433] Re: Resolv.getaddress(IPv6) causes error
— Tanaka Akira <akr@...17n.org>
2004/04/23
In article <20040423115903.F2C7.USA@garbagecollect.jp>,
[#23434] Re: Resolv.getaddress(IPv6) causes error
— "U.Nakamura" <usa@...>
2004/04/23
こんにちは、なかむら(う)です。
[#23443] [Oniguruma] Version 2.2.8 — <kkosako@...>
ftp.ruby-lang.orgとhttp://www.geocities.jp/kosako1/に、
6 messages
2004/04/27
[ruby-dev:23381] gdbm read only access
From:
Tanaka Akira <akr@...17n.org>
Date:
2004-04-15 06:47:29 UTC
List:
ruby-dev #23381
ふと、GDBM を read only で access したくなったのですが、GDBM.open には
gdbm_open の read_write 引数に GDBM_READER を渡す方法がないことに気が
つきました。
GDBM.open は常にとりあえず書き込み可能な open を試してみて、それが失敗
したら読み込みのみの open を試すようです。
しかし、application が read only と分かっている時に write mode での
open を行うと、なんかのひょうしにファイルを壊してしまうのが恐いので、
次のように GDBM::READER などを指定した場合には指定した通りの
read_write 引数を渡すようにするのはどうでしょうか。
ただし、GDBM_READER は 0 であり、そのままだと指定されたかどうか分から
ないため、今までの指定しなかった時の挙動と区別するために 0x20000000 を
加えてあります。
Index: ext/gdbm/gdbm.c
===================================================================
RCS file: /src/ruby/ext/gdbm/gdbm.c,v
retrieving revision 1.27
diff -u -r1.27 gdbm.c
--- ext/gdbm/gdbm.c 6 May 2003 06:51:30 -0000 1.27
+++ ext/gdbm/gdbm.c 15 Apr 2004 06:38:39 -0000
@@ -16,6 +16,8 @@
static VALUE rb_cGDBM, rb_eGDBMError, rb_eGDBMFatalError;
+#define RUBY_GDBM_RW_BIT 0x20000000
+
#define MY_BLOCK_SIZE (2048)
#define MY_FATAL_FUNC rb_gdbm_fatal
static void
@@ -100,16 +102,23 @@
SafeStringValue(file);
- dbm = 0;
- if (mode >= 0)
- dbm = gdbm_open(RSTRING(file)->ptr, MY_BLOCK_SIZE,
- GDBM_WRCREAT|flags, mode, MY_FATAL_FUNC);
- if (!dbm)
+ if (flags & RUBY_GDBM_RW_BIT) {
+ flags &= ~RUBY_GDBM_RW_BIT;
dbm = gdbm_open(RSTRING(file)->ptr, MY_BLOCK_SIZE,
- GDBM_WRITER|flags, 0, MY_FATAL_FUNC);
- if (!dbm)
- dbm = gdbm_open(RSTRING(file)->ptr, MY_BLOCK_SIZE,
- GDBM_READER|flags, 0, MY_FATAL_FUNC);
+ flags, mode, MY_FATAL_FUNC);
+ }
+ else {
+ dbm = 0;
+ if (mode >= 0)
+ dbm = gdbm_open(RSTRING(file)->ptr, MY_BLOCK_SIZE,
+ GDBM_WRCREAT|flags, mode, MY_FATAL_FUNC);
+ if (!dbm)
+ dbm = gdbm_open(RSTRING(file)->ptr, MY_BLOCK_SIZE,
+ GDBM_WRITER|flags, 0, MY_FATAL_FUNC);
+ if (!dbm)
+ dbm = gdbm_open(RSTRING(file)->ptr, MY_BLOCK_SIZE,
+ GDBM_READER|flags, 0, MY_FATAL_FUNC);
+ }
if (!dbm) {
if (mode == -1) return Qnil;
@@ -992,13 +1001,12 @@
rb_define_method(rb_cGDBM, "to_a", fgdbm_to_a, 0);
rb_define_method(rb_cGDBM, "to_hash", fgdbm_to_hash, 0);
- /* flags for gdbm_opn() */
- /*
- rb_define_const(rb_cGDBM, "READER", INT2FIX(GDBM_READER));
- rb_define_const(rb_cGDBM, "WRITER", INT2FIX(GDBM_WRITER));
- rb_define_const(rb_cGDBM, "WRCREAT", INT2FIX(GDBM_WRCREAT));
- rb_define_const(rb_cGDBM, "NEWDB", INT2FIX(GDBM_NEWDB));
- */
+ /* flags for gdbm_open() */
+ rb_define_const(rb_cGDBM, "READER", INT2FIX(GDBM_READER|RUBY_GDBM_RW_BIT));
+ rb_define_const(rb_cGDBM, "WRITER", INT2FIX(GDBM_WRITER|RUBY_GDBM_RW_BIT));
+ rb_define_const(rb_cGDBM, "WRCREAT", INT2FIX(GDBM_WRCREAT|RUBY_GDBM_RW_BIT));
+ rb_define_const(rb_cGDBM, "NEWDB", INT2FIX(GDBM_NEWDB|RUBY_GDBM_RW_BIT));
+
rb_define_const(rb_cGDBM, "FAST", INT2FIX(GDBM_FAST));
/* this flag is obsolete in gdbm 1.8.
On gdbm 1.8, fast mode is default behavior. */
ちなみに、gdbm には freeze も効きません。
% ruby -rgdbm -e 'GDBM.open("zz.dbm", 0644) {|dbm| dbm.freeze; dbm["a"] = "a"; p dbm["a"]}'
"a"
--
[田中 哲][たなか あきら][Tanaka Akira]