delorie.com/archives/browse.cgi | search |
X-Authentication-Warning: | delorie.com: mail set sender to djgpp-bounces using -f |
NNTP-Posting-Date: | Thu, 30 Nov 2006 00:32:27 -0600 |
From: | "Alexei A. Frounze" <alexfru AT chat DOT ru> |
Newsgroups: | comp.os.msdos.djgpp |
References: | <iKydndAovO98z_DYnZ2dnUVZ_sadnZ2d AT comcast DOT com> <LO6dnbePOLnKzvDYnZ2dnUVZ_sGdnZ2d AT comcast DOT com> <456dad03$0$486$cc7c7865 AT news DOT luth DOT se> <200611291634 DOT kATGYcbw010800 AT envy DOT delorie DOT com> <n6qsm2l2pk3svjtu7aqu68mmhdmvldprk5 AT 4ax DOT com> |
Subject: | Re: fnmatch("\\\\", "\\", 0) == 1 ??? |
Date: | Wed, 29 Nov 2006 22:31:24 -0800 |
MIME-Version: | 1.0 |
X-Priority: | 3 |
X-MSMail-Priority: | Normal |
X-Newsreader: | Microsoft Outlook Express 6.00.2900.2869 |
X-MimeOLE: | Produced By Microsoft MimeOLE V6.00.2900.2962 |
Message-ID: | <Sb6dnSX2_Plh5_PYnZ2dnUVZ_rSdnZ2d@comcast.com> |
Lines: | 51 |
NNTP-Posting-Host: | 24.18.54.10 |
X-Trace: | sv3-8e6yh+5z6CotmU9Dwr/BRrwtelRqNhqT8vXf95/UIwxLfft8omKgtE6uNufBS+944eJO7YimMeXJFpZ!WNQHsAxU7zTP9aETRuiuHDUm+adhJPIUueEVuOnTBYb8VEZaxrhnNz2p6J878njUui6hFcpZDro4!+BSh6JyToA== |
X-Complaints-To: | abuse AT comcast DOT net |
X-DMCA-Complaints-To: | dmca AT comcast DOT net |
X-Abuse-and-DMCA-Info: | Please be sure to forward a copy of ALL headers |
X-Abuse-and-DMCA-Info: | Otherwise we will be unable to process your complaint properly |
X-Postfilter: | 1.3.32 |
To: | djgpp AT delorie DOT com |
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp |
Reply-To: | djgpp AT delorie DOT com |
Brian Inglis wrote: > fOn Wed, 29 Nov 2006 11:34:38 -0500 in comp.os.msdos.djgpp, DJ Delorie > <dj AT delorie DOT com> wrote: > >> >>> This function indicates if STRING matches the PATTERN. ..." >>> >>> So DJGPP says that "\" doesn't match "\\" while Linux says it does. >>> >>> Well, I say DJGPP is right as the pattern says there should be two >>> backslashes and you only provide one. >> >> Except that PATTERN is a regex influenced by FNM_NOESCAPE and >> FNM_PATHNAME, and STRING isn't. So a pattern of "\\" is a single >> escaped backslash, whereas a string of "\" is a single backslash. >> They should match. > > switch ((c = *pattern++)) > { > ... > ... > ... > case '\\': > /*+++ pattern already post-incremented to point to next char */ > if (!(flags & FNM_NOESCAPE) && pattern[1] && strchr("*?[\\", > pattern[1])) > /*+++ should be: > if (!(flags & FNM_NOESCAPE) && strchr("*?[\\", *pattern)) > *+++ as end of input pattern will match end char in escapes string */ > { > /*+++ end of input pattern might be clearer with ! or == '\0' */ > if ((c = *pattern++) == 0) > { > c = '\\'; > --pattern; > } > if (c != *string++) > return FNM_NOMATCH; > break; > } I don't think the above is enough. There's another problem. With the above code you'd never see (c = *pattern++) == 0. My bet is that the intent was to treat the slash in the last character of pattern as an ordinary character. That would explain the {c = '\\'; --pattern;} thing along with the fallthrough behavior. But the code is broken in this place. Dunno if it was tested against the single unix spec or just a little bit to see that it seems to work (in some basic cases). Alex
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |