LibRegex+LibC: Make re_nsub available to the user

To comply with Dr.POSIX, this field has to be user-accessible.
This commit is contained in:
Ali Mohammad Pur 2021-07-13 01:38:29 +04:30 committed by Gunnar Beutner
parent 7e98457937
commit f9fed0b167
Notes: sideshowbarker 2024-07-18 09:09:08 +09:00
2 changed files with 4 additions and 3 deletions

View File

@ -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 {

View File

@ -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;
}