diff --git a/Userspace/libc/include/regex.h b/Userspace/libc/include/regex.h new file mode 100644 index 00000000..81636aef --- /dev/null +++ b/Userspace/libc/include/regex.h @@ -0,0 +1,68 @@ +/* + This file is part of Fennix C Library. + + Fennix C Library is free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of + the License, or (at your option) any later version. + + Fennix C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Fennix C Library. If not, see . +*/ + +#ifndef _REGEX_H +#define _REGEX_H + +#include +#include + +typedef struct +{ + size_t re_nsub; /* Number of parenthesized subexpressions */ +} regex_t; + +typedef ptrdiff_t regoff_t; + +typedef struct +{ + regoff_t rm_so; /* Byte offset to start of substring */ + regoff_t rm_eo; /* Byte offset after end of substring */ +} regmatch_t; + +/* Flags for regcomp() */ +#define REG_EXTENDED 0x01 /* Use Extended Regular Expressions */ +#define REG_ICASE 0x02 /* Case-insensitive matching */ +#define REG_MINIMAL 0x04 /* Leftmost shortest match (for REG_EXTENDED) */ +#define REG_NOSUB 0x08 /* Suppress subexpression reporting */ +#define REG_NEWLINE 0x10 /* Alter newline handling */ + +/* Flags for regexec() */ +#define REG_NOTBOL 0x01 /* ^ does not match start of string */ +#define REG_NOTEOL 0x02 /* $ does not match end of string */ + +/* Error codes */ +#define REG_NOMATCH 1 /* No match found */ +#define REG_BADPAT 2 /* Invalid regular expression */ +#define REG_ECOLLATE 3 /* Invalid collating element */ +#define REG_ECTYPE 4 /* Invalid character class */ +#define REG_EESCAPE 5 /* Trailing backslash */ +#define REG_ESUBREG 6 /* Invalid backreference */ +#define REG_EBRACK 7 /* Unbalanced '[]' */ +#define REG_EPAREN 8 /* Unbalanced '()' */ +#define REG_EBRACE 9 /* Unbalanced '{}' */ +#define REG_BADBR 10 /* Invalid content in {} */ +#define REG_ERANGE 11 /* Invalid range endpoint */ +#define REG_ESPACE 12 /* Memory exhaustion */ +#define REG_BADRPT 13 /* Invalid repetition operator */ + +int regcomp(regex_t *restrict preg, const char *restrict pattern, int cflags); +size_t regerror(int errcode, const regex_t *restrict preg, char *restrict errbuf, size_t errbuf_size); +int regexec(const regex_t *restrict preg, const char *restrict string, size_t nmatch, regmatch_t pmatch[restrict], int eflags); +void regfree(regex_t *preg); + +#endif /* _REGEX_H */