From: Junio C Hamano Date: Fri, 14 Oct 2011 02:03:21 +0000 (-0700) Subject: Merge branch 'jc/is-url-simplify' X-Git-Tag: v1.7.8-rc0~82 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/8b482c0ccca22857709e7f483f0079d7be7327f6?ds=inline;hp=-c Merge branch 'jc/is-url-simplify' * jc/is-url-simplify: url.c: simplify is_url() --- 8b482c0ccca22857709e7f483f0079d7be7327f6 diff --combined url.c index 3e06fd34c4,8d64d902ec..e4262a0d7a --- a/url.c +++ b/url.c @@@ -1,5 -1,4 +1,5 @@@ #include "cache.h" +#include "url.h" int is_urlschemechar(int first_flag, int ch) { @@@ -18,35 -17,15 +18,15 @@@ int is_url(const char *url) { - const char *url2, *first_slash; - - if (!url) - return 0; - url2 = url; - first_slash = strchr(url, '/'); - - /* Input with no slash at all or slash first can't be URL. */ - if (!first_slash || first_slash == url) - return 0; - /* Character before must be : and next must be /. */ - if (first_slash[-1] != ':' || first_slash[1] != '/') + /* Is "scheme" part reasonable? */ + if (!url || !is_urlschemechar(1, *url++)) return 0; - /* There must be something before the :// */ - if (first_slash == url + 1) - return 0; - /* - * Check all characters up to first slash - 1. Only alphanum - * is allowed. - */ - url2 = url; - while (url2 < first_slash - 1) { - if (!is_urlschemechar(url2 == url, (unsigned char)*url2)) + while (*url && *url != ':') { + if (!is_urlschemechar(0, *url++)) return 0; - url2++; } - - /* Valid enough. */ - return 1; + /* We've seen "scheme"; we want colon-slash-slash */ + return (url[0] == ':' && url[1] == '/' && url[2] == '/'); } static int url_decode_char(const char *q)