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-06-04 05:28:09 +0400
committerChristopher Faylor <me@cgf.cx>2001-06-04 05:28:09 +0400
commitac5561f2ed95d2ffcb81723d9556aadc1768ca04 (patch)
treedcac3dbe7a95d896583c184f7de830ad0b9ddc2f /winsup/cygwin/path.cc
parent9f13167f7789db27d1090a78c847f5a0e81e01f6 (diff)
* path.cc (normalize_posix_path): Revert .. check removed by previous changes.
* cygheap.h: Temporarily declare path_prefix_p here.
Diffstat (limited to 'winsup/cygwin/path.cc')
-rw-r--r--winsup/cygwin/path.cc49
1 files changed, 27 insertions, 22 deletions
diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc
index 20629913a..4f40db818 100644
--- a/winsup/cygwin/path.cc
+++ b/winsup/cygwin/path.cc
@@ -89,7 +89,6 @@ static DWORD available_drives;
static int normalize_win32_path (const char *src, char *dst);
static void slashify (const char *src, char *dst, int trailing_slash_p);
static void backslashify (const char *src, char *dst, int trailing_slash_p);
-static int path_prefix_p (const char *path1, const char *path2, int len1);
struct symlink_info
{
@@ -243,6 +242,12 @@ normalize_posix_path (const char *src, char *dst)
}
else if (src[2] && !isslash (src[2]))
break;
+ else
+ {
+ while (dst > dst_start && !isslash (*--dst))
+ continue;
+ src++;
+ }
}
*dst++ = '/';
@@ -270,7 +275,7 @@ path_conv::add_ext_from_sym (symlink_info &sym)
{
known_suffix = path + sym.extn;
if (sym.ext_tacked_on)
- strcpy (known_suffix, sym.ext_here);
+ strcpy (known_suffix, sym.ext_here);
}
}
@@ -451,17 +456,17 @@ path_conv::check (const char *src, unsigned opt,
if (sym.case_clash)
{
if (pcheck_case == PCHECK_STRICT)
- {
+ {
case_clash = TRUE;
error = ENOENT;
goto out;
}
/* If pcheck_case==PCHECK_ADJUST the case_clash is remembered
- if the last component is concerned. This allows functions
+ if the last component is concerned. This allows functions
which shall create files to avoid overriding already existing
files with another case. */
if (!component)
- case_clash = TRUE;
+ case_clash = TRUE;
}
if (!(opt & PC_SYM_IGNORE))
@@ -499,15 +504,15 @@ path_conv::check (const char *src, unsigned opt,
set_symlink (); // last component of path is a symlink.
fileattr = sym.fileattr;
if (opt & PC_SYM_CONTENTS)
- {
+ {
strcpy (path, sym.contents);
goto out;
}
add_ext_from_sym (sym);
if (pcheck_case == PCHECK_RELAXED)
- goto out;
+ goto out;
/* Avoid further symlink evaluation. Only case checks are
- done now. */
+ done now. */
opt |= PC_SYM_IGNORE;
}
else
@@ -617,7 +622,7 @@ out:
if (!rootdir (tmp_buf) ||
!GetVolumeInformation (tmp_buf, NULL, 0, &vol_serial, NULL,
- &vol_flags, fs_name, 16))
+ &vol_flags, fs_name, 16))
{
debug_printf ("GetVolumeInformation(%s) = ERR, this->path(%s), set_has_acls(FALSE)",
tmp_buf, this->path, GetLastError ());
@@ -633,11 +638,11 @@ out:
if (drive_type == DRIVE_REMOTE || (drive_type == DRIVE_UNKNOWN && (tmp_buf[0] == '\\' && tmp_buf[1] == '\\')))
is_remote_drive = 1;
if (!allow_smbntsec && is_remote_drive)
- set_has_acls (FALSE);
+ set_has_acls (FALSE);
else
- set_has_acls (vol_flags & FS_PERSISTENT_ACLS);
+ set_has_acls (vol_flags & FS_PERSISTENT_ACLS);
/* Known file systems with buggy open calls. Further explanation
- in fhandler.cc (fhandler_disk_file::open). */
+ in fhandler.cc (fhandler_disk_file::open). */
set_has_buggy_open (strcmp (fs_name, "SUNWNFS") == 0);
}
@@ -2182,10 +2187,10 @@ cygdrive_getmntent ()
__small_sprintf (native_path, "%c:\\", drive);
if (GetDriveType (native_path) == DRIVE_REMOVABLE ||
GetFileAttributes (native_path) == (DWORD) -1)
- {
+ {
available_drives &= ~mask;
continue;
- }
+ }
native_path[2] = '\0';
__small_sprintf (posix_path, "%s%c", mount_table->cygdrive, drive);
ret = fillout_mntent (native_path, posix_path, mount_table->cygdrive_flags);
@@ -2405,7 +2410,7 @@ symlink (const char *topath, const char *frompath)
unsigned short len = strlen (topath);
unsigned short win_len = strlen (w32topath);
success = WriteFile (h, shortcut_header, SHORTCUT_HDR_SIZE,
- &written, NULL)
+ &written, NULL)
&& written == SHORTCUT_HDR_SIZE
&& WriteFile (h, &len, sizeof len, &written, NULL)
&& written == sizeof len
@@ -2426,7 +2431,7 @@ symlink (const char *topath, const char *frompath)
/* Note that the terminating nul is written. */
success = WriteFile (h, buf, len, &written, NULL)
- || written != len;
+ || written != len;
}
if (success)
@@ -2436,8 +2441,8 @@ symlink (const char *topath, const char *frompath)
win32_path.get_win32 (),
S_IFLNK | S_IRWXU | S_IRWXG | S_IRWXO);
SetFileAttributesA (win32_path.get_win32 (),
- allow_winsymlinks ? FILE_ATTRIBUTE_READONLY
- : FILE_ATTRIBUTE_SYSTEM);
+ allow_winsymlinks ? FILE_ATTRIBUTE_READONLY
+ : FILE_ATTRIBUTE_SYSTEM);
res = 0;
}
else
@@ -2678,15 +2683,15 @@ symlink_info::check (char *path, const suffix_info *suffixes, unsigned opt)
ext_tacked_on = !!*ext_here;
if (pcheck_case != PCHECK_RELAXED && !case_check (path)
- || (opt & PC_SYM_IGNORE))
- goto file_not_symlink;
+ || (opt & PC_SYM_IGNORE))
+ goto file_not_symlink;
int sym_check;
sym_check = 0;
if (fileattr & FILE_ATTRIBUTE_DIRECTORY)
- goto file_not_symlink;
+ goto file_not_symlink;
/* Windows shortcuts are treated as symlinks. */
if (suffix.lnk_match ())
@@ -2974,7 +2979,7 @@ chdir (const char *dir)
if (res == -1)
__seterrno ();
else if (!path.has_symlinks () && strpbrk (dir, ":\\") == NULL
- && pcheck_case == PCHECK_RELAXED)
+ && pcheck_case == PCHECK_RELAXED)
cygheap->cwd.set (path, dir);
else
cygheap->cwd.set (path, NULL);