diff options
author | Christopher Faylor <me@cgf.cx> | 2001-04-22 16:19:27 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2001-04-22 16:19:27 +0000 |
commit | 96dc5dd7e594df1a835f3303e9fee5f5a8c78206 (patch) | |
tree | 479ef1db203d6fd56805aa4a7ee7374fe0460437 /winsup | |
parent | da77d416c54dda36b2284e9713bb2f5251d15a1c (diff) | |
download | newlib-96dc5dd7e594df1a835f3303e9fee5f5a8c78206.zip newlib-96dc5dd7e594df1a835f3303e9fee5f5a8c78206.tar.gz newlib-96dc5dd7e594df1a835f3303e9fee5f5a8c78206.tar.bz2 |
* shortcut.c (check_shortcut): Close input file handle before returning.
* path.cc (check_sysfile): Ditto.
(symlink_info::check): Rely on opened file handle being closed by symlink
checking routines. Set ext_tacked_on when .lnk is detected.
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/ChangeLog | 8 | ||||
-rw-r--r-- | winsup/cygwin/path.cc | 40 | ||||
-rw-r--r-- | winsup/cygwin/shortcut.c | 5 |
3 files changed, 31 insertions, 22 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 63ab22c..56e1b5d 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,11 @@ +Sun Apr 22 12:17:57 2001 Christopher Faylor <cgf@cygnus.com> + + * shortcut.c (check_shortcut): Close input file handle before + returning. + * path.cc (check_sysfile): Ditto. + (symlink_info::check): Rely on opened file handle being closed by + symlink checking routines. Set ext_tacked_on when .lnk is detected. + Sat Apr 21 19:26:05 2001 Christopher Faylor <cgf@cygnus.com> * thread.cc (MTinterface::Init): Remove accidentally checked in code. diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index 137d913..c218a16 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -2504,6 +2504,8 @@ check_sysfile (const char *path, DWORD fileattr, HANDLE h, } syscall_printf ("%d = symlink.check_sysfile (%s, %s) (%p)", res, path, contents, *pflags); + + CloseHandle (h); return res; } @@ -2698,29 +2700,29 @@ symlink_info::check (const char *path, const suffix_info *suffixes, res = -1; if (h == INVALID_HANDLE_VALUE) goto file_not_symlink; - else if (sym_check == 1 - && !(res = check_shortcut (suffix.path, fileattr, h, - contents, &error, &pflags))) + + switch (sym_check) { - CloseHandle (h); - /* If searching for `foo' and then finding a `foo.lnk' which is - no shortcut, return the same as if file not found. */ - if (suffix.lnk_match ()) + case 1: + res = check_shortcut (suffix.path, fileattr, h, contents, &error, &pflags); + if (res) { - fileattr = (DWORD)-1; - continue; /* in case we're going to tack *another* .lnk on this filename. */ + ext_tacked_on = 1; + break; } - goto file_not_symlink; - } - else if (sym_check == 2 && - !(res = check_sysfile (suffix.path, fileattr, h, - contents, &error, &pflags))) - { - CloseHandle (h); - goto file_not_symlink; + /* If searching for `foo' and then finding a `foo.lnk' which is + no shortcut, return the same as if file not found. */ + if (!suffix.lnk_match ()) + goto file_not_symlink; + + fileattr = (DWORD) -1; + continue; /* in case we're going to tack *another* .lnk on this filename. */ + case 2: + res = check_sysfile (suffix.path, fileattr, h, contents, &error, &pflags); + if (!res) + goto file_not_symlink; + break; } - - CloseHandle (h); break; } goto out; diff --git a/winsup/cygwin/shortcut.c b/winsup/cygwin/shortcut.c index b7ca869..b47cec5 100644 --- a/winsup/cygwin/shortcut.c +++ b/winsup/cygwin/shortcut.c @@ -98,7 +98,7 @@ check_shortcut (const char *path, DWORD fileattr, HANDLE h, goto close_it; /* Read the files header information. This is used to check for a Cygwin or U/WIN shortcut or later to check for executable files. */ - if (! ReadFile (h, file_header, SHORTCUT_HDR_SIZE, &got, 0)) + if (!ReadFile (h, file_header, SHORTCUT_HDR_SIZE, &got, 0)) { *error = EIO; goto close_it; @@ -160,8 +160,7 @@ close_it: psl->lpVtbl->Release(psl); /* Uninitialize COM library. */ CoUninitialize (); + CloseHandle (h); return res; } - - |