* path.cc (path_conv::set_normalized_path): Drop strip_tail argument.
Never strip trailing dots and spaces. * (path_conv::check): Accomodate above change. * path.h (path_conv::operator=): Ditto * dtable.cc (build_fh_dev): Ditto. * fhandler.h (fhandler_base::set_name): Ditto. * path.cc (transform_chars): Disable converting trailing dots and spaces. * path.cc (path_conv::check): Remove two disabled code snippets.
This commit is contained in:
parent
a065930a3a
commit
a9e9da89fa
|
@ -1,3 +1,17 @@
|
||||||
|
2008-05-13 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* path.cc (path_conv::set_normalized_path): Drop strip_tail argument.
|
||||||
|
Never strip trailing dots and spaces.
|
||||||
|
* (path_conv::check): Accomodate above change.
|
||||||
|
* path.h (path_conv::operator=): Ditto
|
||||||
|
* dtable.cc (build_fh_dev): Ditto.
|
||||||
|
* fhandler.h (fhandler_base::set_name): Ditto.
|
||||||
|
|
||||||
|
* path.cc (transform_chars): Disable converting trailing dots and
|
||||||
|
spaces.
|
||||||
|
|
||||||
|
* path.cc (path_conv::check): Remove two disabled code snippets.
|
||||||
|
|
||||||
2008-05-13 Corinna Vinschen <corinna@vinschen.de>
|
2008-05-13 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* random.cc (initstate): Align to POSIX definition.
|
* random.cc (initstate): Align to POSIX definition.
|
||||||
|
|
|
@ -396,9 +396,9 @@ build_fh_dev (const device& dev, const char *unix_name)
|
||||||
{
|
{
|
||||||
path_conv pc (dev);
|
path_conv pc (dev);
|
||||||
if (unix_name)
|
if (unix_name)
|
||||||
pc.set_normalized_path (unix_name, false);
|
pc.set_normalized_path (unix_name);
|
||||||
else
|
else
|
||||||
pc.set_normalized_path (dev.name, false);
|
pc.set_normalized_path (dev.name);
|
||||||
return build_fh_pc (pc);
|
return build_fh_pc (pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -153,7 +153,7 @@ class fhandler_base
|
||||||
path_conv pc;
|
path_conv pc;
|
||||||
|
|
||||||
virtual void set_name (path_conv &pc);
|
virtual void set_name (path_conv &pc);
|
||||||
virtual void set_name (const char *s) {pc.set_normalized_path (s, false);}
|
virtual void set_name (const char *s) {pc.set_normalized_path (s);}
|
||||||
int error () const {return pc.error;}
|
int error () const {return pc.error;}
|
||||||
void set_error (int error) {pc.error = error;}
|
void set_error (int error) {pc.error = error;}
|
||||||
bool exists () const {return pc.exists ();}
|
bool exists () const {return pc.exists ();}
|
||||||
|
|
|
@ -531,17 +531,9 @@ path_conv::fillin (HANDLE h)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
path_conv::set_normalized_path (const char *path_copy, bool strip_tail)
|
path_conv::set_normalized_path (const char *path_copy)
|
||||||
{
|
{
|
||||||
char *p = strchr (path_copy, '\0');
|
char *p = strchr (path_copy, '\0');
|
||||||
|
|
||||||
if (strip_tail)
|
|
||||||
{
|
|
||||||
while (*--p == '.' || *p == ' ')
|
|
||||||
continue;
|
|
||||||
*++p = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t n = 1 + p - path_copy;
|
size_t n = 1 + p - path_copy;
|
||||||
|
|
||||||
normalized_path = path + sizeof (path) - n;
|
normalized_path = path + sizeof (path) - n;
|
||||||
|
@ -605,10 +597,14 @@ transform_chars (PUNICODE_STRING upath, USHORT start_idx, bool managed)
|
||||||
for (buf += start_idx; buf <= end; ++buf)
|
for (buf += start_idx; buf <= end; ++buf)
|
||||||
if (*buf < 128)
|
if (*buf < 128)
|
||||||
*buf = tfx[*buf];
|
*buf = tfx[*buf];
|
||||||
|
#if 0
|
||||||
/* Win32 can't handle trailing dots and spaces. Transform the last of them
|
/* Win32 can't handle trailing dots and spaces. Transform the last of them
|
||||||
to the private use area, too, to create a valid Win32 filename. */
|
to the private use area, too, to create a valid Win32 filename. */
|
||||||
|
if (*end == L'\\')
|
||||||
|
--end;
|
||||||
if (*end == L'.' || *end == L' ')
|
if (*end == L'.' || *end == L' ')
|
||||||
*end |= 0xf000;
|
*end |= 0xf000;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
PUNICODE_STRING
|
PUNICODE_STRING
|
||||||
|
@ -1171,7 +1167,6 @@ virtual_component_retry:
|
||||||
add_ext_from_sym (sym);
|
add_ext_from_sym (sym);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
bool strip_tail = false;
|
|
||||||
if (dev.devn == FH_NETDRIVE && component)
|
if (dev.devn == FH_NETDRIVE && component)
|
||||||
{
|
{
|
||||||
/* This case indicates a non-existant resp. a non-retrievable
|
/* This case indicates a non-existant resp. a non-retrievable
|
||||||
|
@ -1203,35 +1198,10 @@ out:
|
||||||
{
|
{
|
||||||
if (strncmp (path, "\\\\.\\", 4))
|
if (strncmp (path, "\\\\.\\", 4))
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
/* Windows ignores trailing dots and spaces in the last path
|
|
||||||
component, and ignores exactly one trailing dot in inner
|
|
||||||
path components. */
|
|
||||||
char *tail = NULL;
|
|
||||||
for (char *p = path; *p; p++)
|
|
||||||
{
|
|
||||||
if (*p != '.' && *p != ' ')
|
|
||||||
tail = NULL;
|
|
||||||
else if (!tail)
|
|
||||||
tail = p;
|
|
||||||
if (tail && p[1] == '\\')
|
|
||||||
{
|
|
||||||
if (p > tail || *tail != '.')
|
|
||||||
{
|
|
||||||
error = ENOENT;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
tail = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (!tail || tail == path)
|
if (!tail || tail == path)
|
||||||
/* nothing */;
|
/* nothing */;
|
||||||
else if (tail[-1] != '\\')
|
else if (tail[-1] != '\\')
|
||||||
{
|
|
||||||
*tail = '\0';
|
*tail = '\0';
|
||||||
strip_tail = true;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
error = ENOENT;
|
error = ENOENT;
|
||||||
|
@ -1255,11 +1225,6 @@ out:
|
||||||
set_exec (0);
|
set_exec (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (issocket ())
|
|
||||||
devn = FH_SOCKET;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (opt & PC_NOFULL)
|
if (opt & PC_NOFULL)
|
||||||
{
|
{
|
||||||
if (is_relpath)
|
if (is_relpath)
|
||||||
|
@ -1296,7 +1261,7 @@ out:
|
||||||
{
|
{
|
||||||
if (tail < path_end && tail > path_copy + 1)
|
if (tail < path_end && tail > path_copy + 1)
|
||||||
*tail = '/';
|
*tail = '/';
|
||||||
set_normalized_path (path_copy, strip_tail);
|
set_normalized_path (path_copy);
|
||||||
if (is_msdos && !(opt & PC_NOWARN))
|
if (is_msdos && !(opt & PC_NOWARN))
|
||||||
warn_msdos (src);
|
warn_msdos (src);
|
||||||
}
|
}
|
||||||
|
|
|
@ -253,7 +253,7 @@ class path_conv
|
||||||
path_conv &operator =(path_conv &pc)
|
path_conv &operator =(path_conv &pc)
|
||||||
{
|
{
|
||||||
memcpy (this, &pc, pc.size ());
|
memcpy (this, &pc, pc.size ());
|
||||||
set_normalized_path (pc.normalized_path, false);
|
set_normalized_path (pc.normalized_path);
|
||||||
wide_path = NULL;
|
wide_path = NULL;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
@ -280,7 +280,7 @@ class path_conv
|
||||||
unsigned __stdcall ndisk_links (DWORD);
|
unsigned __stdcall ndisk_links (DWORD);
|
||||||
char *normalized_path;
|
char *normalized_path;
|
||||||
size_t normalized_path_size;
|
size_t normalized_path_size;
|
||||||
void set_normalized_path (const char *, bool) __attribute__ ((regparm (3)));
|
void set_normalized_path (const char *) __attribute__ ((regparm (2)));
|
||||||
DWORD get_symlink_length () { return symlink_length; };
|
DWORD get_symlink_length () { return symlink_length; };
|
||||||
private:
|
private:
|
||||||
DWORD symlink_length;
|
DWORD symlink_length;
|
||||||
|
|
Loading…
Reference in New Issue