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