mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-02-18 23:12:15 +08:00
* path.cc (lnk_suffixes): Remove.
(class suffix_scan): Add `lnk_state' flag. (suffix_scan::lnk_match): Return state of `lnk_state' now. (suffix_scan::has): Changed behaviour if file has `.lnk' suffix. (suffix_scan::next): Set `lnk_state' where appropriate. (symlink_info::check): Fix a wrong `break'. * syscalls.cc (chown_worker): Change debug statement to reflect lchown fix. (lchown): Call chown_worker with `PC_SYM_NOFOLLOW' instead of `PC_SYM_IGNORE'.
This commit is contained in:
parent
63dc5d80f6
commit
78d2c08cd9
@ -1,3 +1,16 @@
|
||||
Wed Mar 14 10:11:00 2001 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* path.cc (lnk_suffixes): Remove.
|
||||
(class suffix_scan): Add `lnk_state' flag.
|
||||
(suffix_scan::lnk_match): Return state of `lnk_state' now.
|
||||
(suffix_scan::has): Changed behaviour if file has `.lnk' suffix.
|
||||
(suffix_scan::next): Set `lnk_state' where appropriate.
|
||||
(symlink_info::check): Fix a wrong `break'.
|
||||
* syscalls.cc (chown_worker): Change debug statement to reflect
|
||||
lchown fix.
|
||||
(lchown): Call chown_worker with `PC_SYM_NOFOLLOW' instead of
|
||||
`PC_SYM_IGNORE'.
|
||||
|
||||
Tue Mar 13 13:52:00 2001 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* fhandler.cc (fhandler_disk_file::fstat): Add correct modes to
|
||||
|
@ -96,13 +96,6 @@ struct symlink_info
|
||||
int check (const char *path, const suffix_info *suffixes);
|
||||
};
|
||||
|
||||
/* These suffixes are the only ones allowed in inner path components. */
|
||||
suffix_info lnk_suffixes[] =
|
||||
{
|
||||
suffix_info (".lnk", 1),
|
||||
suffix_info (NULL)
|
||||
};
|
||||
|
||||
cwdstuff cygcwd; /* The current working directory. */
|
||||
|
||||
#define path_prefix_p(p1, p2, l1) \
|
||||
@ -2411,12 +2404,13 @@ class suffix_scan
|
||||
char *ext_here;
|
||||
const suffix_info *suffixes;
|
||||
int state;
|
||||
int lnk_state;
|
||||
int nullterm;
|
||||
public:
|
||||
const char *path;
|
||||
char *has (const char *, const suffix_info *, char **);
|
||||
int next ();
|
||||
int lnk_match () {return state == SCAN_LNK + 1;}
|
||||
int lnk_match () {return lnk_state;}
|
||||
};
|
||||
|
||||
char *
|
||||
@ -2426,6 +2420,7 @@ suffix_scan::has (const char *in_path, const suffix_info *in_suffixes, char **ex
|
||||
suffixes = in_suffixes;
|
||||
nullterm = 0;
|
||||
state = SCAN_BEG;
|
||||
lnk_state = 0;
|
||||
ext_here = *ext_where = strrchr (in_path, '.');
|
||||
if (ext_here)
|
||||
{
|
||||
@ -2436,14 +2431,15 @@ suffix_scan::has (const char *in_path, const suffix_info *in_suffixes, char **ex
|
||||
if (strcasematch (ext_here, ex->name))
|
||||
{
|
||||
state = SCAN_JUSTCHECK;
|
||||
goto known_suffix;
|
||||
suffixes = NULL; /* Has an extension so don't scan for one. */
|
||||
return ext_here;
|
||||
}
|
||||
}
|
||||
/* Didn't match. Use last resort -- .lnk. */
|
||||
if (strcasematch (ext_here, ".lnk"))
|
||||
{
|
||||
state = SCAN_LNK;
|
||||
goto known_suffix;
|
||||
lnk_state = 1;
|
||||
suffixes = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2451,10 +2447,6 @@ suffix_scan::has (const char *in_path, const suffix_info *in_suffixes, char **ex
|
||||
ext_here = *ext_where = strchr (path, '\0');
|
||||
nullterm = 1;
|
||||
return NULL;
|
||||
|
||||
known_suffix:
|
||||
suffixes = NULL; /* Has an extension so don't scan for one. */
|
||||
return ext_here;
|
||||
}
|
||||
|
||||
int
|
||||
@ -2478,6 +2470,7 @@ suffix_scan::next ()
|
||||
switch (state++)
|
||||
{
|
||||
case SCAN_LNK:
|
||||
lnk_state = 1;
|
||||
strcpy (ext_here, ".lnk");
|
||||
/* fall through */
|
||||
case SCAN_BEG:
|
||||
@ -2566,7 +2559,7 @@ symlink_info::check (const char *path, const suffix_info *suffixes)
|
||||
if (suffix.lnk_match ())
|
||||
{
|
||||
fileattr = (DWORD)-1;
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
goto file_not_symlink;
|
||||
}
|
||||
|
@ -762,7 +762,7 @@ chown_worker (const char *name, unsigned fmode, uid_t uid, gid_t gid)
|
||||
|
||||
done:
|
||||
syscall_printf ("%d = %schown (%s,...)",
|
||||
res, (fmode & PC_SYM_IGNORE) ? "l" : "", name);
|
||||
res, (fmode & PC_SYM_NOFOLLOW) ? "l" : "", name);
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -777,7 +777,7 @@ extern "C" int
|
||||
lchown (const char * name, uid_t uid, gid_t gid)
|
||||
{
|
||||
sigframe thisframe (mainthread);
|
||||
return chown_worker (name, PC_SYM_IGNORE, uid, gid);
|
||||
return chown_worker (name, PC_SYM_NOFOLLOW, uid, gid);
|
||||
}
|
||||
|
||||
extern "C" int
|
||||
@ -1279,9 +1279,7 @@ _rename (const char *oldpath, const char *newpath)
|
||||
if (real_old.issymlink () && !real_new.error)
|
||||
{
|
||||
int len_old = strlen (real_old.get_win32 ());
|
||||
int len_new = strlen (real_new.get_win32 ());
|
||||
if (!strcasecmp (real_old.get_win32 () + len_old - 4, ".lnk") &&
|
||||
strcasecmp (real_new.get_win32 () + len_new - 4, ".lnk"))
|
||||
if (!strcasecmp (real_old.get_win32 () + len_old - 4, ".lnk"))
|
||||
{
|
||||
strcpy (new_lnk_buf, newpath);
|
||||
strcat (new_lnk_buf, ".lnk");
|
||||
|
Loading…
x
Reference in New Issue
Block a user