LCOV - differential code coverage report
Current view: top level - src/backend/regex - regerror.c (source / functions) Coverage Total Hit UBC CBC
Current: Differential Code Coverage 16@8cea358b128 vs 17@8cea358b128 Lines: 40.0 % 35 14 21 14
Current Date: 2024-04-14 14:21:10 Functions: 100.0 % 1 1 1
Baseline: 16@8cea358b128 Branches: 30.4 % 23 7 16 7
Baseline Date: 2024-04-14 14:21:09 Line coverage date bins:
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed (240..) days: 40.0 % 35 14 21 14
Function coverage date bins:
(240..) days: 100.0 % 1 1 1
Branch coverage date bins:
(240..) days: 30.4 % 23 7 16 7

 Age         Owner                    Branch data    TLA  Line data    Source code
                                  1                 :                : /*
                                  2                 :                :  * regerror - error-code expansion
                                  3                 :                :  *
                                  4                 :                :  * Copyright (c) 1998, 1999 Henry Spencer.  All rights reserved.
                                  5                 :                :  *
                                  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
                                  9                 :                :  * thanks all of them.
                                 10                 :                :  *
                                 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.
                                 15                 :                :  *
                                 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.
                                 18                 :                :  *
                                 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.
                                 29                 :                :  *
                                 30                 :                :  * src/backend/regex/regerror.c
                                 31                 :                :  *
                                 32                 :                :  */
                                 33                 :                : 
                                 34                 :                : #include "regex/regguts.h"
                                 35                 :                : 
                                 36                 :                : /* unknown-error explanation */
                                 37                 :                : static const char unk[] = "*** unknown regex error code 0x%x ***";
                                 38                 :                : 
                                 39                 :                : /* struct to map among codes, code names, and explanations */
                                 40                 :                : static const struct rerr
                                 41                 :                : {
                                 42                 :                :     int         code;
                                 43                 :                :     const char *name;
                                 44                 :                :     const char *explain;
                                 45                 :                : }           rerrs[] =
                                 46                 :                : 
                                 47                 :                : {
                                 48                 :                :     /* the actual table is built from regex.h */
                                 49                 :                : #include "regex/regerrs.h"        /* pgrminclude ignore */
                                 50                 :                :     {
                                 51                 :                :         -1, "", "oops"
                                 52                 :                :     },                          /* explanation special-cased in code */
                                 53                 :                : };
                                 54                 :                : 
                                 55                 :                : /*
                                 56                 :                :  * pg_regerror - the interface to error numbers
                                 57                 :                :  */
                                 58                 :                : /* ARGSUSED */
                                 59                 :                : size_t                          /* actual space needed (including NUL) */
 7739 tgl@sss.pgh.pa.us          60                 :CBC         127 : pg_regerror(int errcode,        /* error code, or REG_ATOI or REG_ITOA */
                                 61                 :                :             const regex_t *preg,    /* associated regex_t (unused at present) */
                                 62                 :                :             char *errbuf,       /* result buffer (unless errbuf_size==0) */
                                 63                 :                :             size_t errbuf_size) /* available space in errbuf, can be 0 */
                                 64                 :                : {
                                 65                 :                :     const struct rerr *r;
                                 66                 :                :     const char *msg;
                                 67                 :                :     char        convbuf[sizeof(unk) + 50];  /* 50 = plenty for int */
                                 68                 :                :     size_t      len;
                                 69                 :                :     int         icode;
                                 70                 :                : 
 7559 bruce@momjian.us           71      [ -  -  + ]:            127 :     switch (errcode)
                                 72                 :                :     {
 7559 bruce@momjian.us           73                 :UBC           0 :         case REG_ATOI:          /* convert name to number */
                                 74         [ #  # ]:              0 :             for (r = rerrs; r->code >= 0; r++)
                                 75         [ #  # ]:              0 :                 if (strcmp(r->name, errbuf) == 0)
                                 76                 :              0 :                     break;
                                 77                 :              0 :             sprintf(convbuf, "%d", r->code);   /* -1 for unknown */
 7739 tgl@sss.pgh.pa.us          78                 :              0 :             msg = convbuf;
 7559 bruce@momjian.us           79                 :              0 :             break;
                                 80                 :              0 :         case REG_ITOA:          /* convert number to name */
 2489 tgl@sss.pgh.pa.us          81                 :              0 :             icode = atoi(errbuf);   /* not our problem if this fails */
 7559 bruce@momjian.us           82         [ #  # ]:              0 :             for (r = rerrs; r->code >= 0; r++)
                                 83         [ #  # ]:              0 :                 if (r->code == icode)
                                 84                 :              0 :                     break;
                                 85         [ #  # ]:              0 :             if (r->code >= 0)
                                 86                 :              0 :                 msg = r->name;
                                 87                 :                :             else
                                 88                 :                :             {                   /* unknown; tell him the number */
                                 89                 :              0 :                 sprintf(convbuf, "REG_%u", (unsigned) icode);
                                 90                 :              0 :                 msg = convbuf;
                                 91                 :                :             }
                                 92                 :              0 :             break;
 7559 bruce@momjian.us           93                 :CBC         127 :         default:                /* a real, normal error code */
                                 94         [ +  - ]:           1320 :             for (r = rerrs; r->code >= 0; r++)
                                 95         [ +  + ]:           1320 :                 if (r->code == errcode)
                                 96                 :            127 :                     break;
                                 97         [ +  - ]:            127 :             if (r->code >= 0)
                                 98                 :            127 :                 msg = r->explain;
                                 99                 :                :             else
                                100                 :                :             {                   /* unknown; say so */
 7559 bruce@momjian.us          101                 :UBC           0 :                 sprintf(convbuf, unk, errcode);
                                102                 :              0 :                 msg = convbuf;
                                103                 :                :             }
 7559 bruce@momjian.us          104                 :CBC         127 :             break;
                                105                 :                :     }
                                106                 :                : 
 7739 tgl@sss.pgh.pa.us         107                 :            127 :     len = strlen(msg) + 1;      /* space needed, including NUL */
 7559 bruce@momjian.us          108         [ +  - ]:            127 :     if (errbuf_size > 0)
                                109                 :                :     {
10141 scrappy@hub.org           110         [ +  - ]:            127 :         if (errbuf_size > len)
 7739 tgl@sss.pgh.pa.us         111                 :            127 :             strcpy(errbuf, msg);
                                112                 :                :         else
                                113                 :                :         {                       /* truncate to fit */
 3368 tgl@sss.pgh.pa.us         114                 :UBC           0 :             memcpy(errbuf, msg, errbuf_size - 1);
 7559 bruce@momjian.us          115                 :              0 :             errbuf[errbuf_size - 1] = '\0';
                                116                 :                :         }
                                117                 :                :     }
                                118                 :                : 
 9357 bruce@momjian.us          119                 :CBC         127 :     return len;
                                120                 :                : }
        

Generated by: LCOV version 2.1-beta2-3-g6141622