]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/reggnu.c
MdeModulePkg RegularExpressionDxe: Update Oniguruma from v6.9.0 to v6.9.3
[mirror_edk2.git] / MdeModulePkg / Universal / RegularExpressionDxe / Oniguruma / reggnu.c
CommitLineData
14b0e578
CS
1/**********************************************************************\r
2 reggnu.c - Oniguruma (regular expression library)\r
3**********************************************************************/\r
4/*-\r
b26691c4 5 * Copyright (c) 2002-2019 K.Kosako <sndgk393 AT ybb DOT ne DOT jp>\r
14b0e578
CS
6 * All rights reserved.\r
7 *\r
14b0e578
CS
8 * Redistribution and use in source and binary forms, with or without\r
9 * modification, are permitted provided that the following conditions\r
10 * are met:\r
11 * 1. Redistributions of source code must retain the above copyright\r
12 * notice, this list of conditions and the following disclaimer.\r
13 * 2. Redistributions in binary form must reproduce the above copyright\r
14 * notice, this list of conditions and the following disclaimer in the\r
15 * documentation and/or other materials provided with the distribution.\r
16 *\r
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\r
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\r
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\r
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\r
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\r
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\r
27 * SUCH DAMAGE.\r
28 */\r
29\r
30#include "regint.h"\r
14b0e578 31#include "oniggnu.h"\r
14b0e578
CS
32\r
33extern void\r
34re_free_registers(OnigRegion* r)\r
35{\r
36 /* 0: don't free self */\r
37 onig_region_free(r, 0);\r
38}\r
39\r
40extern int\r
41re_adjust_startpos(regex_t* reg, const char* string, int size,\r
b26691c4 42 int startpos, int range)\r
14b0e578
CS
43{\r
44 if (startpos > 0 && ONIGENC_MBC_MAXLEN(reg->enc) != 1 && startpos < size) {\r
45 UChar *p;\r
46 UChar *s = (UChar* )string + startpos;\r
47\r
48 if (range > 0) {\r
49 p = onigenc_get_right_adjust_char_head(reg->enc, (UChar* )string, s);\r
50 }\r
51 else {\r
52 p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, (UChar* )string, s);\r
53 }\r
b602265d 54 return (int )(p - (UChar* )string);\r
14b0e578
CS
55 }\r
56\r
57 return startpos;\r
58}\r
59\r
60extern int\r
61re_match(regex_t* reg, const char* str, int size, int pos,\r
b26691c4 62 struct re_registers* regs)\r
14b0e578
CS
63{\r
64 return onig_match(reg, (UChar* )str, (UChar* )(str + size),\r
b26691c4 65 (UChar* )(str + pos), regs, ONIG_OPTION_NONE);\r
14b0e578
CS
66}\r
67\r
68extern int\r
69re_search(regex_t* bufp, const char* string, int size, int startpos, int range,\r
b26691c4 70 struct re_registers* regs)\r
14b0e578
CS
71{\r
72 return onig_search(bufp, (UChar* )string, (UChar* )(string + size),\r
b26691c4
LG
73 (UChar* )(string + startpos),\r
74 (UChar* )(string + startpos + range),\r
75 regs, ONIG_OPTION_NONE);\r
14b0e578
CS
76}\r
77\r
78extern int\r
79re_compile_pattern(const char* pattern, int size, regex_t* reg, char* ebuf)\r
80{\r
81 int r;\r
82 OnigErrorInfo einfo;\r
83\r
84 r = onig_compile(reg, (UChar* )pattern, (UChar* )(pattern + size), &einfo);\r
85 if (r != ONIG_NORMAL) {\r
86 if (IS_NOT_NULL(ebuf))\r
87 (void )onig_error_code_to_str((UChar* )ebuf, r, &einfo);\r
88 }\r
89\r
90 return r;\r
91}\r
92\r
14b0e578
CS
93extern void\r
94re_free_pattern(regex_t* reg)\r
95{\r
96 onig_free(reg);\r
97}\r
98\r
99extern int\r
100re_alloc_pattern(regex_t** reg)\r
101{\r
102 *reg = (regex_t* )xmalloc(sizeof(regex_t));\r
103 if (IS_NULL(*reg)) return ONIGERR_MEMORY;\r
104\r
105 return onig_reg_init(*reg, ONIG_OPTION_DEFAULT,\r
b26691c4
LG
106 ONIGENC_CASE_FOLD_DEFAULT,\r
107 OnigEncDefaultCharEncoding,\r
108 OnigDefaultSyntax);\r
14b0e578
CS
109}\r
110\r
111extern void\r
112re_set_casetable(const char* table)\r
113{\r
114 onigenc_set_default_caseconv_table((UChar* )table);\r
115}\r
116\r
117extern void\r
118re_mbcinit(int mb_code)\r
119{\r
120 OnigEncoding enc;\r
121\r
122 switch (mb_code) {\r
123 case RE_MBCTYPE_ASCII:\r
124 enc = ONIG_ENCODING_ASCII;\r
125 break;\r
14b0e578
CS
126 }\r
127\r
b602265d
DG
128 onig_initialize(&enc, 1);\r
129\r
14b0e578
CS
130 onigenc_set_default_encoding(enc);\r
131}\r