mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
19991206
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@576 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
4263bb432a
commit
dee96209bf
23 changed files with 177 additions and 82 deletions
80
file.c
80
file.c
|
|
@ -1176,12 +1176,14 @@ rb_file_s_expand_path(argc, argv)
|
|||
VALUE fname, dname;
|
||||
char *s, *p;
|
||||
char buf[MAXPATHLEN+2];
|
||||
int tainted = 0;
|
||||
|
||||
rb_scan_args(argc, argv, "11", &fname, &dname);
|
||||
|
||||
s = STR2CSTR(fname);
|
||||
p = buf;
|
||||
if (s[0] == '~') {
|
||||
tainted = 1;
|
||||
if (isdirsep(s[1]) || s[1] == '\0') {
|
||||
char *dir = getenv("HOME");
|
||||
|
||||
|
|
@ -1224,9 +1226,11 @@ rb_file_s_expand_path(argc, argv)
|
|||
else if (!isdirsep(*s)) {
|
||||
if (argc == 2) {
|
||||
dname = rb_file_s_expand_path(1, &dname);
|
||||
if (OBJ_TAINTED(dname)) tainted = 1;
|
||||
strcpy(buf, RSTRING(dname)->ptr);
|
||||
}
|
||||
else {
|
||||
tainted = 1;
|
||||
#ifdef HAVE_GETCWD
|
||||
getcwd(buf, MAXPATHLEN);
|
||||
#else
|
||||
|
|
@ -1286,7 +1290,9 @@ rb_file_s_expand_path(argc, argv)
|
|||
if (p == buf || !isdirsep(*p)) p++;
|
||||
*p = '\0';
|
||||
|
||||
return rb_tainted_str_new2(buf);
|
||||
fname = rb_str_new2(buf);
|
||||
if (tainted) OBJ_TAINT(fname);
|
||||
return fname;
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
@ -1758,18 +1764,18 @@ static VALUE
|
|||
rb_stat_r(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
mode_t mode = get_stat(obj)->st_mode;
|
||||
struct stat *st = get_stat(obj);
|
||||
|
||||
#ifdef S_IRUSR
|
||||
if (rb_stat_owned(obj))
|
||||
return mode & S_IRUSR ? Qtrue : Qfalse;
|
||||
return st->st_mode & S_IRUSR ? Qtrue : Qfalse;
|
||||
#endif
|
||||
#ifdef S_IRGRP
|
||||
if (rb_stat_grpowned(obj))
|
||||
return mode & S_IRGRP ? Qtrue : Qfalse;
|
||||
return st->st_mode & S_IRGRP ? Qtrue : Qfalse;
|
||||
#endif
|
||||
#ifdef S_IROTH
|
||||
if (!(mode & S_IROTH)) return Qfalse;
|
||||
if (!(st->st_mode & S_IROTH)) return Qfalse;
|
||||
#endif
|
||||
return Qtrue;
|
||||
}
|
||||
|
|
@ -1778,18 +1784,18 @@ static VALUE
|
|||
rb_stat_R(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
mode_t mode = get_stat(obj)->st_mode;
|
||||
struct stat *st = get_stat(obj);
|
||||
|
||||
#ifdef S_IRUSR
|
||||
if (rb_stat_rowned(obj))
|
||||
return mode & S_IRUSR ? Qtrue : Qfalse;
|
||||
return st->st_mode & S_IRUSR ? Qtrue : Qfalse;
|
||||
#endif
|
||||
#ifdef S_IRGRP
|
||||
if (group_member(get_stat(obj)->st_gid))
|
||||
return mode & S_IRGRP ? Qtrue : Qfalse;
|
||||
return st->st_mode & S_IRGRP ? Qtrue : Qfalse;
|
||||
#endif
|
||||
#ifdef S_IROTH
|
||||
if (!(mode & S_IROTH)) return Qfalse;
|
||||
if (!(st->st_mode & S_IROTH)) return Qfalse;
|
||||
#endif
|
||||
return Qtrue;
|
||||
}
|
||||
|
|
@ -1798,18 +1804,18 @@ static VALUE
|
|||
rb_stat_w(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
mode_t mode = get_stat(obj)->st_mode;
|
||||
struct stat *st = get_stat(obj);
|
||||
|
||||
#ifdef S_IRUSR
|
||||
#ifdef S_IWUSR
|
||||
if (rb_stat_owned(obj))
|
||||
return mode & S_IWUSR ? Qtrue : Qfalse;
|
||||
return st->st_mode & S_IWUSR ? Qtrue : Qfalse;
|
||||
#endif
|
||||
#ifdef S_IRGRP
|
||||
#ifdef S_IWGRP
|
||||
if (rb_stat_grpowned(obj))
|
||||
return mode & S_IWGRP ? Qtrue : Qfalse;
|
||||
return st->st_mode & S_IWGRP ? Qtrue : Qfalse;
|
||||
#endif
|
||||
#ifdef S_IROTH
|
||||
if (!(mode & S_IWOTH)) return Qfalse;
|
||||
#ifdef S_IWOTH
|
||||
if (!(st->st_mode & S_IWOTH)) return Qfalse;
|
||||
#endif
|
||||
return Qtrue;
|
||||
}
|
||||
|
|
@ -1818,18 +1824,18 @@ static VALUE
|
|||
rb_stat_W(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
mode_t mode = get_stat(obj)->st_mode;
|
||||
struct stat *st = get_stat(obj);
|
||||
|
||||
#ifdef S_IRUSR
|
||||
#ifdef S_IWUSR
|
||||
if (rb_stat_rowned(obj))
|
||||
return mode & S_IWUSR ? Qtrue : Qfalse;
|
||||
return st->st_mode & S_IWUSR ? Qtrue : Qfalse;
|
||||
#endif
|
||||
#ifdef S_IRGRP
|
||||
#ifdef S_IWGRP
|
||||
if (group_member(get_stat(obj)->st_gid))
|
||||
return mode & S_IWGRP ? Qtrue : Qfalse;
|
||||
return st->st_mode & S_IWGRP ? Qtrue : Qfalse;
|
||||
#endif
|
||||
#ifdef S_IROTH
|
||||
if (!(mode & S_IWOTH)) return Qfalse;
|
||||
#ifdef S_IWOTH
|
||||
if (!(st->st_mode & S_IWOTH)) return Qfalse;
|
||||
#endif
|
||||
return Qtrue;
|
||||
}
|
||||
|
|
@ -1838,18 +1844,18 @@ static VALUE
|
|||
rb_stat_x(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
mode_t mode = get_stat(obj)->st_mode;
|
||||
struct stat *st = get_stat(obj);
|
||||
|
||||
#ifdef S_IRUSR
|
||||
#ifdef S_IXUSR
|
||||
if (rb_stat_owned(obj))
|
||||
return mode & S_IXUSR ? Qtrue : Qfalse;
|
||||
return st->st_mode & S_IXUSR ? Qtrue : Qfalse;
|
||||
#endif
|
||||
#ifdef S_IRGRP
|
||||
#ifdef S_IXGRP
|
||||
if (rb_stat_grpowned(obj))
|
||||
return mode & S_IXGRP ? Qtrue : Qfalse;
|
||||
return st->st_mode & S_IXGRP ? Qtrue : Qfalse;
|
||||
#endif
|
||||
#ifdef S_IROTH
|
||||
if (!(mode & S_IXOTH)) return Qfalse;
|
||||
#ifdef S_IXOTH
|
||||
if (!(st->st_mode & S_IXOTH)) return Qfalse;
|
||||
#endif
|
||||
return Qtrue;
|
||||
}
|
||||
|
|
@ -1858,18 +1864,18 @@ static VALUE
|
|||
rb_stat_X(obj)
|
||||
VALUE obj;
|
||||
{
|
||||
mode_t mode = get_stat(obj)->st_mode;
|
||||
struct stat *st = get_stat(obj);
|
||||
|
||||
#ifdef S_IRUSR
|
||||
#ifdef S_IXUSR
|
||||
if (rb_stat_rowned(obj))
|
||||
return mode & S_IXUSR ? Qtrue : Qfalse;
|
||||
return st->st_mode & S_IXUSR ? Qtrue : Qfalse;
|
||||
#endif
|
||||
#ifdef S_IRGRP
|
||||
#ifdef S_IXGRP
|
||||
if (group_member(get_stat(obj)->st_gid))
|
||||
return mode & S_IXGRP ? Qtrue : Qfalse;
|
||||
return st->st_mode & S_IXGRP ? Qtrue : Qfalse;
|
||||
#endif
|
||||
#ifdef S_IROTH
|
||||
if (!(mode & S_IXOTH)) return Qfalse;
|
||||
#ifdef S_IXOTH
|
||||
if (!(st->st_mode & S_IXOTH)) return Qfalse;
|
||||
#endif
|
||||
return Qtrue;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue