mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-11 13:50:06 +00:00
86a701a204
Copy regex-related files back from Gnulib, to fix a problem with
static checking of regex calls noted by Martin Sebor. This merges the
following changes:
* New macro __attribute_nonnull__ in misc/sys/cdefs.h, for use later
when copying other files back from Gnulib.
* Use __GNULIB_CDEFS instead of __GLIBC__ when deciding
whether to include bits/wordsize.h etc.
* Avoid duplicate entries in epsilon closure table.
* New regex.h macro _REGEX_NELTS to let regexec say that its pmatch
arg should contain nmatch elts. Use that for regexec, instead of
__attr_access (which is incorrect).
* New regex.h macro _Attr_access_ which is like __attr_access except
portable to non-glibc platforms.
* Add some DEBUG_ASSERTs to pacify gcc -fanalyzer and to catch
recently-fixed performance bugs if they recur.
* Add Gnulib-specific stuff to port the dynarray- and lock-using parts
of regex code to non-glibc platforms.
* Fix glibc bug 11053.
* Avoid some undefined behavior when popping an empty fail stack.
(cherry picked from commit 0b5ca7c3e5
)
51 lines
1.6 KiB
C
51 lines
1.6 KiB
C
#ifndef _REGEX_H
|
|
#include <posix/regex.h>
|
|
|
|
#ifndef _ISOMAC
|
|
/* Document internal interfaces. */
|
|
extern reg_syntax_t __re_set_syntax (reg_syntax_t syntax);
|
|
|
|
extern const char *__re_compile_pattern (const char *pattern, size_t length,
|
|
struct re_pattern_buffer *buffer);
|
|
|
|
extern int __re_compile_fastmap (struct re_pattern_buffer *buffer)
|
|
attribute_hidden;
|
|
|
|
extern int __re_search (struct re_pattern_buffer *buffer, const char *string,
|
|
int length, int start, int range,
|
|
struct re_registers *regs);
|
|
|
|
extern int __re_search_2
|
|
(struct re_pattern_buffer *buffer, const char *string1,
|
|
int length1, const char *string2, int length2,
|
|
int start, int range, struct re_registers *regs, int stop);
|
|
|
|
extern int __re_match
|
|
(struct re_pattern_buffer *buffer, const char *string,
|
|
int length, int start, struct re_registers *regs);
|
|
|
|
extern int __re_match_2
|
|
(struct re_pattern_buffer *buffer, const char *string1,
|
|
int length1, const char *string2, int length2,
|
|
int start, struct re_registers *regs, int stop);
|
|
|
|
extern void __re_set_registers
|
|
(struct re_pattern_buffer *buffer, struct re_registers *regs,
|
|
unsigned num_regs, regoff_t *starts, regoff_t *ends);
|
|
|
|
extern int __regcomp (regex_t *__preg, const char *__pattern, int __cflags);
|
|
libc_hidden_proto (__regcomp)
|
|
|
|
extern int __regexec (const regex_t *__preg, const char *__string,
|
|
size_t __nmatch, regmatch_t __pmatch[__nmatch],
|
|
int __eflags);
|
|
libc_hidden_proto (__regexec)
|
|
|
|
extern size_t __regerror (int __errcode, const regex_t *__preg,
|
|
char *__errbuf, size_t __errbuf_size);
|
|
|
|
extern void __regfree (regex_t *__preg);
|
|
libc_hidden_proto (__regfree)
|
|
#endif
|
|
#endif
|