Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2001-04-22 20:19:27 +0400
committerChristopher Faylor <me@cgf.cx>2001-04-22 20:19:27 +0400
commit96dc5dd7e594df1a835f3303e9fee5f5a8c78206 (patch)
tree479ef1db203d6fd56805aa4a7ee7374fe0460437
parentda77d416c54dda36b2284e9713bb2f5251d15a1c (diff)
* 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.
-rw-r--r--winsup/cygwin/ChangeLog8
-rw-r--r--winsup/cygwin/path.cc40
-rw-r--r--winsup/cygwin/shortcut.c5
3 files changed, 31 insertions, 22 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 63ab22cb6..56e1b5d03 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 137d913fa..c218a1606 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 b7ca86905..b47cec52a 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;
}
-
-