cygwin_conv_path: Always preserve trailing backslashes in conversion to POSIX paths
* include/sys/cygwin.h (CCP_CONVFLAGS_MASK): Define. * mount.h (__CCP_APP_SLASH): Define. * mount.cc (mount_info::conv_to_posix_path): Handle __CCP_APP_SLASH flag. * path.cc (cygwin_conv_path): Use CCP_CONVFLAGS_MASK to evaluate "how" flag values. Always add __CCP_APP_SLASH flag when calling mount_info::conv_to_posix_path. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
9676aeef0d
commit
8b83da2d55
|
@ -59,8 +59,10 @@ enum
|
||||||
/* Or these values to the above as needed. */
|
/* Or these values to the above as needed. */
|
||||||
CCP_ABSOLUTE = 0, /* Request absolute path (default). */
|
CCP_ABSOLUTE = 0, /* Request absolute path (default). */
|
||||||
CCP_RELATIVE = 0x100, /* Request to keep path relative. */
|
CCP_RELATIVE = 0x100, /* Request to keep path relative. */
|
||||||
CCP_PROC_CYGDRIVE = 0x200 /* Request to return /proc/cygdrive
|
CCP_PROC_CYGDRIVE = 0x200, /* Request to return /proc/cygdrive
|
||||||
path (only with CCP_*_TO_POSIX). */
|
path (only with CCP_*_TO_POSIX). */
|
||||||
|
|
||||||
|
CCP_CONVFLAGS_MASK = 0x300,
|
||||||
};
|
};
|
||||||
typedef unsigned int cygwin_conv_path_t;
|
typedef unsigned int cygwin_conv_path_t;
|
||||||
|
|
||||||
|
|
|
@ -899,7 +899,8 @@ mount_info::conv_to_posix_path (const char *src_path, char *posix_path,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const char *lastchar = src_path + src_path_len - 1;
|
const char *lastchar = src_path + src_path_len - 1;
|
||||||
append_slash = isdirsep (*lastchar) && lastchar[-1] != ':';
|
append_slash = isdirsep (*lastchar)
|
||||||
|
&& ((ccp_flags & __CCP_APP_SLASH) || lastchar[-1] != ':');
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_printf ("conv_to_posix_path (%s, 0x%x, %s)", src_path, ccp_flags,
|
debug_printf ("conv_to_posix_path (%s, 0x%x, %s)", src_path, ccp_flags,
|
||||||
|
|
|
@ -12,6 +12,10 @@ details. */
|
||||||
#ifndef _MOUNT_H
|
#ifndef _MOUNT_H
|
||||||
#define _MOUNT_H
|
#define _MOUNT_H
|
||||||
|
|
||||||
|
#define __CCP_APP_SLASH 0x10000000 /* Internal flag for conv_to_posix_path.
|
||||||
|
always append slash, even if path
|
||||||
|
is "X:\\" only. */
|
||||||
|
|
||||||
enum disk_type
|
enum disk_type
|
||||||
{
|
{
|
||||||
DT_NODISK,
|
DT_NODISK,
|
||||||
|
|
|
@ -3318,7 +3318,7 @@ cygwin_conv_path (cygwin_conv_path_t what, const void *from, void *to,
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
PWCHAR path = NULL;
|
PWCHAR path = NULL;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
int how = what & ~CCP_CONVTYPE_MASK;
|
int how = what & CCP_CONVFLAGS_MASK;
|
||||||
what &= CCP_CONVTYPE_MASK;
|
what &= CCP_CONVTYPE_MASK;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
|
|
||||||
|
@ -3444,7 +3444,7 @@ cygwin_conv_path (cygwin_conv_path_t what, const void *from, void *to,
|
||||||
case CCP_WIN_A_TO_POSIX:
|
case CCP_WIN_A_TO_POSIX:
|
||||||
buf = tp.c_get ();
|
buf = tp.c_get ();
|
||||||
error = mount_table->conv_to_posix_path ((const char *) from, buf,
|
error = mount_table->conv_to_posix_path ((const char *) from, buf,
|
||||||
how);
|
how | __CCP_APP_SLASH);
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
set_errno (p.error);
|
set_errno (p.error);
|
||||||
|
@ -3455,7 +3455,7 @@ cygwin_conv_path (cygwin_conv_path_t what, const void *from, void *to,
|
||||||
case CCP_WIN_W_TO_POSIX:
|
case CCP_WIN_W_TO_POSIX:
|
||||||
buf = tp.c_get ();
|
buf = tp.c_get ();
|
||||||
error = mount_table->conv_to_posix_path ((const PWCHAR) from, buf,
|
error = mount_table->conv_to_posix_path ((const PWCHAR) from, buf,
|
||||||
how);
|
how | __CCP_APP_SLASH);
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
set_errno (error);
|
set_errno (error);
|
||||||
|
|
Loading…
Reference in New Issue