Changeset 331 for EcnlProtoTool/trunk/onigmo-6.1.3/src/regposix.c
- Timestamp:
- Jan 21, 2018, 12:10:09 AM (6 years ago)
- Location:
- EcnlProtoTool/trunk/onigmo-6.1.3
- Files:
-
- 1 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/onigmo-6.1.3/src/regposix.c
r321 r331 4 4 /*- 5 5 * Copyright (c) 2002-2008 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> 6 * Copyright (c) 2011 6 * Copyright (c) 2011-2016 K.Takata <kentkt AT csc DOT jp> 7 7 * All rights reserved. 8 8 * … … 32 32 #include "regint.h" 33 33 #undef regex_t 34 #include "onig posix.h"34 #include "onigmoposix.h" 35 35 36 36 #define ONIG_C(reg) ((onig_regex_t* )((reg)->onig)) … … 116 116 { ONIGERR_INVALID_CHAR_PROPERTY_NAME, REG_BADPAT }, 117 117 { ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION, REG_EONIG_BADARG }, 118 { ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT, REG_EONIG_THREAD }119 118 120 119 }; … … 136 135 { 137 136 int r, len; 138 OnigSyntaxType* syntax = OnigDefaultSyntax;137 const OnigSyntaxType* syntax = OnigDefaultSyntax; 139 138 OnigOptionType options; 140 139 … … 170 169 int r, i, len; 171 170 UChar* end; 172 regmatch_t* pm;171 OnigRegion* region = NULL; 173 172 OnigOptionType options; 174 173 175 options = ONIG_OPTION_ POSIX_REGION;174 options = ONIG_OPTION_NONE; 176 175 if ((posix_options & REG_NOTBOL) != 0) options |= ONIG_OPTION_NOTBOL; 177 176 if ((posix_options & REG_NOTEOL) != 0) options |= ONIG_OPTION_NOTEOL; 178 177 179 if (nmatch == 0 || (reg->comp_options & REG_NOSUB) != 0) { 180 pm = (regmatch_t* )NULL; 178 if ((reg->comp_options & REG_NOSUB) != 0) { 181 179 nmatch = 0; 182 180 } 183 else if ((int )nmatch < ONIG_C(reg)->num_mem + 1) { 184 pm = (regmatch_t* )xmalloc(sizeof(regmatch_t) 185 * (ONIG_C(reg)->num_mem + 1)); 186 if (pm == NULL) 181 else if (nmatch != 0) { 182 region = onig_region_new(); 183 if (region == NULL) 187 184 return REG_ESPACE; 188 }189 else {190 pm = pmatch;191 185 } 192 186 … … 194 188 end = (UChar* )(str + len); 195 189 r = (int )onig_search(ONIG_C(reg), (UChar* )str, end, (UChar* )str, end, 196 (OnigRegion* )pm, options);190 region, options); 197 191 198 192 if (r >= 0) { 199 193 r = 0; /* Match */ 200 if (pm != pmatch && pm != NULL) { 201 xmemcpy(pmatch, pm, sizeof(regmatch_t) * nmatch); 194 for (i = 0; i < (int )nmatch; i++) { 195 pmatch[i].rm_so = (regoff_t )region->beg[i]; 196 pmatch[i].rm_eo = (regoff_t )region->end[i]; 202 197 } 203 198 } … … 211 206 } 212 207 213 if ( pm != pmatch && pm!= NULL)214 xfree(pm);208 if (region != NULL) 209 onig_region_free(region, 1); 215 210 216 211 #if 0 … … 238 233 enc = ONIG_ENCODING_ASCII; 239 234 break; 240 #if 0241 235 case REG_POSIX_ENCODING_EUC_JP: 242 236 enc = ONIG_ENCODING_EUC_JP; … … 245 239 enc = ONIG_ENCODING_SJIS; 246 240 break; 247 #endif248 241 case REG_POSIX_ENCODING_UTF8: 249 242 enc = ONIG_ENCODING_UTF8; 250 243 break; 251 #if 0252 244 case REG_POSIX_ENCODING_UTF16_BE: 253 245 enc = ONIG_ENCODING_UTF16_BE; … … 256 248 enc = ONIG_ENCODING_UTF16_LE; 257 249 break; 258 #endif 250 259 251 default: 260 252 return ;
Note:
See TracChangeset
for help on using the changeset viewer.