On Thu, Dec 17, 2015 at 07:55:43PM +0100, Johannes Sixt wrote:

> -static int has_same_dir_prefix(const char *str, const char **out)
> +static int starts_with_dot_slash(const char *str)
>  {
> -#ifdef GIT_WINDOWS_NATIVE
> -     return skip_prefix(str, "./", out)
> -             || skip_prefix(str, ".\\", out);
> -#else
> -     return skip_prefix(str, "./", out);
> -#endif
> +     return str[0] == '.' && is_dir_sep(str[1]);
>  }
>  
> -static int has_upper_dir_prefix(const char *str, const char **out)
> +static int starts_with_dot_dot_slash(const char *str)
>  {
> -#ifdef GIT_WINDOWS_NATIVE
> -     return skip_prefix(str, "../", out)
> -             || skip_prefix(str, "..\\", out);
> -#else
> -     return skip_prefix(str, "../", out);
> -#endif
> +     return str[0] == '.' && str[1] == '.' && is_dir_sep(str[2]);
>  }

As the set of prefixes you are looking is probably bounded, it may not
be worth generalizing this. But I wondered if something like:

  /*
   * Like skip_prefix, but consider any "/" in the prefix as a
   * directory separator for the platform.
   */
  int skip_prefix_fs(const char *str, const char *prefix, const char **out)
  {
        while (1) {
                if (!*prefix) {
                        *out = str;
                        return 1;
                } else if (*prefix == '/') {
                        if (!is_dir_sep(*str))
                                return 0;
                } else {
                        if (*str != *prefix)
                                return 0;
                }
                str++;
                prefix++;
        }
  }

  ...
  /* works on all platforms! */
  if (skip_prefix_fs(foo, "./", &out))
        ...

would be helpful. I don't know if there are other opportunities in the
code base that could make use of this. If it's just these two sites,
it's probably not worth it.

-Peff
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to