Stepan Kasal <ka...@ucw.cz> writes:

> From: Cezary Zawadka <czawa...@gmail.com>
> Date: Tue, 13 Jul 2010 16:17:43 +0200
>
> [efl: moved MinGW-specific part to compat/]
> [jes: fixed compilation on non-Windows]
>
> Eric Sunshine fixed mingw_offset_1st_component() to return consistently "foo"
> for UNC "//machine/share/foo", cf
> http://groups.google.com/group/msysgit/browse_thread/thread/c0af578549b5dda0
>
> Author: Eric Sunshine <sunsh...@sunshineco.com>
> Signed-off-by: Cezary Zawadka <czawa...@gmail.com>
> Signed-off-by: Eric Sunshine <sunsh...@sunshineco.com>
> Signed-off-by: Erik Faye-Lund <kusmab...@gmail.com>
> Signed-off-by: Johannes Schindelin <johannes.schinde...@gmx.de>
> Signed-off-by: Stepan Kasal <ka...@ucw.cz>
> ---
>
> Hello,
> this is another patch that lived in msysGit for years, at least from
> Jul 13, 2010.  It was there in two parts, first sketch by Cezary and
> a fix from Eric Sunshine, but I decided to submit the combined
> version.
>
> Let me note that this patch should not affect any non-Windows
> platform.  The chnage of offset_1st_component() to a simple macro is
> ok, because has_dos_drive_prefix() is 0 there.

As I do not think anybody takes the address of the function, I agree
it should be a no-op for non-Windows platform.

It would be nice if somebody in the S-o-b chain can double-check
that the "combined" version is sane.  I didn't read the mingw.c part
carefully enough for me to say returning 0 upon error is sane with
confidence, for example.

Thanks.

> Regards,
>   Stepan
>
>  cache.h           |  1 -
>  compat/mingw.c    | 24 ++++++++++++++++++++++++
>  compat/mingw.h    |  2 ++
>  git-compat-util.h |  4 ++++
>  path.c            |  7 -------
>  5 files changed, 30 insertions(+), 8 deletions(-)
>
> diff --git a/cache.h b/cache.h
> index ebe9a40..0961fb5 100644
> --- a/cache.h
> +++ b/cache.h
> @@ -781,7 +781,6 @@ int normalize_path_copy(char *dst, const char *src);
>  int longest_ancestor_length(const char *path, struct string_list *prefixes);
>  char *strip_path_suffix(const char *path, const char *suffix);
>  int daemon_avoid_alias(const char *path);
> -int offset_1st_component(const char *path);
>  
>  /* object replacement */
>  #define LOOKUP_REPLACE_OBJECT 1
> diff --git a/compat/mingw.c b/compat/mingw.c
> index e9892f8..a0e13bc 100644
> --- a/compat/mingw.c
> +++ b/compat/mingw.c
> @@ -1823,3 +1823,27 @@ pid_t waitpid(pid_t pid, int *status, int options)
>       errno = EINVAL;
>       return -1;
>  }
> +
> +int mingw_offset_1st_component(const char *path)
> +{
> +     int offset = 0;
> +     if (has_dos_drive_prefix(path))
> +             offset = 2;
> +
> +     /* unc paths */
> +     else if (is_dir_sep(path[0]) && is_dir_sep(path[1])) {
> +
> +             /* skip server name */
> +             char *pos = strpbrk(path + 2, "\\/");
> +             if (!pos)
> +                     return 0; /* Error: malformed unc path */
> +
> +             do {
> +                     pos++;
> +             } while (*pos && !is_dir_sep(*pos));
> +
> +             offset = pos - path;
> +     }
> +
> +     return offset + is_dir_sep(path[offset]);
> +}
> diff --git a/compat/mingw.h b/compat/mingw.h
> index e033e72..3eaf822 100644
> --- a/compat/mingw.h
> +++ b/compat/mingw.h
> @@ -339,6 +339,8 @@ static inline char *mingw_find_last_dir_sep(const char 
> *path)
>       return ret;
>  }
>  #define find_last_dir_sep mingw_find_last_dir_sep
> +int mingw_offset_1st_component(const char *path);
> +#define offset_1st_component mingw_offset_1st_component
>  #define PATH_SEP ';'
>  #define PRIuMAX "I64u"
>  #define PRId64 "I64d"
> diff --git a/git-compat-util.h b/git-compat-util.h
> index d493a8c..ec41cfb 100644
> --- a/git-compat-util.h
> +++ b/git-compat-util.h
> @@ -270,6 +270,10 @@ extern char *gitbasename(char *);
>  #define has_dos_drive_prefix(path) 0
>  #endif
>  
> +#ifndef offset_1st_component
> +#define offset_1st_component(path) (is_dir_sep((path)[0]))
> +#endif
> +
>  #ifndef is_dir_sep
>  #define is_dir_sep(c) ((c) == '/')
>  #endif
> diff --git a/path.c b/path.c
> index f9c5062..bc804a3 100644
> --- a/path.c
> +++ b/path.c
> @@ -823,10 +823,3 @@ int daemon_avoid_alias(const char *p)
>               }
>       }
>  }
> -
> -int offset_1st_component(const char *path)
> -{
> -     if (has_dos_drive_prefix(path))
> -             return 2 + is_dir_sep(path[2]);
> -     return is_dir_sep(path[0]);
> -}
> -- 
> 1.9.2.msysgit.0.490.ga07b726
>
> -- 
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to