[#13765] GenerativeHash — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

17 messages 2001/07/08
[#13769] Re: GenerativeHash — matz@... (Yukihiro Matsumoto) 2001/07/09

まつもと ゆきひろです

[#13774] mkmf.rb: cleaning facility — Takaaki Tateishi <ttate@...>

立石です.

14 messages 2001/07/09

[#13800] Re: [ruby-cvs] ruby: * ruby.h: fix a wrong function name: rb_iglob() -> rb_globi(). — nobu.nakada@...

なかだです。

20 messages 2001/07/10
[#13801] Re: [ruby-cvs] ruby: * ruby.h: fix a wrong function name: rb_iglob() -> rb_globi(). — WATANABE Hirofumi <eban@...> 2001/07/10

わたなべです。

[#13802] Re: [ruby-cvs] ruby: * ruby.h: fix a wrong function name: rb_iglob() -> rb_globi(). — matz@... (Yukihiro Matsumoto) 2001/07/10

まつもと ゆきひろです

[#13804] Re: [ruby-cvs] ruby: * ruby.h: fix a wrong function name: rb_iglob() -> rb_globi(). — WATANABE Hirofumi <eban@...> 2001/07/10

わたなべです。

[#13805] Re: [ruby-cvs] ruby: * ruby.h: fix a wrong function name: rb_iglob() -> rb_globi(). — matz@... (Yukihiro Matsumoto) 2001/07/10

まつもと ゆきひろです

[#13806] Re: [ruby-cvs] ruby: * ruby.h: fix a wrong function name: rb_iglob() -> rb_globi(). — WATANABE Hirofumi <eban@...> 2001/07/10

わたなべです。

[#13807] Re: [ruby-cvs] ruby: * ruby.h: fix a wrong function name: rb_iglob() -> rb_globi(). — matz@... (Yukihiro Matsumoto) 2001/07/10

まつもと ゆきひろです

[#13808] Re: [ruby-cvs] ruby: * ruby.h: fix a wrong function name: rb_iglob() -> rb_globi(). — "Akinori MUSHA" <knu@...> 2001/07/10

At Tue, 10 Jul 2001 15:23:04 +0900,

[#13809] Re: [ruby-cvs] ruby: * ruby.h: fix a wrong function name: rb_iglob() -> rb_globi(). — WATANABE Hirofumi <eban@...> 2001/07/10

わたなべです。

[#13810] Re: [ruby-cvs] ruby: * ruby.h: fix a wrong function name: rb_iglob() -> rb_globi(). — "Akinori MUSHA" <knu@...> 2001/07/10

At Tue, 10 Jul 2001 16:50:52 +0900,

[#13811] Re: [ruby-cvs] ruby: * ruby.h: fix a wrong function name: rb_iglob() -> rb_globi(). — "Akinori MUSHA" <knu@...> 2001/07/10

 もうひとつあった。

[#13828] supported platforms / K&R — "Akinori MUSHA" <knu@...>

 digest モジュールの各プラットフォームでの動作確認をお願いした

39 messages 2001/07/13
[#14389] Re: supported platforms / K&R — Koji Arai <JCA02266@...> 2001/08/08

新井です。

[#14399] Re: supported platforms / K&R — Takashi Shimizu <simtak@...> 2001/08/09

清水@biglobeです。

[#14404] Re: supported platforms / K&R — Koji Arai <JCA02266@...> 2001/08/09

新井です。

[#14461] Re: supported platforms / K&R — Takashi Shimizu <simtak@...> 2001/08/14

清水@biglobe です。

[#14466] Re: supported platforms / K&R — nobu.nakada@... 2001/08/14

なかだです。

[#14468] Re: supported platforms / K&R — Koji Arai <JCA02266@...> 2001/08/14

新井です。

[#14477] recursive malloc (Re: supported platforms / K&R) — Koji Arai <JCA02266@...> 2001/08/15

新井です。

[#14482] Re: recursive malloc (Re: supported platforms / K&R) — nobu.nakada@... 2001/08/15

なかだです。

[#14486] Re: recursive malloc (Re: supported platforms / K&R) — Koji Arai <JCA02266@...> 2001/08/15

新井です。

[#14490] Re: recursive malloc (Re: supported platforms/ K&R) — nobu.nakada@... 2001/08/15

なかだです。

[#14492] Re: recursive malloc (Re: supported platforms/ K&R) — Koji Arai <JCA02266@...> 2001/08/15

新井です。

[#14493] Re: recursive malloc (Re: supportedplatforms/ K&R) — nobu.nakada@... 2001/08/15

なかだです。

[#13878] Prototype for rb_gc_mark / volatile in ruby.h — Tietew <tietew@...>

Tietew です。

18 messages 2001/07/15
[#13880] Re: Prototype for rb_gc_mark / volatile in ruby.h — matz@... (Yukihiro Matsumoto) 2001/07/16

まつもと ゆきひろです

[#13940] IO#read — "Akinori MUSHA" <knu@...>

 IO#read を使って何度もストリームから読み込むような処理をする

20 messages 2001/07/19

[#13959] Re: [ruby-list:30682] Re: overwride method — "Akinori MUSHA" <knu@...>

At Fri, 20 Jul 2001 21:09:36 +0900,

95 messages 2001/07/20
[#13963] Re: [ruby-list:30682] Re: overwride method — GOTO Kentaro <gotoken@...> 2001/07/20

ごとけんです

[#13965] Re: [ruby-list:30682] Re: overwride method — matz@... (Yukihiro Matsumoto) 2001/07/21

まつもと ゆきひろです

[#13967] Re: [ruby-list:30682] Re: overwride method — GOTO Kentaro <gotoken@...> 2001/07/21

ごとけんです

[#13969] Re: [ruby-list:30682] Re: overwride method — matz@... (Yukihiro Matsumoto) 2001/07/21

まつもと ゆきひろです

[#13980] Re: [ruby-list:30682] Re: overwride method — GOTO Kentaro <gotoken@...> 2001/07/21

[ruby-dev:13969]>

[#13981] Re: [ruby-list:30682] Re: overwride method — matz@... (Yukihiro Matsumoto) 2001/07/21

まつもと ゆきひろです

[#13984] Re: [ruby-list:30682] Re: overwride method — GOTO Kentaro <gotoken@...> 2001/07/22

ごとけんです

[#13993] Re: [ruby-list:30682] Re: overwride method — "NAKAMURA, Hiroshi" <nakahiro@...> 2001/07/23

なひです。

[#13994] Re: [ruby-list:30682] Re: overwride method — matz@... (Yukihiro Matsumoto) 2001/07/23

まつもと ゆきひろです

[#13995] Re: [ruby-list:30682] Re: overwride method — keiju@... (石塚圭樹) 2001/07/23

けいじゅ@日本ラショナルソフトウェアです.

[#13996] Re: [ruby-list:30682] Re: overwride method — matz@... (Yukihiro Matsumoto) 2001/07/23

まつもと ゆきひろです

[#13997] Re: [ruby-list:30682] Re: overwride method — keiju@... (石塚圭樹) 2001/07/23

けいじゅ@日本ラショナルソフトウェアです.

[#13998] Re: [ruby-list:30682] Re: overwride method — matz@... (Yukihiro Matsumoto) 2001/07/23

まつもと ゆきひろです

[#14000] Re: [ruby-list:30682] Re: overwride method — "NAKAMURA, Hiroshi" <nakahiro@...> 2001/07/23

なひです。

[#14005] Re: [ruby-list:30682] Re: overwride method — matz@... (Yukihiro Matsumoto) 2001/07/23

まつもと ゆきひろです

[#14016] Re: [ruby-list:30682] Re: overwride method — "NAKAMURA, Hiroshi" <nakahiro@...> 2001/07/24

なひです。

[#14021] Re: [ruby-list:30682] Re: overwride method — matz@... (Yukihiro Matsumoto) 2001/07/24

まつもと ゆきひろです

[#14022] Re: [ruby-list:30682] Re: overwride method — "NAKAMURA, Hiroshi" <nakahiro@...> 2001/07/24

なひです。

[#14023] Re: [ruby-list:30682] Re: overwride method — matz@... (Yukihiro Matsumoto) 2001/07/24

まつもと ゆきひろです

[#14037] Re: [ruby-list:30682] Re: overwride method — GOTO Kentaro <gotoken@...> 2001/07/24

ごとけんです

[#14039] Re: [ruby-list:30682] Re: overwride method — Masatoshi SEKI <m_seki@...> 2001/07/24

[#14040] Re: [ruby-list:30682] Re: overwride method — matz@... (Yukihiro Matsumoto) 2001/07/24

まつもと ゆきひろです

[#14043] Re: [ruby-list:30682] Re: overwride method — m_seki@... 2001/07/24

[#14053] Re: [ruby-list:30682] Re: overwride method — matz@... (Yukihiro Matsumoto) 2001/07/25

まつもと ゆきひろです

[#14082] private instance variable と _dump/_load — Masatoshi SEKI <m_seki@...> 2001/07/25

[#14084] Re: private instance variable と _dump/_load — keiju@... (石塚圭樹) 2001/07/25

けいじゅ@日本ラショナルソフトウェアです.

[#14087] Re: private instance variable と _dump/_load — matz@... (Yukihiro Matsumoto) 2001/07/25

まつもと ゆきひろです

[#14089] Re: private instance variable と _dump/_load — keiju@... (石塚圭樹) 2001/07/25

けいじゅ@日本ラショナルソフトウェアです.

[#14094] Re: private instance variable と _dump/_load — matz@... (Yukihiro Matsumoto) 2001/07/26

まつもと ゆきひろです

[#14133] Re: private instance variable と _dump/_load — "Shin'ya Adzumi" <adzumi@...> 2001/07/27

あづみです。

[#14134] Re: private instance variable と _dump/_load — matz@... (Yukihiro Matsumoto) 2001/07/27

まつもと ゆきひろです

[#14140] Re: private instance variable と _dump/_load — Kazuhiro NISHIYAMA <zn@...> 2001/07/27

In <996211878.306635.31396.nullmailer@ev.netlab.jp>

[#14143] Re: private instance variable と _dump/_load — matz@... (Yukihiro Matsumoto) 2001/07/27

まつもと ゆきひろです

[#14144] Re: private instance variable と _dump/_load — Kazuhiro NISHIYAMA <zn@...> 2001/07/27

In <996255758.830993.629.nullmailer@ev.netlab.jp>

[#14066] Re: [ruby-list:30682] Re: overwride method — "Shin'ya Adzumi" <adzumi@...> 2001/07/25

あづみです。

[#14068] private instance variable (Re: Re: overwride method) — matz@... (Yukihiro Matsumoto) 2001/07/25

まつもと ゆきひろです

[#14099] Is private instance variable really needed? — Shugo Maeda <shugo@...> 2001/07/26

前田です。

[#14104] Re: Is private instance variable really needed? — matz@... (Yukihiro Matsumoto) 2001/07/26

まつもと ゆきひろです

[#14026] Exception in coerce — Shin-ichiro HARA <sinara@...>

原です。

21 messages 2001/07/24
[#14027] Re: Exception in coerce — matz@... (Yukihiro Matsumoto) 2001/07/24

まつもと ゆきひろです

[#14028] Re: Exception in coerce — Shin-ichiro HARA <sinara@...> 2001/07/24

原です。

[#14029] Re: Exception in coerce — matz@... (Yukihiro Matsumoto) 2001/07/24

まつもと ゆきひろです

[#14030] Re: Exception in coerce — matz@... (Yukihiro Matsumoto) 2001/07/24

まつもと ゆきひろです

[#14031] Re: Exception in coerce — Shin-ichiro HARA <sinara@...> 2001/07/24

原です。

[#14032] Re: Exception in coerce — matz@... (Yukihiro Matsumoto) 2001/07/24

まつもと ゆきひろです

[ruby-dev:14118] Re: DOSISH file.c

From: nobu.nakada@...
Date: 2001-07-26 12:30:04 UTC
List: ruby-dev #14118
なかだです。

At Thu, 26 Jul 2001 11:31:46 +0900,
U.Nakamura <usa@osb.att.ne.jp> wrote:
> こんにちは、なかむら(う)@帰省中です。
> 最新のfile.cへのパッチです。
> 最新のfile.cからの差分に(たぶん)なっています。
> 
> 1. \対応(オリジナルはCheng氏)
> 2. マルチバイト対応(1のため必須) 不完全かも...
> 3. ドライブ文字対応
> 4. [ruby-dev:14075]

  あと、0x5cで終るpath elementを削らないようにするのと、ドライ
ブレターなしの絶対パスもdnameを見るようにするのも。それから
strrdirsep()のドライブレターのチェックは意味ありませんでしたね。
[ruby-dev:14097]へのパッチです。

  しかし、マルチバイトを考慮していないループにマルチバイト対応
を突っ込むのは、どうもやっぱりゴチャゴチャしてきてしまうので、
できれば二つめのパッチみたいにしたいところですが。

> File.joinへのパッチは含んでいませんが、必要ではあると思います。

  これはexpand_pathが落ち着いたら次に。


--- file.c	2001/07/26 02:00:08	1.63.0.1
+++ file.c	2001/07/26 09:47:19	1.63.0.2
@@ -1357,7 +1357,4 @@ strrdirsep(path)
 {
     char *last = NULL;
-#ifdef DOSISH
-    if (has_drive_letter(path)) path += 2;
-#endif
     while (*path) {
 	if (isdirsep(*path)) {
@@ -1415,10 +1412,7 @@ rb_file_s_expand_path(argc, argv)
 	    s++;
 #endif
-	    while (*s && !isdirsep(*s)) {
-		for (t = CharNext(s); s != t; s++) {
-		    *p++ = *s;
-		}
-		if (p >= bend) goto toolong;
-	    }
+	    for (t = s; *s && !isdirsep(*s); s = CharNext(s));
+	    if (p + (s - t) >= bend) goto toolong;
+	    while (t < s) *p++ = *t++;
 	    *p = '\0';
 #ifdef HAVE_PWD_H
@@ -1441,8 +1435,8 @@ rb_file_s_expand_path(argc, argv)
 	    /* specified drive letter, and full path */
 	    /* skip drive letter */
-	    while (*s && !isdirsep(*s)) {
-		*p++ = *s++;
-		if (p >= bend) goto toolong;
-	    }
+	    if (p + 2 >= bend) goto toolong;
+	    *p++ = *s++;
+	    *p++ = *s++;
+	    s++;
 	}
 	else {
@@ -1462,34 +1456,13 @@ rb_file_s_expand_path(argc, argv)
 		strcpy(buf, RSTRING(dname)->ptr);
 		p = &buf[strlen(buf)];
-		s += 2;
 	    }
 	    else {
 		getcwdofdrv(*s, buf, MAXPATHLEN);
-		s += 2;
-
-		tainted = 1;
-		p = &buf[strlen(buf)];
-		if (*s) {
-		    /* need to append '/' before appending the rest of the path */
-		    if (!isdirsep(*(p - 1))) *p++ = '/';
-		    while (*s && !isdirsep(*s)) {
-			*p++ = *s++;
-			if (p >= bend) goto toolong;
-		    }
+		for (p = buf; *p && p < bend; p = CharNext(p)) {
+		    if (isdirsep(*p)) *p = '/';
 		}
+		tainted = 1;
 	    }
-	}
-    }
-#endif
-#if defined DOSISH && ! defined(__CYGWIN__)
-    else if (isdirsep(*s) && !is_absolute_path(s)) {
-	/* specified full path, but not drive letter */
-	/* we need to get the drive letter */
-	tainted = 1;
-	getcwd(buf, MAXPATHLEN);
-	p = &buf[2];
-	while (*s && !isdirsep(*s)) {
-	    *p++ = *s++;
-	    if (p >= bend) goto toolong;
+	    s += 2;
 	}
     }
@@ -1505,7 +1478,35 @@ rb_file_s_expand_path(argc, argv)
 	    tainted = 1;
 	    getcwd(buf, MAXPATHLEN);
+#if defined DOSISH
+	    for (p = buf; *p && p < bend; p = CharNext(p)) {
+		if (isdirsep(*p)) *p = '/';
+	    }
+#endif
+	}
+#if defined DOSISH && ! defined(__CYGWIN__)
+	if (isdirsep(*s)) {
+	    /* specified full path, but not drive letter */
+	    p = &buf[2];
+	    if (!has_drive_letter(buf)) {
+		/* UNC */
+		while (*p && !isdirsep(*p)) p = CharNext(p);/* skip host name */
+		if (*p) {
+		    ++p;
+		    while (*p && !isdirsep(*p)) p = CharNext(p); /* skip share name */
+		}
+	    }
+	}
+	else
+#endif
+	{
+	    for (p = buf; isdirsep(*p); ++p);
+	    if (*p) {
+		do {
+		    while (*p && !isdirsep(*p)) p = CharNext(p);
+		    for (t = p; isdirsep(*p); ++p);
+		} while (*p);
+		p = t;
+	    }
 	}
-	p = &buf[strlen(buf)];
-	while (p > buf && strrdirsep(buf) == p - 1) p--;
     }
     else {
@@ -1530,6 +1531,9 @@ rb_file_s_expand_path(argc, argv)
 		    if (*(s+1) == '\0' || isdirsep(*(s+1))) {
 			/* We must go back to the parent */
-			if (isdirsep(*p) && p > buf) p--;
-			while (p > buf && !isdirsep(*p)) p--;
+			*p = '\0';
+			if (!(t = strrdirsep(buf)))
+			    *p = '/';
+			else
+			    p = t;
 		    }
 		    else {

--- file.c	2001/07/26 09:47:19	1.63.0.2
+++ file.c	2001/07/26 10:03:00	1.63.0.3
@@ -1519,13 +1519,14 @@ rb_file_s_expand_path(argc, argv)
     }
     *p = '/';
+    t = s;
 
-    for ( ; *s; s++) {
+    while (*s) {
 	switch (*s) {
 	  case '.':
-	    if (!isdirsep(*p)) {
-		*++p = '.';
-	    }
-	    else if (*(s+1)) {
-		switch (*++s) {
+	    if (t == s++) {
+		switch (*s) {
+		  case '\0':
+		    t = s;
+		    break;
 		  case '.':
 		    if (*(s+1) == '\0' || isdirsep(*(s+1))) {
@@ -1536,9 +1537,5 @@ rb_file_s_expand_path(argc, argv)
 			else
 			    p = t;
-		    }
-		    else {
-			*++p = '.';
-			*++p = *s;
-			if (p >= bend) goto toolong;
+			t = ++s;
 		    }
 		    break;
@@ -1547,9 +1544,6 @@ rb_file_s_expand_path(argc, argv)
 		  case '\\':
 #endif
-		    *(p + 1) = '\0';
-		    if (strrdirsep(buf) != p) *++p = '/';
+		    t = ++s;
 		    break;
-		  default:
-		    *++p = '.'; *++p = *s; break;
 		}
 	    }
@@ -1559,21 +1553,27 @@ rb_file_s_expand_path(argc, argv)
 	  case '\\':
 #endif
-	    *(p + 1) = '\0';
-	    if (strrdirsep(buf) != p) *++p = '/';
+	    if (s > t) {
+		if (p + (s - t) >= bend) goto toolong;
+		do {*++p = *t++;} while (s > t);
+		*++p = '/';
+	    }
+	    t = ++s;
 	    break;
 	  default:
-	    for (t = CharNext(s); s != t; s++) {
-		*++p = *s;
-	    }
-	    s--;
-	    if (p >= bend) goto toolong;
+	    s = CharNext(s);
+	    break;
 	}
     }
 
-    /* Place a \0 at end. If path ends with a "/", delete it */
-    *(p + 1) = '\0';
-    if (p == buf || strrdirsep(buf) != p) p++;
+    if (s > t) {
+	if (p + (s - t) >= bend) goto toolong;
+	++p;
+	do {*p++ = *t++;} while (s > t);
+    }
+    else if (p == buf) {
+	p++;
+    }
 #if defined(DOSISH)
-    if (has_drive_letter(buf) && isdirsep(buf[2])) {
+    else if (has_drive_letter(buf) && isdirsep(buf[2])) {
 	/* root directory needs a trailing backslash,
 	   otherwise it mean the current directory of the drive */
@@ -1581,7 +1581,6 @@ rb_file_s_expand_path(argc, argv)
     }
 #endif
-    *p = '\0';
 
-    fname = rb_str_new2(buf);
+    fname = rb_str_new(buf, p - buf);
     if (tainted) OBJ_TAINT(fname);
     return fname;


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

In This Thread