[#23139] backslash in string — Jun Adachi <adachi@...>
安達@沖データと申します。
8 messages
2004/03/05
[#23148] BSD make(OpenBSD3.4) で make 出来ない — KAWAJI Shinya <kawaji@...>
かわじ、です。
3 messages
2004/03/06
[#23168] File.fnmatch のリファクタリング — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
13 messages
2004/03/08
[#23175] Re: File.fnmatch のリファクタリング
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/03/08
山本です。
[#23176] Re: File.fnmatch のリファクタリング
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/03/08
山本です。
[#23184] Re: File.fnmatch のリファクタリング
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/03/11
山本です。
[#23187] Re: File.fnmatch のリファクタリング
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/03/12
山本です。
[#23171] Re: File.fnmatch のリファクタリング — kkosako@...
> -----Original Message-----
2 messages
2004/03/08
[#23173] Re: Oniguruma has been merged into ruby CVS — kkosako@...
> -----Original Message-----
4 messages
2004/03/08
[#23192] File.fnmatch と Dir.glob の非互換部分 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
19 messages
2004/03/13
[#23194] Re: File.fnmatch と Dir.glob の非互換部分
— matz@... (Yukihiro Matsumoto)
2004/03/13
まつもと ゆきひろです
[#23195] Re: File.fnmatch とDir.glob の非互換部分
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/03/14
山本です。
[#23196] Re: File.fnmatch とDir.glob の非互換部分
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/03/14
山本です。
[#23260] Re: File.fnmatch とDir.glob の非互換部分
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/03/30
山本です。
[#23261] Re: File.fnmatch とDir.glob の非互換部分
— matz@... (Yukihiro Matsumoto)
2004/03/30
まつもと ゆきひろです
[#23265] Re: File.fnmatch とDir.glob の非互換部分
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/03/30
山本です。
[#23267] Re: File.fnmatch とDir.glob の非互換部分
— matz@... (Yukihiro Matsumoto)
2004/03/30
まつもと ゆきひろです
[#23268] Re: File.fnmatch とDir.glob の非互換部分
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/03/30
山本です。
[#23269] Re: File.fnmatch とDir.glob の非互換部分
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/03/30
山本です。
[#23272] Re: File.fnmatch とDir.glob の非互換部分
— matz@... (Yukihiro Matsumoto)
2004/03/30
まつもと ゆきひろです
[#23273] Re: File.fnmatch とDir.glob の非互換部分
— "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
2004/03/30
山本です。
[#23212] warning: fork terminates thread — Tanaka Akira <akr@...17n.org>
思い出したのですが、thread が動いている時に fork すると、
12 messages
2004/03/23
[#23213] Re: warning: fork terminates thread
— matz@... (Yukihiro Matsumoto)
2004/03/23
まつもと ゆきひろです
[#23214] Re: warning: fork terminates thread
— keiju@... (石塚圭樹)
2004/03/24
けいじゅ@いしつかです.
[#23217] Re: warning: fork terminates thread
— Tietew <tietew-ml-ruby-dev@...>
2004/03/24
[#23221] English alias — nobu.nakada@...
なかだです。
16 messages
2004/03/25
[#23226] [-0xf0000000].pack("U") again — Tanaka Akira <akr@...17n.org>
ふと、[ruby-dev:21577] で書いた
8 messages
2004/03/26
[#23227] (retry; 0).xxx {} dumps core — Tanaka Akira <akr@...17n.org>
ふと気がついたのですが、[ruby-dev:19293] に書いて誰にも反応されなかっ
4 messages
2004/03/26
[#23228] Zlib::GzipWriter.new(nil).close dumps core — Tanaka Akira <akr@...17n.org>
次のように、Zlib::GzipWriter.new(nil).close が core を吐きます。
8 messages
2004/03/26
[#23230] Re: Zlib::GzipWriter.new(nil).close dumps core
— nobu.nakada@...
2004/03/26
なかだです。
[#23231] Re: Zlib::GzipWriter.new(nil).close dumps core
— matz@... (Yukihiro Matsumoto)
2004/03/26
まつもと ゆきひろです
[#23238] Re: [ruby-cvs] ruby, ruby/lib, ruby/lib/rss, ruby/sample/openssl: * lib/logger.rb: trim tail space of each line. no user visible change. — Kouhei Sutou <kou@...>
須藤です.
10 messages
2004/03/27
[#23247] IO#readpartial — Tanaka Akira <akr@...17n.org>
ついに気が向いたので、以前から考えていた、stdio のバッファを考慮する
7 messages
2004/03/28
[#23274] Time.gm(...): gmtime/localtime error (ArgumentError) — MIYAMUKO Katsuyuki <k-miyamuko@...>
みやむこです。
6 messages
2004/03/30
[#23275] Re: Time.gm(...): gmtime/localtime error (ArgumentError)
— Tanaka Akira <akr@...17n.org>
2004/03/30
In article <4069466A.2030008@az.jp.nec.com>,
[#23283] ensure modifier — nobu.nakada@...
なかだです。
11 messages
2004/03/30
[ruby-dev:23248] Re: IO#readpartial
From:
nobu.nakada@...
Date:
2004-03-28 06:56:10 UTC
List:
ruby-dev #23248
なかだです。
At Sun, 28 Mar 2004 14:02:08 +0900,
Tanaka Akira wrote in [ruby-dev:23247]:
> なお、実装はまだ試験的なもので、IO にしか実装してません。また、効率の
> 点からは可能なら READ_DATA_PENDING_COUNT を使うべきですが、まだそうし
> ていません。
対応してみました。しかし、READ_DATA_PENDING()の場合はバッファに
あるデータだけを読むというのはなんででしょうか。そのままread(2)
にいってしまうのはまずい?
[ruby-dev:23247]の差分です。
Index: io.c
===================================================================
RCS file: /cvs/ruby/src/ruby/io.c,v
retrieving revision 1.265.100.1
diff -u -2 -p -d -E -r1.265.100.1 io.c
--- io.c 28 Mar 2004 05:12:37 -0000 1.265.100.1
+++ io.c 28 Mar 2004 06:48:48 -0000
@@ -889,4 +889,25 @@ rb_io_to_io(io)
/* reading functions */
+static long
+read_buffered_data(ptr, len, f)
+ char *ptr;
+ long len;
+ FILE *f;
+{
+ long n;
+
+#ifdef READ_DATA_PENDING_COUNT
+ n = READ_DATA_PENDING_COUNT(f);
+ if (n <= 0) return 0;
+ if (n > len) n = len;
+ return fread(ptr, 1, n, f);
+#else
+ for (n = 0; n < len && READ_DATA_PENDING(f); ++n) {
+ *ptr++ = getc(f);
+ }
+ return n;
+#endif
+}
+
long
rb_io_fread(ptr, len, f)
@@ -899,26 +920,10 @@ rb_io_fread(ptr, len, f)
while (n > 0) {
-#ifdef READ_DATA_PENDING_COUNT
- long i = READ_DATA_PENDING_COUNT(f);
- if (i <= 0) {
- rb_thread_wait_fd(fileno(f));
- i = READ_DATA_PENDING_COUNT(f);
- }
- if (i > 0) {
- if (i > n) i = n;
- TRAP_BEG;
- c = fread(ptr, 1, i, f);
- TRAP_END;
- if (c < 0) goto eof;
+ c = read_buffered_data(ptr, n, f);
+ if (c < 0) goto eof;
+ if (c > 0) {
ptr += c;
- n -= c;
- if (c < i) goto eof;
- continue;
+ if ((n -= c) <= 0) break;
}
-#else
- if (!READ_DATA_PENDING(f)) {
- rb_thread_wait_fd(fileno(f));
- }
-#endif
TRAP_BEG;
c = getc(f);
@@ -1046,11 +1051,13 @@ io_readpartial(argc, argv, io)
VALUE length, str;
- rb_scan_args(argc, argv, "11", &length, &str);
+ rb_scan_args(argc, argv, "02", &length, &str);
GetOpenFile(io, fptr);
rb_io_check_readable(fptr);
- len = NUM2LONG(length);
- if (len < 0) {
+ if (NIL_P(length)) {
+ len = BUFSIZ;
+ }
+ else if ((len = NUM2LONG(length)) < 0) {
rb_raise(rb_eArgError, "negative length %ld given", len);
}
@@ -1062,28 +1069,41 @@ io_readpartial(argc, argv, io)
StringValue(str);
rb_str_modify(str);
- rb_str_resize(str,len);
+ if (NIL_P(length) && len <= RSTRING(str)->len) {
+ len = RSTRING(str)->len;
+ }
+ else {
+ rb_str_resize(str, len);
+ }
+ }
+
+ if (len == 0) {
+ rb_str_resize(str, 0);
+ return str;
}
- if (len == 0) return str;
READ_CHECK(fptr->f);
{
char *ptr = RSTRING(str)->ptr;
- if (READ_DATA_PENDING(fptr->f)) {
- for (n = 0; n < len && READ_DATA_PENDING(fptr->f); n++) {
- int c;
- TRAP_BEG;
- c = getc(fptr->f);
- TRAP_END;
- *ptr++ = c;
- }
+ int c;
+
+ n = read_buffered_data(ptr, len, fptr->f);
+ if (n > 0) {
+ ptr += n;
+ len -= n;
}
else {
- for (;;) {
+ while (len > 0) {
TRAP_BEG;
- n = read(fileno(fptr->f), ptr, len);
+ c = read(fileno(fptr->f), ptr, len);
TRAP_END;
- if (n != -1)
- break;
- if (!rb_io_wait_readable(fileno(fptr->f))) {
+ if (c != -1) {
+ n += c;
+ if (!NIL_P(length)) break;
+ rb_str_resize(str, n + BUFSIZ);
+ ptr = RSTRING(str)->ptr + n;
+ len = RSTRING(str)->len - n;
+ }
+ else if (!rb_io_wait_readable(fileno(fptr->f))) {
+ if (n > 0) break;
rb_str_resize(str, 0);
rb_sys_fail(fptr->path);
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦