From f9fed0b16712c05a13ad1a89a781e88609a53639 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Tue, 13 Jul 2021 01:38:29 +0430 Subject: [PATCH] LibRegex+LibC: Make re_nsub available to the user To comply with Dr.POSIX, this field has to be user-accessible. --- Userland/Libraries/LibC/regex.h | 2 ++ Userland/Libraries/LibRegex/C/Regex.cpp | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibC/regex.h b/Userland/Libraries/LibC/regex.h index ace2a8440d7..793c6a35df3 100644 --- a/Userland/Libraries/LibC/regex.h +++ b/Userland/Libraries/LibC/regex.h @@ -15,6 +15,8 @@ typedef ssize_t regoff_t; typedef struct { void* __data; + // Number of capture groups, Dr.POSIX requires this. + size_t re_nsub; } regex_t; enum __Regex_Error { diff --git a/Userland/Libraries/LibRegex/C/Regex.cpp b/Userland/Libraries/LibRegex/C/Regex.cpp index bb45131e041..35c40e9396b 100644 --- a/Userland/Libraries/LibRegex/C/Regex.cpp +++ b/Userland/Libraries/LibRegex/C/Regex.cpp @@ -26,7 +26,6 @@ struct internal_regex_t { size_t re_pat_errpos; ReError re_pat_err; String re_pat; - size_t re_nsub; }; static internal_regex_t* impl_from(regex_t* re) @@ -51,7 +50,7 @@ int regcomp(regex_t* reg, const char* pattern, int cflags) // Note that subsequent uses of regcomp() without regfree() _will_ leak memory // This could've been prevented if libc provided a reginit() or similar, but it does not. - reg->__data = new internal_regex_t { 0, 0, {}, 0, ReError::REG_NOERR, {}, 0 }; + reg->__data = new internal_regex_t { 0, 0, {}, 0, ReError::REG_NOERR, {} }; auto preg = impl_from(reg); bool is_extended = cflags & REG_EXTENDED; @@ -76,7 +75,7 @@ int regcomp(regex_t* reg, const char* pattern, int cflags) return (ReError)parser_result.error; } - preg->re_nsub = parser_result.capture_groups_count; + reg->re_nsub = parser_result.capture_groups_count; return REG_NOERR; }