Thread (2 messages) flat view 2 messages, 2 authors, 2016-06-15

Re: [PATCH v2 2/2] attr: more matching optimizations from .gitignore

From: Nguyen Thai Ngoc Duy <hidden>
Date: 2016-06-15 22:54:59

Possibly related (same subject, not in this thread)

On Thu, Oct 11, 2012 at 4:41 AM, Junio C Hamano [off-list ref] wrote:
Nguyễn Thái Ngọc Duy  [off-list ref] writes:
quoted
   @@ -690,16 +689,18 @@ static int path_matches(const char *pathname, int pathlen,
       * contain the trailing slash
       */

   -  if (pathlen < baselen ||
   +  if (pathlen < baselen + 1 ||
          (baselen && pathname[baselen] != '/') ||
   -      strncmp(pathname, base, baselen))
   +      strncmp_icase(pathname, base, baselen))
Shouldn't the last comparison be

        strncmp_icase(pathname, base, baselen + 1)

instead,
"base" does not contain the trailing slash, so it can only match up to
base[baselen-1], then fail at base[baselen], which is '\0'. The "no
trailing slash" business in this function is tricky :(
if you are trying to match this part from dir.c where
baselen does count the trailing slash?

                if (pathlen < x->baselen ||
                    (x->baselen && pathname[x->baselen-1] != '/') ||
                    strncmp_icase(pathname, x->base, x->baselen))
                        continue;
strncmp_icase() here just needs to compare x->baselen-1 chars (i.e. no
trailing slash) as the trailing slash is explicitly checked just above
strncmp_icase. But it does not hurt to compare an extra character so I
leave it unchanged. But obviously it causes confusion when we try to
match this function and the one in attr.c
-- 
Duy
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help