git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 0/8] fnmatch replacement step 1

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Dec 22, 2012, 07:57 UTC
Message-ID
<1356163028-29967-1-git-send-email-pclouds@gmail.com>

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 USE_WILDMATCH.

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/t3070-wildmatch.sh     |  27 ++++++++++
 test-wildmatch.c         |  82 +++++++++++++++++++++++++++-
 wildmatch.c              | 137 +++++++++++++++++++++++++++++------------------
 wildmatch.h              |  23 +++++---
 8 files changed, 232 insertions(+), 62 deletions(-)
-- 
1.8.0.rc2.23.g1fb49df
Next: Nguyễn Thái Ngọc Duy
Message 1 of 14 in “fnmatch replacement step 1”
  1. 0/8 fnmatch replacement step 1Nguyễn Thái Ngọc Duy, Dec 22, 2012
  2. 1/8 compat/fnmatch: respect NO_FNMATCH* even on glibcNguyễn Thái Ngọc Duy, Dec 22, 2012
  3. 2/8 wildmatch: rename constants and update prototypeNguyễn Thái Ngọc Duy, Dec 22, 2012
  4. Junio C HamanoDec 26, 2012
  5. 3/8 wildmatch: make dowild() take arbitrary flagsNguyễn Thái Ngọc Duy, Dec 22, 2012
  6. 4/8 wildmatch: support "no FNM_PATHNAME" modeNguyễn Thái Ngọc Duy, Dec 22, 2012
  7. Junio C HamanoDec 28, 2012
  8. Nguyen Thai Ngoc DuyDec 28, 2012
  9. 5/8 test-wildmatch: add "perf" command to compare wildmatch and fnmatchNguyễn Thái Ngọc Duy, Dec 22, 2012
  10. 6/8 Makefile: add USE_WILDMATCH to use wildmatch as fnmatchNguyễn Thái Ngọc Duy, Dec 22, 2012
  11. 7/8 wildmatch: make a special case for "*/" with FNM_PATHNAMENguyễn Thái Ngọc Duy, Dec 22, 2012
  12. 8/8 wildmatch: advance faster in <asterisk> + <literal> patternsNguyễn Thái Ngọc Duy, Dec 22, 2012
  13. Junio C HamanoDec 28, 2012
  14. Nguyen Thai Ngoc DuyDec 28, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.