]>
git.saurik.com Git - wxWidgets.git/blob - src/regex/regerror.c
   2  * regerror - error-code expansion 
   4  * Copyright (c) 1998, 1999 Henry Spencer.  All rights reserved. 
   6  * Development of this software was funded, in part, by Cray Research Inc., 
   7  * UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics 
   8  * Corporation, none of whom are responsible for the results.  The author 
  11  * Redistribution and use in source and binary forms -- with or without 
  12  * modification -- are permitted for any purpose, provided that 
  13  * redistributions in source form retain this entire copyright notice and 
  14  * indicate the origin and nature of any modifications. 
  16  * I'd appreciate being given credit for this package in the documentation 
  17  * of software which uses it, but that is not a requirement. 
  19  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 
  20  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 
  21  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL 
  22  * HENRY SPENCER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
  23  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
  24  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
  25  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
  26  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
  27  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
  28  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  34 /* unknown-error explanation */ 
  35 static char unk
[] = "*** unknown regex error code 0x%x ***"; 
  37 /* struct to map among codes, code names, and explanations */ 
  43         /* the actual table is built from regex.h */ 
  45         { -1,   "",     "oops" },       /* explanation special-cased in code */ 
  49  - regerror - the interface to error numbers 
  52 size_t                          /* actual space needed (including NUL) */ 
  53 regerror(errcode
, preg
, errbuf
, errbuf_size
) 
  54 int errcode
;                    /* error code, or REG_ATOI or REG_ITOA */ 
  55 CONST regex_t 
*preg
;            /* associated regex_t (unused at present) */ 
  56 char *errbuf
;                   /* result buffer (unless errbuf_size==0) */ 
  57 size_t errbuf_size
;             /* available space in errbuf, can be 0 */ 
  61         char convbuf
[sizeof(unk
)+50];   /* 50 = plenty for int */ 
  66         case REG_ATOI
:          /* convert name to number */ 
  67                 for (r 
= rerrs
; r
->code 
>= 0; r
++) 
  68                         if (strcmp(r
->name
, errbuf
) == 0) 
  70                 sprintf(convbuf
, "%d", r
->code
);        /* -1 for unknown */ 
  73         case REG_ITOA
:          /* convert number to name */ 
  74                 icode 
= atoi(errbuf
);   /* not our problem if this fails */ 
  75                 for (r 
= rerrs
; r
->code 
>= 0; r
++) 
  80                 else {                  /* unknown; tell him the number */ 
  81                         sprintf(convbuf
, "REG_%u", (unsigned)icode
); 
  85         default:                /* a real, normal error code */ 
  86                 for (r 
= rerrs
; r
->code 
>= 0; r
++) 
  87                         if (r
->code 
== errcode
) 
  91                 else {                  /* unknown; say so */ 
  92                         sprintf(convbuf
, unk
, errcode
); 
  98         len 
= strlen(msg
) + 1;          /* space needed, including NUL */ 
  99         if (errbuf_size 
> 0) { 
 100                 if (errbuf_size 
> len
) 
 102                 else {                  /* truncate to fit */ 
 103                         strncpy(errbuf
, msg
, errbuf_size
-1); 
 104                         errbuf
[errbuf_size
-1] = '\0';