[#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:23364] Re: memory leak ? in Dir.glob with block
From:
"H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
Date:
2004-04-10 03:06:44 UTC
List:
ruby-dev #23364
山本です。
応急処置ですが、修正してみました。
/////////////////////////////////////////////////////////////////////
// main branch
Index: dir.c
===================================================================
RCS file: /ruby/ruby/dir.c,v
retrieving revision 1.116
diff -u -w -b -p -r1.116 dir.c
--- dir.c 9 Apr 2004 08:06:01 -0000 1.116
+++ dir.c 10 Apr 2004 02:44:43 -0000
@@ -1325,7 +1325,7 @@ glob_helper(path, dirsep, exist, isdir,
return status;
}
-static void
+static int
rb_glob2(path, flags, func, arg)
const char *path;
int flags;
@@ -1362,7 +1362,7 @@ rb_glob2(path, flags, func, arg)
free(buf);
- if (status) rb_jump_tag(status);
+ return status;
}
void
@@ -1371,7 +1371,8 @@ rb_glob(path, func, arg)
void (*func) _((const char*, VALUE));
VALUE arg;
{
- rb_glob2(path, 0, func, arg);
+ int status = rb_glob2(path, 0, func, arg);
+ if (status) rb_jump_tag(status);
}
static void
@@ -1389,16 +1390,16 @@ push_pattern(path, ary)
}
}
-static void
+static int
push_globs(ary, s, flags)
VALUE ary;
const char *s;
int flags;
{
- rb_glob2(s, flags, push_pattern, ary);
+ return rb_glob2(s, flags, push_pattern, ary);
}
-static void
+static int
push_braces(ary, s, flags)
VALUE ary;
const char *s;
@@ -1408,6 +1409,7 @@ push_braces(ary, s, flags)
const char *p, *t;
const char *lbrace, *rbrace;
int nest = 0;
+ int status = 0;
p = s;
lbrace = rbrace = 0;
@@ -1441,13 +1443,16 @@ push_braces(ary, s, flags)
}
memcpy(b, t, p-t);
strcpy(b+(p-t), Next(rbrace));
- push_braces(ary, buf, flags);
+ status = push_braces(ary, buf, flags);
+ if (status) break;
}
free(buf);
}
else {
- push_globs(ary, s, flags);
+ status = push_globs(ary, s, flags);
}
+
+ return status;
}
#define isdelim(c) ((c)=='\0')
@@ -1460,6 +1465,7 @@ rb_push_glob(str, flags)
char *buf;
const char *t;
int nest, maxnest;
+ int status = 0;
int escape = !(flags & FNM_NOESCAPE);
VALUE ary;
@@ -1490,14 +1496,18 @@ rb_push_glob(str, flags)
memcpy(buf, t, p - t);
buf[p - t] = '\0';
if (maxnest == 0) {
- push_globs(ary, buf, flags);
+ status = push_globs(ary, buf, flags);
+ if (status) break;
}
else if (nest == 0) {
- push_braces(ary, buf, flags);
+ status = push_braces(ary, buf, flags);
+ if (status) break;
}
/* else unmatched braces */
}
free(buf);
+
+ if (status) rb_jump_tag(status);
return ary;
}
/////////////////////////////////////////////////////////////////////
// 1.8 branch
Index: dir.c
===================================================================
RCS file: /ruby/ruby/dir.c,v
retrieving revision 1.92.2.6
diff -u -w -b -p -r1.92.2.6 dir.c
--- dir.c 17 Mar 2004 05:47:18 -0000 1.92.2.6
+++ dir.c 10 Apr 2004 02:56:06 -0000
@@ -1053,7 +1053,7 @@ glob_helper(path, sub, flags, func, arg)
return status;
}
-static void
+static int
rb_glob2(path, flags, func, arg)
const char *path;
int flags;
@@ -1067,7 +1067,7 @@ rb_glob2(path, flags, func, arg)
strcpy(buf, path);
status = glob_helper(buf, 0, flags, func, arg);
free(buf);
- if (status) rb_jump_tag(status);
+ return status;
}
void
@@ -1076,7 +1076,8 @@ rb_glob(path, func, arg)
void (*func) _((const char*, VALUE));
VALUE arg;
{
- rb_glob2(path, 0, func, arg);
+ int status = rb_glob2(path, 0, func, arg);
+ if (status) rb_jump_tag(status);
}
void
@@ -1085,7 +1086,8 @@ rb_globi(path, func, arg)
void (*func) _((const char*, VALUE));
VALUE arg;
{
- rb_glob2(path, FNM_CASEFOLD, func, arg);
+ int status = rb_glob2(path, FNM_CASEFOLD, func, arg);
+ if (status) rb_jump_tag(status);
}
static void
@@ -1103,16 +1105,16 @@ push_pattern(path, ary)
}
}
-static void
+static int
push_globs(ary, s, flags)
VALUE ary;
const char *s;
int flags;
{
- rb_glob2(s, flags, push_pattern, ary);
+ return rb_glob2(s, flags, push_pattern, ary);
}
-static void
+static int
push_braces(ary, s, flags)
VALUE ary;
const char *s;
@@ -1122,6 +1124,7 @@ push_braces(ary, s, flags)
const char *p, *t;
const char *lbrace, *rbrace;
int nest = 0;
+ int status = 0;
p = s;
lbrace = rbrace = 0;
@@ -1155,13 +1158,16 @@ push_braces(ary, s, flags)
}
memcpy(b, t, p-t);
strcpy(b+(p-t), rbrace+1);
- push_braces(ary, buf, flags);
+ status = push_braces(ary, buf, flags);
+ if (status) break;
}
free(buf);
}
else {
- push_globs(ary, s, flags);
+ status = push_globs(ary, s, flags);
}
+
+ return status;
}
#define isdelim(c) ((c)=='\0')
@@ -1175,6 +1181,7 @@ rb_push_glob(str, flags)
char *buf;
char *t;
int nest, maxnest;
+ int status = 0;
int noescape = flags & FNM_NOESCAPE;
VALUE ary;
@@ -1204,14 +1211,18 @@ rb_push_glob(str, flags)
}
*t = '\0';
if (maxnest == 0) {
- push_globs(ary, buf, flags);
+ status = push_globs(ary, buf, flags);
+ if (status) break;
}
else if (nest == 0) {
- push_braces(ary, buf, flags);
+ status = push_braces(ary, buf, flags);
+ if (status) break;
}
/* else unmatched braces */
}
free(buf);
+
+ if (status) rb_jump_tag(status);
return ary;
}