# define __USE_GNU_REGEX 1
#endif
-#ifdef __VMS
-/* VMS doesn't have `size_t' in <sys/types.h>, even though POSIX says it
- should be there. */
-# include <stddef.h>
-#endif
-
#ifdef _REGEX_LARGE_OFFSETS
/* Use types and values that are wide enough to represent signed and
# ifdef RE_DUP_MAX
# undef RE_DUP_MAX
# endif
-/* If sizeof(int) == 2, then ((1 << 15) - 1) overflows. */
+
+/* RE_DUP_MAX is 2**15 - 1 because an earlier implementation stored
+ the counter as a 2-byte signed integer. This is no longer true, so
+ RE_DUP_MAX could be increased to (INT_MAX / 10 - 1), or to
+ ((SIZE_MAX - 2) / 10 - 1) if _REGEX_LARGE_OFFSETS is defined.
+ However, there would be a huge performance problem if someone
+ actually used a pattern like a\{214748363\}, so RE_DUP_MAX retains
+ its historical value. */
# define RE_DUP_MAX (0x7fff)
#endif /* defined __USE_GNU_REGEX */
# endif
# endif
#endif
-/* gcc 3.1 and up support the [restrict] syntax, but g++ doesn't. */
+/* gcc 3.1 and up support the [restrict] syntax. */
#ifndef __restrict_arr
-# if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) && !defined __cplusplus
+# if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) \
+ && !defined __GNUG__
# define __restrict_arr __restrict
# else
# define __restrict_arr