#include "regex/regguts.h"#include "regex/regerrs.h"
Go to the source code of this file.
Data Structures | |
| struct | rerr |
Functions | |
| size_t | pg_regerror (int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size) |
Variables | |
| static char | unk [] = "*** unknown regex error code 0x%x ***" |
| static struct rerr | rerrs [] |
| size_t pg_regerror | ( | int | errcode, | |
| const regex_t * | preg, | |||
| char * | errbuf, | |||
| size_t | errbuf_size | |||
| ) |
Definition at line 60 of file regerror.c.
References rerr::code, rerr::explain, rerr::name, REG_ATOI, REG_ITOA, rerrs, and unk.
Referenced by check_ident_usermap(), NIAddAffix(), parse_ident_line(), RE_compile(), RE_compile_and_cache(), RE_wchar_execute(), regexp_fixed_prefix(), and replace_text_regexp().
{
struct rerr *r;
const char *msg;
char convbuf[sizeof(unk) + 50]; /* 50 = plenty for int */
size_t len;
int icode;
switch (errcode)
{
case REG_ATOI: /* convert name to number */
for (r = rerrs; r->code >= 0; r++)
if (strcmp(r->name, errbuf) == 0)
break;
sprintf(convbuf, "%d", r->code); /* -1 for unknown */
msg = convbuf;
break;
case REG_ITOA: /* convert number to name */
icode = atoi(errbuf); /* not our problem if this fails */
for (r = rerrs; r->code >= 0; r++)
if (r->code == icode)
break;
if (r->code >= 0)
msg = r->name;
else
{ /* unknown; tell him the number */
sprintf(convbuf, "REG_%u", (unsigned) icode);
msg = convbuf;
}
break;
default: /* a real, normal error code */
for (r = rerrs; r->code >= 0; r++)
if (r->code == errcode)
break;
if (r->code >= 0)
msg = r->explain;
else
{ /* unknown; say so */
sprintf(convbuf, unk, errcode);
msg = convbuf;
}
break;
}
len = strlen(msg) + 1; /* space needed, including NUL */
if (errbuf_size > 0)
{
if (errbuf_size > len)
strcpy(errbuf, msg);
else
{ /* truncate to fit */
strncpy(errbuf, msg, errbuf_size - 1);
errbuf[errbuf_size - 1] = '\0';
}
}
return len;
}
Referenced by pg_regerror().
char unk[] = "*** unknown regex error code 0x%x ***" [static] |
Definition at line 37 of file regerror.c.
Referenced by pg_regerror().
1.7.1