Rev 50234 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
/*tre_regerror.c - POSIX tre_regerror() implementation for TRE.This software is released under a BSD-style license.See the file LICENSE for details and copyright.*/#ifdef HAVE_CONFIG_H#include <config.h>#endif /* HAVE_CONFIG_H */#include <string.h>#ifdef HAVE_WCHAR_H#include <wchar.h>#endif /* HAVE_WCHAR_H */#ifdef HAVE_WCTYPE_H#include <wctype.h>#endif /* HAVE_WCTYPE_H */#include "tre-internal.h"#include "tre.h"#ifdef HAVE_GETTEXT#include <libintl.h>#else#define dgettext(p, s) s#define gettext(s) s#endif#define _(String) dgettext(PACKAGE, String)#define gettext_noop(String) String/* Error message strings for error codes listed in `tre.h'. This listneeds to be in sync with the codes listed there, naturally. */static const char *tre_error_messages[] ={ gettext_noop("No error"), /* REG_OK */gettext_noop("No match"), /* REG_NOMATCH */gettext_noop("Invalid regexp"), /* REG_BADPAT */gettext_noop("Unknown collating element"), /* REG_ECOLLATE */gettext_noop("Unknown character class name"), /* REG_ECTYPE */gettext_noop("Trailing backslash"), /* REG_EESCAPE */gettext_noop("Invalid back reference"), /* REG_ESUBREG */gettext_noop("Missing ']'"), /* REG_EBRACK */gettext_noop("Missing ')'"), /* REG_EPAREN */gettext_noop("Missing '}'"), /* REG_EBRACE */gettext_noop("Invalid contents of {}"), /* REG_BADBR */gettext_noop("Invalid character range"), /* REG_ERANGE */gettext_noop("Out of memory"), /* REG_ESPACE */gettext_noop("Invalid use of repetition operators") /* REG_BADRPT */};size_ttre_regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size){const char *err;size_t err_len;/*LINTED*/(void)&preg;if (errcode >= 0&& errcode < (int)(sizeof(tre_error_messages)/ sizeof(*tre_error_messages)))err = gettext(tre_error_messages[errcode]);elseerr = gettext("Unknown error");err_len = strlen(err) + 1;if (errbuf_size > 0 && errbuf != NULL){if (err_len > errbuf_size){strncpy(errbuf, err, errbuf_size - 1);errbuf[errbuf_size - 1] = '\0';}else{strcpy(errbuf, err);}}return err_len;}/* EOF */