Bug #1399
closedfnmatch(3) escapes '0' to '\'
0%
Description
Salute.
Suppose that we supply fnmatch(3) with a pattern of the form "\" (that is '\'
followed by '0') without setting the FNM_NOESCAPE flag. Wouldn't the normal
thing to do is escape the terminating character and return just '0' ? Instead
'\' is returned. As if one has provided a pattern "\\".
This behavior is exhibited by NetBSD 5.0_STABLE, FreeBSD 7.2-RELEASE and
DragonFlyBSD HEAD.
On the other side sunOS 5.10 and Linux with a relatively recent glibc translate
the pattern to '0'.
You can check with the following snippet:
#include <assert.h>
#include <fnmatch.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int rv;
rv = fnmatch(/* pattern */ "\\", "\\", 0);
assert(rv == FNM_NOMATCH);
printf("passed\n");
return (EXIT_SUCCESS)
}
I've looked into the specs but couldn't find anything relevant.
Any thoughts ?
Cheers,
Stathis
Files
Updated by corecode over 15 years ago
Stathis Kamperis (via DragonFly issue tracker) wrote:
Suppose that we supply fnmatch(3) with a pattern of the form "\" (that is '\'
followed by '0') without setting the FNM_NOESCAPE flag. Wouldn't the normal
thing to do is escape the terminating character and return just '0' ? Instead
'\' is returned. As if one has provided a pattern "\\".
I guess that also happens for any other trailing \. In this case I'd keep
the current behavior, because I'd expect more the \ to be used, than it to
just disappear.
cheers
simon
Updated by Anonymous over 15 years ago
Suppose that we supply fnmatch(3) with a pattern of the form "\" (that is '\'
followed by '0') without setting the FNM_NOESCAPE flag. Wouldn't the normal
thing to do is escape the terminating character and return just '0' ? Instead
'\' is returned. As if one has provided a pattern "\\".I guess that also happens for any other trailing \. In this case I'd keep
the current behavior, because I'd expect more the \ to be used, than it to
just disappear.
It happens only with the last \ before '0'. But what bugs me most, is that it
escapes it while we are in non-escape mode (FNM_NOESCAPE flag set).
Cheers,
Stathis
Updated by Anonymous over 15 years ago
It happens only with the last \ before '0'. But what bugs me most, is that it
escapes it while we are in non-escape mode (FNM_NOESCAPE flag set).
I take it back. It only happens in escape mode.
Cheers,
Stathis
Updated by tuxillo almost 10 years ago
- Description updated (diff)
- Category set to Userland
- Status changed from New to Closed
- Target version set to 4.2
Hi all,
It seems we pass now the test:
antonioh@andromeda:~/temp$ ./t_fnmatch
passed
Cheers,
Antonio Huete