* path.cc (path_conv::check): Reset FH_CYGDRIVE if iterating through path.

This commit is contained in:
Christopher Faylor 2001-12-07 05:03:32 +00:00
parent a0c1938145
commit a12a3466b1
2 changed files with 39 additions and 32 deletions

View File

@ -1,3 +1,8 @@
2001-12-06 Christopher Faylor <cgf@redhat.com>
* path.cc (path_conv::check): Reset FH_CYGDRIVE if iterating through
path.
2001-12-06 Christopher Faylor <cgf@redhat.com> 2001-12-06 Christopher Faylor <cgf@redhat.com>
* path.cc (path_conv::check): Don't complain if /dev/x/foo when x * path.cc (path_conv::check): Don't complain if /dev/x/foo when x

View File

@ -100,7 +100,7 @@ struct symlink_info
int is_symlink; int is_symlink;
bool ext_tacked_on; bool ext_tacked_on;
int error; int error;
BOOL case_clash; bool case_clash;
int check (char *path, const suffix_info *suffixes, unsigned opt); int check (char *path, const suffix_info *suffixes, unsigned opt);
BOOL case_check (char *path); BOOL case_check (char *path);
}; };
@ -401,7 +401,7 @@ path_conv::check (const char *src, unsigned opt,
path_flags = 0; path_flags = 0;
known_suffix = NULL; known_suffix = NULL;
fileattr = (DWORD) -1; fileattr = (DWORD) -1;
case_clash = FALSE; case_clash = false;
devn = unit = 0; devn = unit = 0;
root_dir[0] = '\0'; root_dir[0] = '\0';
fs_name[0] = '\0'; fs_name[0] = '\0';
@ -479,10 +479,16 @@ path_conv::check (const char *src, unsigned opt,
if (error) if (error)
return; return;
/* devn should not be a device. If it is, then stop parsing now. */ if (devn == FH_CYGDRIVE)
if (devn != FH_BAD)
{ {
if (devn != FH_CYGDRIVE) if (component)
devn = FH_BAD;
fileattr = !unit ? FILE_ATTRIBUTE_DIRECTORY
: GetFileAttributes (full_path);
goto out;
}
/* devn should not be a device. If it is, then stop parsing now. */
else if (devn != FH_BAD)
{ {
fileattr = 0; fileattr = 0;
if (component) if (component)
@ -490,10 +496,6 @@ path_conv::check (const char *src, unsigned opt,
error = ENOTDIR; error = ENOTDIR;
return; return;
} }
}
else if (!component)
fileattr = !unit ? FILE_ATTRIBUTE_DIRECTORY
: GetFileAttributes (full_path);
goto out; /* Found a device. Stop parsing. */ goto out; /* Found a device. Stop parsing. */
} }
@ -502,9 +504,10 @@ path_conv::check (const char *src, unsigned opt,
/* Eat trailing slashes */ /* Eat trailing slashes */
char *dostail = strchr (full_path, '\0'); char *dostail = strchr (full_path, '\0');
/* If path is only a drivename, Windows interprets it as the current working /* If path is only a drivename, Windows interprets it as the
directory on this drive instead of the root dir which is what we want. So current working directory on this drive instead of the root
we need the trailing backslash in this case. */ dir which is what we want. So we need the trailing backslash
in this case. */
while (dostail > full_path + 3 && (*--dostail == '\\')) while (dostail > full_path + 3 && (*--dostail == '\\'))
*tail = '\0'; *tail = '\0';
@ -537,7 +540,6 @@ path_conv::check (const char *src, unsigned opt,
if (!component) if (!component)
case_clash = TRUE; case_clash = TRUE;
} }
if (!(opt & PC_SYM_IGNORE)) if (!(opt & PC_SYM_IGNORE))
{ {
if (!component) if (!component)
@ -692,8 +694,8 @@ out:
update_fs_info (path); update_fs_info (path);
if (!fs_name[0]) if (!fs_name[0])
{ {
set_has_acls (FALSE); set_has_acls (false);
set_has_buggy_open (FALSE); set_has_buggy_open (false);
} }
else else
{ {
@ -701,7 +703,7 @@ out:
debug_printf ("root_dir(%s), this->path(%s), set_has_acls(%d)", debug_printf ("root_dir(%s), this->path(%s), set_has_acls(%d)",
root_dir, this->path, fs_flags & FS_PERSISTENT_ACLS); root_dir, this->path, fs_flags & FS_PERSISTENT_ACLS);
if (!allow_smbntsec && is_remote_drive) if (!allow_smbntsec && is_remote_drive)
set_has_acls (FALSE); set_has_acls (false);
else else
set_has_acls (fs_flags & FS_PERSISTENT_ACLS); set_has_acls (fs_flags & FS_PERSISTENT_ACLS);
/* Known file systems with buggy open calls. Further explanation /* Known file systems with buggy open calls. Further explanation
@ -1022,10 +1024,10 @@ win32_device_name (const char *src_path, char *win32_path,
devn = get_device_number (src_path, win32_path, unit); devn = get_device_number (src_path, win32_path, unit);
if (devn == FH_BAD) if (devn == FH_BAD)
return FALSE; return false;
if ((devfmt = windows_device_names[FHDEVN (devn)]) == NULL) if ((devfmt = windows_device_names[FHDEVN (devn)]) == NULL)
return FALSE; return false;
switch (devn) switch (devn)
{ {
case FH_RANDOM: case FH_RANDOM:
@ -1724,7 +1726,7 @@ mount_info::read_mounts (reg_key& r)
mount_flags = subkey.get_int ("flags", 0); mount_flags = subkey.get_int ("flags", 0);
/* Add mount_item corresponding to registry mount point. */ /* Add mount_item corresponding to registry mount point. */
res = mount_table->add_item (native_path, posix_path, mount_flags, FALSE); res = mount_table->add_item (native_path, posix_path, mount_flags, false);
if (res && get_errno () == EMFILE) if (res && get_errno () == EMFILE)
break; /* The number of entries exceeds MAX_MOUNTS */ break; /* The number of entries exceeds MAX_MOUNTS */
} }
@ -2187,7 +2189,7 @@ int
mount_info::del_item (const char *path, unsigned flags, int reg_p) mount_info::del_item (const char *path, unsigned flags, int reg_p)
{ {
char pathtmp[MAX_PATH]; char pathtmp[MAX_PATH];
int posix_path_p = FALSE; int posix_path_p = false;
/* Something's wrong if path is NULL or empty. */ /* Something's wrong if path is NULL or empty. */
if (path == NULL || *path == 0 || !isabspath (path)) if (path == NULL || *path == 0 || !isabspath (path))
@ -2533,14 +2535,14 @@ set_symlink_ea (const char* frompath, const char* topath)
if (!NTWriteEA (frompath, SYMLINK_EA_NAME, topath, strlen (topath) + 1)) if (!NTWriteEA (frompath, SYMLINK_EA_NAME, topath, strlen (topath) + 1))
{ {
debug_printf ("Cannot save symlink in EA"); debug_printf ("Cannot save symlink in EA");
return FALSE; return false;
} }
return TRUE; return TRUE;
} }
/* Create a symlink from FROMPATH to TOPATH. */ /* Create a symlink from FROMPATH to TOPATH. */
/* If TRUE create symlinks as Windows shortcuts, if FALSE create symlinks /* If TRUE create symlinks as Windows shortcuts, if false create symlinks
as normal files with magic number and system bit set. */ as normal files with magic number and system bit set. */
int allow_winsymlinks = TRUE; int allow_winsymlinks = TRUE;
@ -2900,7 +2902,7 @@ symlink_info::check (char *path, const suffix_info *suffixes, unsigned opt)
pflags &= ~PATH_SYMLINK; pflags &= ~PATH_SYMLINK;
case_clash = FALSE; case_clash = false;
while (suffix.next ()) while (suffix.next ())
{ {
@ -2984,7 +2986,7 @@ symlink_info::check (char *path, const suffix_info *suffixes, unsigned opt)
break; break;
file_not_symlink: file_not_symlink:
is_symlink = FALSE; is_symlink = false;
syscall_printf ("not a symlink"); syscall_printf ("not a symlink");
res = 0; res = 0;
break; break;
@ -2997,7 +2999,7 @@ symlink_info::check (char *path, const suffix_info *suffixes, unsigned opt)
/* Check the correct case of the last path component (given in DOS style). /* Check the correct case of the last path component (given in DOS style).
Adjust the case in this->path if pcheck_case == PCHECK_ADJUST or return Adjust the case in this->path if pcheck_case == PCHECK_ADJUST or return
FALSE if pcheck_case == PCHECK_STRICT. false if pcheck_case == PCHECK_STRICT.
Dont't call if pcheck_case == PCHECK_RELAXED. Dont't call if pcheck_case == PCHECK_RELAXED.
*/ */
@ -3027,7 +3029,7 @@ symlink_info::case_check (char *path)
/* If check is set to STRICT, a wrong case results /* If check is set to STRICT, a wrong case results
in returning a ENOENT. */ in returning a ENOENT. */
if (pcheck_case == PCHECK_STRICT) if (pcheck_case == PCHECK_STRICT)
return FALSE; return false;
/* PCHECK_ADJUST adjusts the case in the incoming /* PCHECK_ADJUST adjusts the case in the incoming
path which points to the path in *this. */ path which points to the path in *this. */
@ -3541,7 +3543,7 @@ cwdstuff::get_hash ()
void void
cwdstuff::init () cwdstuff::init ()
{ {
lock = new_muto (FALSE, "cwd"); lock = new_muto (false, "cwd");
} }
/* Get initial cwd. Should only be called once in a /* Get initial cwd. Should only be called once in a