summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--winsup/cygwin/ChangeLog6
-rw-r--r--winsup/cygwin/path.cc29
2 files changed, 20 insertions, 15 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 9aab7d28c..7aefe1d4f 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,9 @@
+Fri May 25 11:07:07 2001 Christopher Faylor <cgf@cygnus.com>
+
+ * path.cc (symlink_info::check): Correctly set 'ext_tacked_on'. Use
+ this to determine if user specified 'foo.lnk' explicitly. Reorganize
+ slightly to get rid of one goto.
+
Fri May 25 10:15:00 2001 Corinna Vinschen <corinna@vinschen.de>
* path.cc (symlink_info::check): Add a check to return correctly
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index b9ca7ef62..4f7a03acc 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -2631,8 +2631,6 @@ symlink_info::check (char *path, const suffix_info *suffixes, unsigned opt)
pflags &= ~PATH_SYMLINK;
- ext_tacked_on = !*ext_here;
-
case_clash = FALSE;
while (suffix.next ())
@@ -2649,11 +2647,16 @@ symlink_info::check (char *path, const suffix_info *suffixes, unsigned opt)
continue;
}
+
+ ext_tacked_on = !!*ext_here;
+
if (pcheck_case != PCHECK_RELAXED && !case_check (path)
|| (opt & PC_SYM_IGNORE))
goto file_not_symlink;
- int sym_check = 0;
+ int sym_check;
+
+ sym_check = 0;
if (fileattr & FILE_ATTRIBUTE_DIRECTORY)
goto file_not_symlink;
@@ -2684,13 +2687,10 @@ symlink_info::check (char *path, const suffix_info *suffixes, unsigned opt)
case 1:
res = check_shortcut (suffix.path, fileattr, h, contents, &error, &pflags);
if (res)
- {
- ext_tacked_on = 1;
- break;
- }
+ break;
/* 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 () || pathmatch(path, suffix.path))
+ if (!suffix.lnk_match () || !ext_tacked_on)
goto file_not_symlink;
fileattr = (DWORD) -1;
@@ -2702,15 +2702,14 @@ symlink_info::check (char *path, const suffix_info *suffixes, unsigned opt)
break;
}
break;
- }
- goto out;
-file_not_symlink:
- is_symlink = FALSE;
- syscall_printf ("not a symlink");
- res = 0;
+ file_not_symlink:
+ is_symlink = FALSE;
+ syscall_printf ("not a symlink");
+ res = 0;
+ break;
+ }
-out:
syscall_printf ("%d = symlink.check (%s, %p) (%p)",
res, suffix.path, contents, pflags);
return res;