/**************************************************************************** * libs/libc/regex/regerror.c * * regerror.c - TRE POSIX compatible matching functions (and more). * * Copyright (c) 2001-2009 Ville Laurikari * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************/ /**************************************************************************** * Included Files ****************************************************************************/ #include #include #include /* 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. */ /**************************************************************************** * Private Data ****************************************************************************/ 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" }; /**************************************************************************** * Public Functions ****************************************************************************/ 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++; } return 1 + snprintf(buf, size, "%s", s); }