summaryrefslogtreecommitdiff
path: root/file.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <matz@ruby-lang.org>1995-03-15 05:59:18 (GMT)
committerTakashi Kokubun <takashikkbn@gmail.com>2019-08-17 13:09:31 (GMT)
commitd349889e770a2078c247d9d28070e86a54b856f4 (patch)
tree8bdbf87f3ff78ef237c4ff8efa061fbb8dc5a226 /file.c
parent881c5a9c320c637ee0f6526b40cf70c1379ab656 (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.c56
1 files changed, 9 insertions, 47 deletions
diff --git a/file.c b/file.c
index a1729de..3c861da 100644
--- a/file.c
+++ b/file.c
@@ -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);