diff options
author | Yukihiro Matsumoto <matz@ruby-lang.org> | 1995-03-15 14:59:18 +0900 |
---|---|---|
committer | Takashi Kokubun <takashikkbn@gmail.com> | 2019-08-17 22:09:31 +0900 |
commit | d349889e770a2078c247d9d28070e86a54b856f4 (patch) | |
tree | 8bdbf87f3ff78ef237c4ff8efa061fbb8dc5a226 /file.c | |
parent | 881c5a9c320c637ee0f6526b40cf70c1379ab656 (diff) |
version 0.69v0_69
https://cache.ruby-lang.org/pub/ruby/1.0/ruby-0.69.tar.gz
Wed Mar 15 14:59:18 1995 Yukihiro Matsumoto (matz@ix-02)
* version 0.69
* eval.c(method_missing): unknownから名称変更.
* eval.c(single_method_added): 特異メソッドが定義された時に呼ばれ
るメソッド.hookとして使える.実際に定義される直前に呼ばれる.
Tue Mar 14 14:46:44 1995 Yukihiro Matsumoto (matz@ix-02)
* ruby.c(proc_options): 引数の解析を自分でやることにより引数指定の
方法がperlに近付いた.getopt_longはもう使わない.
* dir.c(glob): `{}'のネストを許すようにした.
Mon Mar 13 17:56:25 1995 Yukihiro Matsumoto (matz@ix-02)
* glob.c: Glob(ワイルドカードオブジェクト)はなくなった.ワイルドカー
ドの展開はDir.glob(文字列)を使う.ワイルドカードのマッチは正規表
現で代用.
Fri Mar 10 18:35:46 1995 Yukihiro Matsumoto (matz@ix-02)
* eval.c: Mathのようなモジュールは自分自身でextendする.
* eval.c: クラスやモジュールを定義した既に同名のものがあれば追加定
義となるように.ただし.superクラスの違いなどはチェックする.
* regex.c: debug.
* math.c: 定数PIとEを定義.
Thu Mar 9 21:35:12 1995 Yukihiro Matsumoto (matz@ix-02)
* regex.c: EUC,SJISモードでは0x80以上の8進,16進リテラルを禁止.
* regex.c: クラス内でも数値リテラル・文字クラスが使えるようした.
Wed Mar 8 17:39:05 1995 Yukihiro Matsumoto (matz@ix-02)
* regex.c: \200など括弧の数以上の表現は8進リテラルと解釈する.ただ
し,\1から\9までは例外.
* regex.c: \9以上のリファレンスも有効にした.
Tue Mar 7 14:26:01 1995 Yukihiro Matsumoto (matz@ix-02)
* eval.c(public/private): スコープ制御メソッドの名称変更.静的なア
クセスも出来るようにしてみたが,不採用.
Mon Mar 6 19:34:32 1995 Yukihiro Matsumoto (matz@ix-02)
* eval.c(inlcude): メソッド化.動的にモジュールをインクルードでき
るように.さらに任意のオブジェクトにもモジュールをインクルードで
きるメソッド `extend'も用意した.
* parse.y: 文法からincludeを削除.メソッド化.
Tue Feb 28 15:35:10 1995 Yukihiro Matsumoto (matz@ix-02)
* parse.y: 配列,連想配列の最後に`,'をおけるように.
Diffstat (limited to 'file.c')
-rw-r--r-- | file.c | 56 |
1 files changed, 9 insertions, 47 deletions
@@ -1,4 +1,3 @@ - /************************************************ file.c - @@ -56,60 +55,24 @@ file_open(fname, mode) } static int -apply2files0(func, args, arg, gl) - void (*func)(); +apply2files(func, args, arg) + int (*func)(); struct RArray *args; void *arg; - int gl; { - int i, n; + int i; VALUE path; - for (i=n=0; i<args->len; i++) { + for (i=0; i<args->len; i++) { path = args->ptr[i]; - if (TYPE(path) == T_STRING) { - if (gl) { - char buf[MAXPATHLEN]; - char *p, *s; - - s = buf; - p = RSTRING(path)->ptr; - while (*p) { - switch (*s = *p++) { - case '*': case '?': - case '[': case '{': - path = glob_new(path); - goto glob; - case '\\': - if (*p == '\0') break; - *s = *p++; - } - s++; - } - *s = '\0'; - (*func)(buf, arg); - } - else { - (*func)(RSTRING(path)->ptr, arg); - } - n++; - } - else { - extern VALUE C_Glob; - - if (!obj_is_kind_of(path, C_Glob)) { - WrongType(path, T_STRING); - } - glob: - n += apply2files0(func, rb_to_a(path), arg, 0); - } + Check_Type(path, T_STRING); + if ((*func)(RSTRING(path)->ptr, arg) < 0) + rb_sys_fail(RSTRING(path)->ptr); } - return n; + return args->len; } -#define apply2files(func,args,arg) apply2files0(func,args,arg,1) - static VALUE Ffile_tell(obj) VALUE obj; @@ -1131,6 +1094,7 @@ Init_File() rb_define_method(M_FileTest, "k", Ftest_sticky, 1); C_File = rb_define_class("File", C_IO); + rb_extend_object(C_File, M_FileTest); rb_define_single_method(C_File, "stat", Sfile_stat, 1); rb_define_single_method(C_File, "lstat", Sfile_lstat, 1); @@ -1154,8 +1118,6 @@ Init_File() rb_define_single_method(C_File, "umask", Sfile_umask, -1); rb_define_single_method(C_File, "truncate", Sfile_truncate, 2); - rb_include_module(CLASS_OF(C_File), M_FileTest); - rb_define_method(C_File, "stat", Ffile_stat, 0); rb_define_method(C_File, "lstat", Ffile_lstat, 0); |