/* ARGSUSED */ size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size) { const struct rerr *r; size_t len; int target = errcode &~ REG_ITOA; char *s; char convbuf[50]; if (errcode == REG_ATOI) s = regatoi(preg, convbuf, sizeof convbuf); else { for (r = rerrs; r->code != 0; r++) if (r->code == target) break; if (errcode®_ITOA) { if (r->code != 0) { assert(strlen(r->name) < sizeof(convbuf)); (void) strlcpy(convbuf, r->name, sizeof convbuf); } else (void)snprintf(convbuf, sizeof convbuf, "REG_0x%x", target); s = convbuf; } else s = r->explain; } len = strlen(s) + 1; if (errbuf_size > 0) { strlcpy(errbuf, s, errbuf_size); } return(len); }
/* ARGSUSED */ size_t r_regex_error(int errcode, const RRegex *preg, char *errbuf, size_t errbuf_size) { struct rerr *r; size_t len; int target = errcode &~ R_REGEX_ITOA; char *s; char convbuf[50]; if (errcode == R_REGEX_ATOI) s = regatoi(preg, convbuf, sizeof convbuf); else { for (r = rerrs; r->code != 0; r++) if (r->code == target) break; if (errcode&R_REGEX_ITOA) { if (r->code != 0) { (void) STRLCPY(convbuf, r->name, sizeof (convbuf)-1); } else (void)snprintf(convbuf, sizeof convbuf, "R_REGEX_0x%x", target); s = convbuf; } else s = r->explain; } len = strlen(s) + 1; if (errbuf_size > 0) STRLCPY(errbuf, s, errbuf_size); return(len); }
/* ARGSUSED */ size_t regerror( int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size) { register struct rerr *r; register size_t len; register int target = errcode &~ REG_ITOA; register char *s; char convbuf[50]; if (errcode == REG_ATOI) s = regatoi(preg, convbuf); else { for (r = rerrs; r->code >= 0; r++) if (r->code == target) break; if (errcode®_ITOA) { if (r->code >= 0) (void) strcpy(convbuf, r->name); else sprintf(convbuf, "REG_0x%x", target); assert(strlen(convbuf) < sizeof(convbuf)); s = convbuf; } else s = r->explain; } len = strlen(s) + 1; if (errbuf_size > 0) { if (errbuf_size > len) (void) strcpy(errbuf, s); else { (void) strncpy(errbuf, s, errbuf_size-1); errbuf[errbuf_size-1] = '\0'; } } return(len); }