* path.cc: Change 'to_posix_p' to 'to_posix' throughout.
(conv_path_list_buf_size): Accommodate relative paths.
This commit is contained in:
		| @@ -1,3 +1,8 @@ | |||||||
|  | 2003-02-05  Christopher Faylor  <cgf@redhat.com> | ||||||
|  |  | ||||||
|  | 	* path.cc: Change 'to_posix_p' to 'to_posix' throughout. | ||||||
|  | 	(conv_path_list_buf_size): Accommodate relative paths. | ||||||
|  |  | ||||||
| 2003-02-05  Christopher Faylor  <cgf@redhat.com> | 2003-02-05  Christopher Faylor  <cgf@redhat.com> | ||||||
|  |  | ||||||
| 	* path.cc (etc::dir_changed): Fix debug printf. | 	* path.cc (etc::dir_changed): Fix debug printf. | ||||||
|   | |||||||
| @@ -1318,13 +1318,13 @@ slash_unc_prefix_p (const char *path) | |||||||
| /* conv_path_list: Convert a list of path names to/from Win32/POSIX. */ | /* conv_path_list: Convert a list of path names to/from Win32/POSIX. */ | ||||||
|  |  | ||||||
| static void | static void | ||||||
| conv_path_list (const char *src, char *dst, int to_posix_p) | conv_path_list (const char *src, char *dst, int to_posix) | ||||||
| { | { | ||||||
|   char *s; |   char *s; | ||||||
|   char *d = dst; |   char *d = dst; | ||||||
|   char src_delim = to_posix_p ? ';' : ':'; |   char src_delim = to_posix ? ';' : ':'; | ||||||
|   char dst_delim = to_posix_p ? ':' : ';'; |   char dst_delim = to_posix ? ':' : ';'; | ||||||
|   int (*conv_fn) (const char *, char *) = (to_posix_p |   int (*conv_fn) (const char *, char *) = (to_posix | ||||||
| 					   ? cygwin_conv_to_posix_path | 					   ? cygwin_conv_to_posix_path | ||||||
| 					   : cygwin_conv_to_win32_path); | 					   : cygwin_conv_to_win32_path); | ||||||
|  |  | ||||||
| @@ -3487,23 +3487,29 @@ cygwin_posix_path_list_p (const char *path) | |||||||
|    allows the caller to use alloca if it wants.  */ |    allows the caller to use alloca if it wants.  */ | ||||||
|  |  | ||||||
| static int | static int | ||||||
| conv_path_list_buf_size (const char *path_list, int to_posix_p) | conv_path_list_buf_size (const char *path_list, bool to_posix) | ||||||
| { | { | ||||||
|   int i, num_elms, max_mount_path_len, size; |   int i, num_elms, max_mount_path_len, size; | ||||||
|   const char *p; |   const char *p; | ||||||
|  |  | ||||||
|  |   path_conv pc(".", PC_FULL | PC_POSIX); | ||||||
|   /* The theory is that an upper bound is |   /* The theory is that an upper bound is | ||||||
|      current_size + (num_elms * max_mount_path_len)  */ |      current_size + (num_elms * max_mount_path_len)  */ | ||||||
|  |  | ||||||
|   char delim = to_posix_p ? ';' : ':'; |   unsigned nrel; | ||||||
|   p = path_list; |   char delim = to_posix ? ';' : ':'; | ||||||
|   for (num_elms = 1; (p = strchr (p, delim)) != NULL; ++num_elms) |   for (p = path_list, num_elms = nrel = 0; p; num_elms++) | ||||||
|     ++p; |     { | ||||||
|  |       if (!isabspath (p)) | ||||||
|  | 	nrel++; | ||||||
|  |       p = strchr (++p, delim); | ||||||
|  |     } | ||||||
|  |  | ||||||
|   /* 7: strlen ("//c") + slop, a conservative initial value */ |   /* 7: strlen ("//c") + slop, a conservative initial value */ | ||||||
|   for (max_mount_path_len = 7, i = 0; i < mount_table->nmounts; ++i) |   for (max_mount_path_len = sizeof ("/cygdrive/X"), i = 0; | ||||||
|  |        i < mount_table->nmounts; i++) | ||||||
|     { |     { | ||||||
|       int mount_len = (to_posix_p |       int mount_len = (to_posix | ||||||
| 		       ? mount_table->mount[i].posix_pathlen | 		       ? mount_table->mount[i].posix_pathlen | ||||||
| 		       : mount_table->mount[i].native_pathlen); | 		       : mount_table->mount[i].native_pathlen); | ||||||
|       if (max_mount_path_len < mount_len) |       if (max_mount_path_len < mount_len) | ||||||
| @@ -3511,20 +3517,23 @@ conv_path_list_buf_size (const char *path_list, int to_posix_p) | |||||||
|     } |     } | ||||||
|  |  | ||||||
|   /* 100: slop */ |   /* 100: slop */ | ||||||
|   size = strlen (path_list) + (num_elms * max_mount_path_len) + 100; |   size = strlen (path_list) | ||||||
|  |     + (num_elms * max_mount_path_len) | ||||||
|  |     + (nrel * strlen (to_posix ? pc.get_win32 () : pc.normalized_path)) | ||||||
|  |     + 100; | ||||||
|   return size; |   return size; | ||||||
| } | } | ||||||
|  |  | ||||||
| extern "C" int | extern "C" int | ||||||
| cygwin_win32_to_posix_path_list_buf_size (const char *path_list) | cygwin_win32_to_posix_path_list_buf_size (const char *path_list) | ||||||
| { | { | ||||||
|   return conv_path_list_buf_size (path_list, 1); |   return conv_path_list_buf_size (path_list, true); | ||||||
| } | } | ||||||
|  |  | ||||||
| extern "C" int | extern "C" int | ||||||
| cygwin_posix_to_win32_path_list_buf_size (const char *path_list) | cygwin_posix_to_win32_path_list_buf_size (const char *path_list) | ||||||
| { | { | ||||||
|   return conv_path_list_buf_size (path_list, 0); |   return conv_path_list_buf_size (path_list, false); | ||||||
| } | } | ||||||
|  |  | ||||||
| extern "C" int | extern "C" int | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user