Re: [PATCH v2] Fix safe_create_leading_directories() for Windows

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Sebastian Schuberth <sschuberth@xxxxxxxxx> writes:

> When cloning to a directory "C:\foo\bar" from Windows' cmd.exe where "foo"
> does not exist yet, Git would throw an error like
>
> fatal: could not create work tree dir 'c:\foo\bar'.: No such file or directory
>
> Fix this by not hard-coding a platform specific directory separator into
> safe_create_leading_directories().
>
> Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx>
> Signed-off-by: Sebastian Schuberth <sschuberth@xxxxxxxxx>
> ---
>  sha1_file.c | 15 +++++++++------
>  1 file changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/sha1_file.c b/sha1_file.c
> index 760dd60..2114c58 100644
> --- a/sha1_file.c
> +++ b/sha1_file.c
> @@ -110,12 +110,15 @@ int safe_create_leading_directories(char *path)
>  	char *pos = path + offset_1st_component(path);
>  	struct stat st;
>  
> -	while (pos) {
> -		pos = strchr(pos, '/');
> -		if (!pos)
> -			break;
> -		while (*++pos == '/')
> -			;
> +	while (*pos) {
> +		while (!is_dir_sep(*pos)) {
> +			++pos;
> +			if (!*pos)
> +				break;
> +		}
> +		/* skip consecutive directory separators */
> +		while (is_dir_sep(*pos))
> +			++pos;
>  		if (!*pos)
>  			break;
>  		*--pos = '\0';

This has a bit of conflict with another topic in flight; I think I
resolved it correctly, but please double check.  The following is
how it would apply on top of 'pu'.

 sha1_file.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/sha1_file.c b/sha1_file.c
index 131ca97..9e686eb 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -113,11 +113,12 @@ int safe_create_leading_directories(char *path)
 
 	while (!retval && next_component) {
 		struct stat st;
-		char *slash = strchr(next_component, '/');
-
-		if (!slash)
+		char *slash = next_component;
+		while (!is_dir_sep(*slash))
+			++slash;
+		if (!*slash)
 			return 0;
-		while (*(slash + 1) == '/')
+		while (is_dir_sep(*(slash + 1)))
 			slash++;
 		next_component = slash + 1;
 		if (!*next_component)
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]