Project

General

Profile

Actions

Bug #1399

closed

fnmatch(3) escapes '0' to '\'

Added by Anonymous almost 15 years ago. Updated about 9 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Category:
Userland
Target version:
Start date:
Due date:
% Done:

0%

Estimated time:

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

Actions #1

Updated by corecode almost 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

Actions #2

Updated by Anonymous almost 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

Actions #3

Updated by Anonymous almost 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

Actions #4

Updated by tuxillo about 9 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

Actions

Also available in: Atom PDF