|
Message-Id: <20221021211250.15590-1-ismael@iodev.co.uk> Date: Fri, 21 Oct 2022 23:12:50 +0200 From: Ismael Luceno <ismael@...ev.co.uk> To: musl@...ts.openwall.com Cc: Rich Felker <dalias@...c.org>, Ismael Luceno <ismael@...ev.co.uk> Subject: [RESEND PATCH] glob: implement GLOB_NOMAGIC Signed-off-by: Ismael Luceno <ismael@...ev.co.uk> --- include/glob.h | 1 + src/regex/glob.c | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/include/glob.h b/include/glob.h index 4a562a206d52..0ff70bdfeef2 100644 --- a/include/glob.h +++ b/include/glob.h @@ -31,6 +31,7 @@ void globfree(glob_t *); #define GLOB_NOESCAPE 0x40 #define GLOB_PERIOD 0x80 +#define GLOB_NOMAGIC 0x0800 #define GLOB_TILDE 0x1000 #define GLOB_TILDE_CHECK 0x4000 diff --git a/src/regex/glob.c b/src/regex/glob.c index 9de080ed9ccd..29215c79ce39 100644 --- a/src/regex/glob.c +++ b/src/regex/glob.c @@ -260,13 +260,20 @@ int glob(const char *restrict pat, int flags, int (*errfunc)(const char *path, i for (cnt=0, tail=head.next; tail; tail=tail->next, cnt++); if (!cnt) { - if (flags & GLOB_NOCHECK) { - tail = &head; - if (append(&tail, pat, strlen(pat), 0)) - return GLOB_NOSPACE; - cnt++; + size_t len; + /* GLOB_NOMAGIC implies GLOB_NOCHECK */ + if (flags & GLOB_NOMAGIC) { + len = strcspn(pat, "*?["); + } else if (flags & GLOB_NOCHECK) { + len = strcspn(pat, ""); } else return GLOB_NOMATCH; + if (pat[len]) + return GLOB_NOMATCH; + tail = &head; + if (append(&tail, pat, len, 0)) + return GLOB_NOSPACE; + cnt++; } if (flags & GLOB_APPEND) { -- 2.38.1
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.