| /* |
| regerror.c - POSIX regerror() implementation for TRE. |
| |
| Copyright (c) 2001-2006 Ville Laurikari <vl@iki.fi>. |
| |
| This library is free software; you can redistribute it and/or |
| modify it under the terms of the GNU Lesser General Public |
| License as published by the Free Software Foundation; either |
| version 2.1 of the License, or (at your option) any later version. |
| |
| This 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 |
| Lesser General Public License for more details. |
| |
| You should have received a copy of the GNU Lesser General Public |
| License along with this library; if not, write to the Free Software |
| Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| |
| */ |
| |
| #include <string.h> |
| #include <regex.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 tre_error_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" |
| "XXX\0" |
| }; |
| |
| size_t |
| regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size) |
| { |
| const char *err; |
| size_t err_len; |
| |
| if (errcode >= 0 && errcode <= REG_BADRPT) |
| for (err=tre_error_messages; errcode; errcode--, err+=strlen(err)+1); |
| else |
| err = "Unknown error"; |
| |
| err_len = strlen(err) + 1; |
| if (errbuf_size > 0 && errbuf != NULL) |
| { |
| if (err_len > errbuf_size) |
| { |
| memcpy(errbuf, err, errbuf_size - 1); |
| errbuf[errbuf_size - 1] = '\0'; |
| } |
| else |
| { |
| strcpy(errbuf, err); |
| } |
| } |
| return err_len; |
| } |
| |
| /* EOF */ |