diff options
Diffstat (limited to 'generic/regerror.c')
-rw-r--r-- | generic/regerror.c | 148 |
1 files changed, 84 insertions, 64 deletions
diff --git a/generic/regerror.c b/generic/regerror.c index 182830d..49b6f3e 100644 --- a/generic/regerror.c +++ b/generic/regerror.c @@ -2,20 +2,20 @@ * regerror - error-code expansion * * Copyright (c) 1998, 1999 Henry Spencer. All rights reserved. - * + * * Development of this software was funded, in part, by Cray Research Inc., * UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics * Corporation, none of whom are responsible for the results. The author - * thanks all of them. - * + * thanks all of them. + * * Redistribution and use in source and binary forms -- with or without * modification -- are permitted for any purpose, provided that * redistributions in source form retain this entire copyright notice and * indicate the origin and nature of any modifications. - * - * I'd appreciate being given credit for this package in the documentation - * of software which uses it, but that is not a requirement. - * + * + * I'd appreciate being given credit for this package in the documentation of + * software which uses it, but that is not a requirement. + * * THIS SOFTWARE IS PROVIDED ``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 @@ -31,79 +31,99 @@ #include "regguts.h" -/* unknown-error explanation */ +/* + * Unknown-error explanation. + */ + static char unk[] = "*** unknown regex error code 0x%x ***"; -/* struct to map among codes, code names, and explanations */ +/* + * Struct to map among codes, code names, and explanations. + */ + static struct rerr { - int code; - char *name; - char *explain; + int code; + const char *name; + const char *explain; } rerrs[] = { - /* the actual table is built from regex.h */ -# include "regerrs.h" - { -1, "", "oops" }, /* explanation special-cased in code */ + /* The actual table is built from regex.h */ +#include "regerrs.h" + { -1, "", "oops" }, /* explanation special-cased in code */ }; - + /* - regerror - the interface to error numbers */ /* ARGSUSED */ -size_t /* actual space needed (including NUL) */ -regerror(code, preg, errbuf, errbuf_size) -int code; /* error code, or REG_ATOI or REG_ITOA */ -CONST regex_t *preg; /* associated regex_t (unused at present) */ -char *errbuf; /* result buffer (unless errbuf_size==0) */ -size_t errbuf_size; /* available space in errbuf, can be 0 */ +size_t /* Actual space needed (including NUL) */ +regerror( + int code, /* Error code, or REG_ATOI or REG_ITOA */ + const regex_t *preg, /* Associated regex_t (unused at present) */ + char *errbuf, /* Result buffer (unless errbuf_size==0) */ + size_t errbuf_size) /* Available space in errbuf, can be 0 */ { - struct rerr *r; - char *msg; - char convbuf[sizeof(unk)+50]; /* 50 = plenty for int */ - size_t len; - int icode; + struct rerr *r; + const char *msg; + char convbuf[sizeof(unk)+50]; /* 50 = plenty for int */ + size_t len; + int icode; - switch (code) { - 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; + switch (code) { + case REG_ATOI: /* Convert name to number */ + for (r = rerrs; r->code >= 0; r++) { + if (strcmp(r->name, errbuf) == 0) { 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; - } + } + } + 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; - default: /* a real, normal error code */ - for (r = rerrs; r->code >= 0; r++) - if (r->code == code) - break; - if (r->code >= 0) - msg = r->explain; - else { /* unknown; say so */ - sprintf(convbuf, unk, code); - msg = convbuf; - } + } + } + 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 == code) { break; + } + } + if (r->code >= 0) { + msg = r->explain; + } else { /* Unknown; say so */ + sprintf(convbuf, unk, code); + 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'; - } + 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; + return len; } + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ |