From f5ba88ebfed936cfdee3a2ab3d6f690d291e9627 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Mon, 17 Dec 2018 17:07:40 -0500 Subject: color: Make extension detection case-insensitive It's what GNU ls does. --- color.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/color.c b/color.c index dfda9fc..cdc79a6 100644 --- a/color.c +++ b/color.c @@ -296,6 +296,23 @@ int cfclose(CFILE *cfile) { return ret; } +static const char *ext_color(const struct colors *colors, const char *filename) { + size_t namelen = strlen(filename); + + for (const struct ext_color *ext = colors->ext_list; ext; ext = ext->next) { + if (namelen < ext->len) { + continue; + } + + const char *suffix = filename + namelen - ext->len; + if (strcasecmp(suffix, ext->ext) == 0) { + return ext->color; + } + } + + return NULL; +} + static const char *file_color(const struct colors *colors, const char *filename, const struct BFTW *ftwbuf) { const struct bfs_stat *sb = ftwbuf->statbuf; if (!sb) { @@ -319,14 +336,7 @@ static const char *file_color(const struct colors *colors, const char *filename, } if (!color) { - size_t namelen = strlen(filename); - - for (struct ext_color *ext = colors->ext_list; ext; ext = ext->next) { - if (namelen >= ext->len && memcmp(filename + namelen - ext->len, ext->ext, ext->len) == 0) { - color = ext->color; - break; - } - } + color = ext_color(colors, filename); } if (!color) { -- cgit v1.2.3