* dir.c (dir_s_chdir): block form of Dir.chdir. (RCR#U016).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1256 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
7f74a38b72
commit
b842d5f571
@ -1,3 +1,7 @@
|
|||||||
|
Thu Mar 15 01:28:02 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* dir.c (dir_s_chdir): block form of Dir.chdir. (RCR#U016).
|
||||||
|
|
||||||
Fri Mar 16 17:14:17 2001 Akinori MUSHA <knu@iDaemons.org>
|
Fri Mar 16 17:14:17 2001 Akinori MUSHA <knu@iDaemons.org>
|
||||||
|
|
||||||
* configure.in: Set SOLIBS properly for all ELF and
|
* configure.in: Set SOLIBS properly for all ELF and
|
||||||
|
5
README
5
README
@ -120,9 +120,8 @@ You can redistribute it and/or modify it under either the terms of the GPL
|
|||||||
software (possibly commercial). But some files in the distribution
|
software (possibly commercial). But some files in the distribution
|
||||||
are not written by the author, so that they are not under this terms.
|
are not written by the author, so that they are not under this terms.
|
||||||
|
|
||||||
They are gc.c(partly), utils.c(partly), regex.[ch], st.[ch] and some
|
They are utils.c(partly), regex.[ch], st.[ch] and some files under
|
||||||
files under the ./missing directory. See each file for the copying
|
the ./missing directory. See each file for the copying condition.
|
||||||
condition.
|
|
||||||
|
|
||||||
5. The scripts and library files supplied as input to or produced as
|
5. The scripts and library files supplied as input to or produced as
|
||||||
output from the software do not automatically fall under the
|
output from the software do not automatically fall under the
|
||||||
|
@ -178,10 +178,9 @@ Public License)
|
|||||||
だし,本プログラムに含まれる他の作者によるコードは,そ
|
だし,本プログラムに含まれる他の作者によるコードは,そ
|
||||||
れぞれの作者の意向による制限が加えられる場合があります.
|
れぞれの作者の意向による制限が加えられる場合があります.
|
||||||
|
|
||||||
具体的にはgc.c(一部),util.c(一部),st.[ch],regex.[ch]
|
具体的にはutil.c(一部),st.[ch],regex.[ch] および
|
||||||
および ./missingディレクトリ下のファイル群が該当します.
|
./missingディレクトリ下のファイル群が該当します.それぞ
|
||||||
それぞれの配布条件などに付いては各ファイルを参照してく
|
れの配布条件などに付いては各ファイルを参照してください.
|
||||||
ださい.
|
|
||||||
|
|
||||||
5. 本プログラムへの入力となるスクリプトおよび,本プログラ
|
5. 本プログラムへの入力となるスクリプトおよび,本プログラ
|
||||||
ムからの出力の権利は本プログラムの作者ではなく,それぞ
|
ムからの出力の権利は本プログラムの作者ではなく,それぞ
|
||||||
|
49
dir.c
49
dir.c
@ -389,13 +389,38 @@ dir_close(dir)
|
|||||||
return Qnil;
|
return Qnil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dir_chdir(path)
|
||||||
|
const char *path;
|
||||||
|
{
|
||||||
|
if (chdir(path) < 0)
|
||||||
|
rb_sys_fail(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int chdir_blocking = 0;
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
chdir_restore(path)
|
||||||
|
const char *path;
|
||||||
|
{
|
||||||
|
chdir_blocking--;
|
||||||
|
dir_chdir(path);
|
||||||
|
return Qnil;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_GETCWD
|
||||||
|
#define GETCWD(path) if (getcwd(path, sizeof(path)) == 0) rb_sys_fail(path)
|
||||||
|
#else
|
||||||
|
#define GETCWD(path) if (getwd(path) == 0) rb_sys_fail(path)
|
||||||
|
#endif
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
dir_s_chdir(argc, argv, obj)
|
dir_s_chdir(argc, argv, obj)
|
||||||
int argc;
|
int argc;
|
||||||
VALUE *argv;
|
VALUE *argv;
|
||||||
VALUE obj;
|
VALUE obj;
|
||||||
{
|
{
|
||||||
VALUE path;
|
VALUE path = Qnil;
|
||||||
char *dist = "";
|
char *dist = "";
|
||||||
|
|
||||||
rb_secure(2);
|
rb_secure(2);
|
||||||
@ -410,8 +435,18 @@ dir_s_chdir(argc, argv, obj)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chdir(dist) < 0)
|
if (chdir_blocking > 0)
|
||||||
rb_sys_fail(dist);
|
rb_warn("chdir during chdir block");
|
||||||
|
|
||||||
|
if (rb_block_given_p()) {
|
||||||
|
char cwd[MAXPATHLEN];
|
||||||
|
|
||||||
|
GETCWD(cwd);
|
||||||
|
chdir_blocking++;
|
||||||
|
dir_chdir(dist);
|
||||||
|
return rb_ensure(rb_yield, path, chdir_restore, (VALUE)cwd);
|
||||||
|
}
|
||||||
|
dir_chdir(dist);
|
||||||
|
|
||||||
return INT2FIX(0);
|
return INT2FIX(0);
|
||||||
}
|
}
|
||||||
@ -422,13 +457,7 @@ dir_s_getwd(dir)
|
|||||||
{
|
{
|
||||||
char path[MAXPATHLEN];
|
char path[MAXPATHLEN];
|
||||||
|
|
||||||
#ifdef HAVE_GETCWD
|
GETCWD(path);
|
||||||
if (getcwd(path, sizeof(path)) == 0) rb_sys_fail(path);
|
|
||||||
#else
|
|
||||||
extern char *getwd();
|
|
||||||
if (getwd(path) == 0) rb_sys_fail(path);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return rb_tainted_str_new2(path);
|
return rb_tainted_str_new2(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
3
eval.c
3
eval.c
@ -775,7 +775,6 @@ static struct tag *prot_tag;
|
|||||||
_tag.frame = ruby_frame; \
|
_tag.frame = ruby_frame; \
|
||||||
_tag.iter = ruby_iter; \
|
_tag.iter = ruby_iter; \
|
||||||
_tag.prev = prot_tag; \
|
_tag.prev = prot_tag; \
|
||||||
_tag.retval = Qnil; \
|
|
||||||
_tag.scope = ruby_scope; \
|
_tag.scope = ruby_scope; \
|
||||||
_tag.tag = ptag; \
|
_tag.tag = ptag; \
|
||||||
_tag.dst = 0; \
|
_tag.dst = 0; \
|
||||||
@ -6332,7 +6331,7 @@ proc_eq(self, other)
|
|||||||
struct BLOCK *data, *data2;
|
struct BLOCK *data, *data2;
|
||||||
|
|
||||||
if (TYPE(other) != T_DATA) return Qfalse;
|
if (TYPE(other) != T_DATA) return Qfalse;
|
||||||
if (RDATA(other)->dmark != blk_mark) Qfalse;
|
if (RDATA(other)->dmark != (RUBY_DATA_FUNC)blk_mark) Qfalse;
|
||||||
Data_Get_Struct(self, struct BLOCK, data);
|
Data_Get_Struct(self, struct BLOCK, data);
|
||||||
Data_Get_Struct(other, struct BLOCK, data2);
|
Data_Get_Struct(other, struct BLOCK, data2);
|
||||||
if (data->tag == data2->tag) return Qtrue;
|
if (data->tag == data2->tag) return Qtrue;
|
||||||
|
4
intern.h
4
intern.h
@ -182,8 +182,8 @@ char *rb_find_file _((char*));
|
|||||||
void rb_gc_mark_locations _((VALUE*, VALUE*));
|
void rb_gc_mark_locations _((VALUE*, VALUE*));
|
||||||
void rb_mark_tbl _((struct st_table*));
|
void rb_mark_tbl _((struct st_table*));
|
||||||
void rb_mark_hash _((struct st_table*));
|
void rb_mark_hash _((struct st_table*));
|
||||||
void rb_gc_mark_maybe();
|
void rb_gc_mark_maybe _((void*));
|
||||||
void rb_gc_mark();
|
void rb_gc_mark _((void*));
|
||||||
void rb_gc_force_recycle _((VALUE));
|
void rb_gc_force_recycle _((VALUE));
|
||||||
void rb_gc _((void));
|
void rb_gc _((void));
|
||||||
void rb_gc_call_finalizer_at_exit _((void));
|
void rb_gc_call_finalizer_at_exit _((void));
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#define RUBY_VERSION "1.7.0"
|
#define RUBY_VERSION "1.7.0"
|
||||||
#define RUBY_RELEASE_DATE "2001-03-14"
|
#define RUBY_RELEASE_DATE "2001-03-16"
|
||||||
#define RUBY_VERSION_CODE 170
|
#define RUBY_VERSION_CODE 170
|
||||||
#define RUBY_RELEASE_CODE 20010314
|
#define RUBY_RELEASE_CODE 20010316
|
||||||
|
Loading…
x
Reference in New Issue
Block a user