Skip to content

Commit

Permalink
* file.c (w32_io_info): should not call GetFileInformationByHandle
Browse files Browse the repository at this point in the history
  for pipe.

* file.c (w32_io_info): checks return value from rb_w32_get_osfhandle.

* file.c (w32_io_info): now can identify directory on WinNT.


git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@9600 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
ocean committed Nov 23, 2005
1 parent 873a66e commit edb223f
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 17 deletions.
10 changes: 9 additions & 1 deletion ChangeLog
@@ -1,3 +1,12 @@
Wed Nov 23 18:55:31 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>

* file.c (w32_io_info): should not call GetFileInformationByHandle
for pipe.

* file.c (w32_io_info): checks return value from rb_w32_get_osfhandle.

* file.c (w32_io_info): now can identify directory on WinNT.

Wed Nov 23 03:40:49 2005 Guy Decoux <ts@moulon.inra.fr>

* re.c (KR_REHASH): should cast to unsigned for 64bit CPU.
Expand Down Expand Up @@ -79,7 +88,6 @@ Sun Nov 20 22:34:06 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
* parse.y (rb_symname_p): [ not followed by ] is not valid symbol.
fixed: [ruby-talk:166520]

>>>>>>> 1.2673.2.1407
Sat Nov 19 19:57:54 2005 Yukihiro Matsumoto <matz@ruby-lang.org>

* lib/fileutils.rb (FileUtils::ln): ln documentation fix.
Expand Down
35 changes: 19 additions & 16 deletions file.c
Expand Up @@ -663,30 +663,38 @@ rb_stat(file, st)
}

#ifdef _WIN32
static HANDLE
static BOOL
w32_io_info(file, st)
VALUE *file;
BY_HANDLE_FILE_INFORMATION *st;
{
VALUE tmp;
HANDLE f, ret = 0;
HANDLE f;
BOOL ret = FALSE;

tmp = rb_check_convert_type(*file, T_FILE, "IO", "to_io");
if (!NIL_P(tmp)) {
OpenFile *fptr;

*file = Qnil;
GetOpenFile(tmp, fptr);
f = (HANDLE)rb_w32_get_osfhandle(fileno(fptr->f));
if (f == (HANDLE)-1) return FALSE;
}
else {
SafeStringValue(*file);
f = CreateFile(StringValueCStr(*file), 0, 0, NULL,
OPEN_EXISTING, 0, NULL);
if (f == INVALID_HANDLE_VALUE) return f;
ret = f;
f = CreateFile(StringValueCStr(*file), 0, 0, NULL, OPEN_EXISTING,
rb_w32_iswin95() ? 0 : FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (f == INVALID_HANDLE_VALUE) return FALSE;
}
if (GetFileInformationByHandle(f, st)) return ret;
return INVALID_HANDLE_VALUE;
if (GetFileType(f) == FILE_TYPE_DISK) {
ZeroMemory(st, sizeof(*st));
ret = GetFileInformationByHandle(f, st);
}
if (NIL_P(tmp)) {
CloseHandle(f);
}
return ret;
}
#endif

Expand Down Expand Up @@ -1408,23 +1416,18 @@ test_identical(obj, fname1, fname2)
#else
#ifdef _WIN32
BY_HANDLE_FILE_INFORMATION st1, st2;
HANDLE f1 = 0, f2 = 0;
#endif

rb_secure(2);
#ifdef _WIN32
f1 = w32_io_info(&fname1, &st1);
if (f1 == INVALID_HANDLE_VALUE) return Qfalse;
f2 = w32_io_info(&fname2, &st2);
if (f1) CloseHandle(f1);
if (f2 == INVALID_HANDLE_VALUE) return Qfalse;
if (f2) CloseHandle(f2);
if (!w32_io_info(&fname1, &st1)) return Qfalse;
if (!w32_io_info(&fname2, &st2)) return Qfalse;

if (st1.dwVolumeSerialNumber == st2.dwVolumeSerialNumber &&
st1.nFileIndexHigh == st2.nFileIndexHigh &&
st1.nFileIndexLow == st2.nFileIndexLow)
return Qtrue;
if (!f1 || !f2) return Qfalse;
if (NIL_P(fname1) || NIL_P(fname2)) return Qfalse;
if (rb_w32_iswin95()) return Qfalse;
#else
SafeStringValue(fname1);
Expand Down

0 comments on commit edb223f

Please sign in to comment.