* file.c (file_load_ok): checks if regular file, except for the

platform disallows to open directories, e.g. cygwin.
  [ruby-dev:38097], [Bug #1221]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22658 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2009-02-27 08:45:26 +00:00
Родитель c660a9c466
Коммит 12331d4939
2 изменённых файлов: 15 добавлений и 7 удалений

Просмотреть файл

@ -1,6 +1,8 @@
Fri Feb 27 15:49:41 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
Fri Feb 27 17:45:25 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* file.c (file_load_ok): checks if regular file. [ruby-dev:38097]
* file.c (file_load_ok): checks if regular file, except for the
platform disallows to open directories, e.g. cygwin.
[ruby-dev:38097], [Bug #1221]
Fri Feb 27 14:39:40 2009 NAKAMURA Usaku <usa@ruby-lang.org>

16
file.c
Просмотреть файл

@ -4521,13 +4521,19 @@ rb_path_check(const char *path)
static int
file_load_ok(const char *path)
{
struct stat st;
int ret, fd = open(path, O_RDONLY);
int ret = 1;
int fd = open(path, O_RDONLY);
if (fd == -1) return 0;
ret = fstat(fd, &st);
#if !(defined DOSISH || defined __CYGWIN__)
{
struct stat st;
if (fstat(fd, &st) || !S_ISREG(st.st_mode)) {
ret = 0;
}
}
#endif
(void)close(fd);
if (ret) return 0;
return S_ISREG(st.st_mode);
return ret;
}
static int