Stepan Kasal <kasal@xxxxxx> writes: > From: Cezary Zawadka <czawadka@xxxxxxxxx> > 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 <sunshine@xxxxxxxxxxxxxx> > Signed-off-by: Cezary Zawadka <czawadka@xxxxxxxxx> > Signed-off-by: Eric Sunshine <sunshine@xxxxxxxxxxxxxx> > Signed-off-by: Erik Faye-Lund <kusmabite@xxxxxxxxx> > Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> > Signed-off-by: Stepan Kasal <kasal@xxxxxx> > --- > > 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html