This series makes wildmatch compatible with fnmatch, at least for
FNM_CASEFOLD and FNM_PATHNAME. This makes it possible to use wildmatch
as a fnmatch replacement. The replacement is optional and turned on via

Step 2 would be turn USE_WILDMATCH by default and remove
compat/fnmatch. We can leave it for now until we are certain we don't
introduce any kind of regressions.

Measurement is performed to see how wildmatch compete with
fnmatch(es). I was surprised that my glibc version is even slower than
compat/fnmatch. For more details, see 5/8. wildmatch is faster (about
20%) in most cases. It is slower in '*/*/*' tests both with and without
FNM_PATHNAME. 7/8 and 8/8 fix that, making wildmatch fastest in all
(tested) cases.

I'd appreciate if people test it with more patterns (both weird and
commonly used) against different fnmatch versions and turn on
USE_WILDMATCH to see if we need to fix something else, both correctness
and performance. So far I'm convinced that the replacement is a good
thing to do.

The series requires nd/wildmatch, obviously.

Nguyễn Thái Ngọc Duy (8):
  compat/fnmatch: respect NO_FNMATCH* even on glibc
  wildmatch: rename constants and update prototype
  wildmatch: make dowild() take arbitrary flags
  wildmatch: support "no FNM_PATHNAME" mode
  test-wildmatch: add "perf" command to compare wildmatch and fnmatch
  Makefile: add USE_WILDMATCH to use wildmatch as fnmatch
  wildmatch: make a special case for "*/" with FNM_PATHNAME
  wildmatch: advance faster in <asterisk> + <literal> patterns

 Makefile                 |   6 +++
 compat/fnmatch/fnmatch.c |   3 +-
 dir.c                    |   3 +-
 git-compat-util.h        |  13 +++++
 t/     |  27 ++++++++++
 test-wildmatch.c         |  82 +++++++++++++++++++++++++++-
 wildmatch.c              | 137 +++++++++++++++++++++++++++++------------------
 wildmatch.h              |  23 +++++---
 8 files changed, 232 insertions(+), 62 deletions(-)


To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to
More majordomo info at

Reply via email to