#ifndef _REGEX_H_
#define _REGEX_H_
-#include <sys/cdefs.h>
#include <_types.h>
/* types */
} regmatch_t;
/* regcomp() flags */
-#ifndef _POSIX_C_SOURCE
+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
#define REG_BASIC 0000
-#endif /* !_POSIX_C_SOURCE */
+#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
#define REG_EXTENDED 0001
#define REG_ICASE 0002
#define REG_NOSUB 0004
#define REG_NEWLINE 0010
-#ifndef _POSIX_C_SOURCE
+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
#define REG_NOSPEC 0020
#define REG_PEND 0040
#define REG_DUMP 0200
-#endif /* !_POSIX_C_SOURCE */
+#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
/* regerror() flags */
#define REG_ENOSYS (-1) /* Reserved */
#define REG_ERANGE 11
#define REG_ESPACE 12
#define REG_BADRPT 13
-#ifndef _POSIX_C_SOURCE
+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
#define REG_EMPTY 14
#define REG_ASSERT 15
#define REG_INVARG 16
#define REG_ILLSEQ 17
#define REG_ATOI 255 /* convert name to number (!) */
#define REG_ITOA 0400 /* convert number to name (!) */
-#endif /* !_POSIX_C_SOURCE */
+#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
/* regexec() flags */
#define REG_NOTBOL 00001
#define REG_NOTEOL 00002
-#ifndef _POSIX_C_SOURCE
+#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
#define REG_STARTEND 00004
#define REG_TRACE 00400 /* tracing of execution */
#define REG_LARGE 01000 /* force large representation */
#define REG_BACKR 02000 /* force use of backref code */
-#endif /* !_POSIX_C_SOURCE */
+#endif /* (!_POSIX_C_SOURCE || _DARWIN_C_SOURCE) */
__BEGIN_DECLS
+//Begin-Libc
+#ifndef LIBC_ALIAS_REGCOMP
+//End-Libc
int regcomp(regex_t * __restrict, const char * __restrict, int) __DARWIN_ALIAS(regcomp);
+//Begin-Libc
+#else /* LIBC_ALIAS_REGCOMP */
+int regcomp(regex_t * __restrict, const char * __restrict, int) LIBC_ALIAS(regcomp);
+#endif /* !LIBC_ALIAS_REGCOMP */
+//End-Libc
size_t regerror(int, const regex_t * __restrict, char * __restrict, size_t);
-/* For meeting c99 stds, pass regmatch_t*, rather than the array */
-int regexec(const regex_t * __restrict,
- const char * __restrict, size_t, regmatch_t * __restrict, int);
+/*
+ * gcc under c99 mode won't compile "[ __restrict]" by itself. As a workaround,
+ * a dummy argument name is added.
+ */
+int regexec(const regex_t * __restrict, const char * __restrict, size_t,
+ regmatch_t __pmatch[ __restrict], int);
void regfree(regex_t *);
__END_DECLS