1 /********************************************************************** 2 regposerr.c - Oniguruma (regular expression library) 3 **********************************************************************/ 4 /*- 5 * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> 6 * All rights reserved. 7 * 8 * (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR> 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 */ 31 32 /*#include "config.h"*/ 33 #include "onigposix.h" 34 35 #if 0 36 #ifdef HAVE_STRING_H 37 # include <string.h> 38 #else 39 # include <strings.h> 40 #endif 41 #endif 42 43 #if defined(__GNUC__) 44 # define ARG_UNUSED __attribute__ ((unused)) 45 #else 46 # define ARG_UNUSED 47 #endif 48 49 static char* ESTRING[] = { 50 NULL, 51 "failed to match", /* REG_NOMATCH */ 52 "Invalid regular expression", /* REG_BADPAT */ 53 "invalid collating element referenced", /* REG_ECOLLATE */ 54 "invalid character class type referenced", /* REG_ECTYPE */ 55 "bad backslash-escape sequence", /* REG_EESCAPE */ 56 "invalid back reference number", /* REG_ESUBREG */ 57 "imbalanced [ and ]", /* REG_EBRACK */ 58 "imbalanced ( and )", /* REG_EPAREN */ 59 "imbalanced { and }", /* REG_EBRACE */ 60 "invalid repeat range {n,m}", /* REG_BADBR */ 61 "invalid range", /* REG_ERANGE */ 62 "Out of memory", /* REG_ESPACE */ 63 "? * + not preceded by valid regular expression", /* REG_BADRPT */ 64 65 /* Extended errors */ 66 "internal error", /* REG_EONIG_INTERNAL */ 67 "invalid wide char value", /* REG_EONIG_BADWC */ 68 "invalid argument", /* REG_EONIG_BADARG */ 69 "multi-thread error" /* REG_EONIG_THREAD */ 70 }; 71 72 //#include <stdio.h> 73 74 75 extern size_t 76 regerror(int posix_ecode, const regex_t* reg ARG_UNUSED, char* buf, 77 size_t size) 78 { 79 char* s; 80 char tbuf[35]; 81 size_t len; 82 83 if (posix_ecode > 0 84 && posix_ecode < (int )(sizeof(ESTRING) / sizeof(ESTRING[0]))) { 85 s = ESTRING[posix_ecode]; 86 } 87 else if (posix_ecode == 0) { 88 s = ""; 89 } 90 else { 91 sprintf_s(tbuf, sizeof(tbuf), "undefined error code (%d)", posix_ecode); 92 s = tbuf; 93 } 94 95 len = strlen_s(s, MAX_STRING_SIZE) + 1; /* use strlen() because s is ascii encoding. */ 96 97 if (buf != NULL && size > 0) { 98 strncpy_s(buf, size, s, size - 1); 99 buf[size - 1] = '\0'; 100 } 101 return len; 102 } 103