[#11952] NORETURN — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

24 messages 2001/01/10
[#11956] Re: NORETURN — WATANABE Hirofumi <eban@...> 2001/01/10

わたなべです.

[#11957] Re: NORETURN — matz@... (Yukihiro Matsumoto) 2001/01/10

まつもと ゆきひろです

[#11958] Re: NORETURN — WATANABE Hirofumi <eban@...> 2001/01/10

わたなべです.

[#11959] CVS branches (Re: Re: NORETURN) — matz@... (Yukihiro Matsumoto) 2001/01/10

[#12087] string#index, gsub, []= のバグ? — Beyond <beyond@...>

18 messages 2001/01/27
[#12091] Re: string#index, gsub, []= のバグ? — matz@... (Yukihiro Matsumoto) 2001/01/27

まつもと ゆきひろです

[ruby-dev:11943] [PATCH] LoadError#message

From: nobu.nakada@...
Date: 2001-01-07 04:39:40 UTC
List: ruby-dev #11943
なかだです。

  ファイルがあるけど読めないときでも LoadError は常に No such file っ
て出るんですが、ちょっと紛らわしくないでしょうか。これだと手を抜いてる
せいでメッセージが他のとちょっと違っちゃってますが。

# error.c はついでにちょっと整理。


Index: error.c
===================================================================
RCS file: /ruby/ruby/error.c,v
retrieving revision 1.19
diff -u -2 -p -r1.19 error.c
--- error.c	2000/11/14 07:10:20	1.19
+++ error.c	2001/01/06 13:26:37
@@ -658,5 +658,5 @@ rb_sys_fail(mesg)
     VALUE ee;
 
-    err = strerror(errno);
+    err = strerror(n);
     if (mesg) {
 	volatile VALUE tmp = rb_str_inspect(rb_str_new2(mesg));
@@ -672,13 +672,9 @@ rb_sys_fail(mesg)
     errno = 0;
 #ifdef __BEOS__
-    ee = get_syserr(n);
-    if (!ee) {
-	char name[6];
-      
-	sprintf(name, "E%03d", n);
-	ee = set_syserr(n, name);
-   }
+#define GET_SYSERR(n, ee) (ee = get_syserr(n))
 #else
-    if (n > sys_nerr || !syserr_list[n]) {
+#define GET_SYSERR(n, ee) ((n) <= sys_nerr && (ee = syserr_list[n]))
+#endif
+    if (!GET_SYSERR(n, ee)) {
 	char name[6];
 
@@ -686,8 +682,4 @@ rb_sys_fail(mesg)
 	ee = set_syserr(n, name);
     }
-    else {
-	ee = syserr_list[n];
-    }
-#endif
     ee = rb_exc_new2(ee, buf);
     rb_iv_set(ee, "errno", INT2FIX(n));
Index: ruby.c
===================================================================
RCS file: /ruby/ruby/ruby.c,v
retrieving revision 1.36
diff -u -2 -p -r1.36 ruby.c
--- ruby.c	2000/12/13 03:48:30	1.36
+++ ruby.c	2001/01/06 13:42:52
@@ -713,4 +713,11 @@ proc_options(argc, argv)
 extern int ruby__end__seen;
 
+static VALUE
+open_file(fname)
+    VALUE fname;
+{
+    return rb_file_open((char *)fname, "r");
+}
+
 static void
 load_file(fname, script)
@@ -726,12 +733,11 @@ load_file(fname, script)
     }
     else {
-	FILE *fp = fopen(fname, "r");
+	int state;
 
-	if (fp == NULL) {
-	    rb_raise(rb_eLoadError, "No such file to load -- %s", fname);
+	f = rb_protect(open_file, (VALUE)fname, &state);
+	if (state) {
+	    rb_raise(rb_exc_new3(rb_eLoadError, rb_iv_get(ruby_errinfo, "mesg")));
 	}
-	fclose(fp);
-
-	f = rb_file_open(fname, "r");
+	
 #if defined DOSISH || defined __CYGWIN__
 	{


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

In This Thread

Prev Next