| #include <string.h> | 
 | #include <regex.h> | 
 | #include <stdio.h> | 
 | #include "locale_impl.h" | 
 |  | 
 | /* Error message strings for error codes listed in `regex.h'.  This list | 
 |    needs to be in sync with the codes listed there, naturally. */ | 
 |  | 
 | /* Converted to single string by Rich Felker to remove the need for | 
 |  * data relocations at runtime, 27 Feb 2006. */ | 
 |  | 
 | static const char messages[] = { | 
 |   "No error\0" | 
 |   "No match\0" | 
 |   "Invalid regexp\0" | 
 |   "Unknown collating element\0" | 
 |   "Unknown character class name\0" | 
 |   "Trailing backslash\0" | 
 |   "Invalid back reference\0" | 
 |   "Missing ']'\0" | 
 |   "Missing ')'\0" | 
 |   "Missing '}'\0" | 
 |   "Invalid contents of {}\0" | 
 |   "Invalid character range\0" | 
 |   "Out of memory\0" | 
 |   "Repetition not preceded by valid expression\0" | 
 |   "\0Unknown error" | 
 | }; | 
 |  | 
 | size_t regerror(int e, const regex_t *restrict preg, char *restrict buf, size_t size) | 
 | { | 
 | 	const char *s; | 
 | 	for (s=messages; e && *s; e--, s+=strlen(s)+1); | 
 | 	if (!*s) s++; | 
 | 	s = LCTRANS_CUR(s); | 
 | 	return 1+snprintf(buf, size, "%s", s); | 
 | } |