summaryrefslogtreecommitdiffstats
path: root/gl/regex_internal.c
diff options
context:
space:
mode:
Diffstat (limited to 'gl/regex_internal.c')
-rw-r--r--gl/regex_internal.c101
1 files changed, 52 insertions, 49 deletions
diff --git a/gl/regex_internal.c b/gl/regex_internal.c
index 7acec79..17eafaa 100644
--- a/gl/regex_internal.c
+++ b/gl/regex_internal.c
@@ -1,6 +1,6 @@
1/* Extended regular expression matching and search library. 1/* Extended regular expression matching and search library.
2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 2 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
3 Free Software Foundation, Inc. 3 Software Foundation, Inc.
4 This file is part of the GNU C Library. 4 This file is part of the GNU C Library.
5 Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. 5 Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
6 6
@@ -36,7 +36,7 @@ static re_dfastate_t *create_cd_newstate (const re_dfa_t *dfa,
36 re_string_reconstruct before using the object. */ 36 re_string_reconstruct before using the object. */
37 37
38static reg_errcode_t 38static reg_errcode_t
39internal_function 39internal_function __attribute_warn_unused_result__
40re_string_allocate (re_string_t *pstr, const char *str, Idx len, Idx init_len, 40re_string_allocate (re_string_t *pstr, const char *str, Idx len, Idx init_len,
41 RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) 41 RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa)
42{ 42{
@@ -64,7 +64,7 @@ re_string_allocate (re_string_t *pstr, const char *str, Idx len, Idx init_len,
64/* This function allocate the buffers, and initialize them. */ 64/* This function allocate the buffers, and initialize them. */
65 65
66static reg_errcode_t 66static reg_errcode_t
67internal_function 67internal_function __attribute_warn_unused_result__
68re_string_construct (re_string_t *pstr, const char *str, Idx len, 68re_string_construct (re_string_t *pstr, const char *str, Idx len,
69 RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) 69 RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa)
70{ 70{
@@ -127,7 +127,7 @@ re_string_construct (re_string_t *pstr, const char *str, Idx len,
127/* Helper functions for re_string_allocate, and re_string_construct. */ 127/* Helper functions for re_string_allocate, and re_string_construct. */
128 128
129static reg_errcode_t 129static reg_errcode_t
130internal_function 130internal_function __attribute_warn_unused_result__
131re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len) 131re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len)
132{ 132{
133#ifdef RE_ENABLE_I18N 133#ifdef RE_ENABLE_I18N
@@ -267,7 +267,7 @@ build_wcs_buffer (re_string_t *pstr)
267 but for REG_ICASE. */ 267 but for REG_ICASE. */
268 268
269static reg_errcode_t 269static reg_errcode_t
270internal_function 270internal_function __attribute_warn_unused_result__
271build_wcs_upper_buffer (re_string_t *pstr) 271build_wcs_upper_buffer (re_string_t *pstr)
272{ 272{
273 mbstate_t prev_st; 273 mbstate_t prev_st;
@@ -430,8 +430,8 @@ build_wcs_upper_buffer (re_string_t *pstr)
430 src_idx += mbclen; 430 src_idx += mbclen;
431 continue; 431 continue;
432 } 432 }
433 else 433 else
434 memcpy (pstr->mbs + byte_idx, p, mbclen); 434 memcpy (pstr->mbs + byte_idx, p, mbclen);
435 } 435 }
436 else 436 else
437 memcpy (pstr->mbs + byte_idx, p, mbclen); 437 memcpy (pstr->mbs + byte_idx, p, mbclen);
@@ -569,7 +569,7 @@ re_string_translate_buffer (re_string_t *pstr)
569 convert to upper case in case of REG_ICASE, apply translation. */ 569 convert to upper case in case of REG_ICASE, apply translation. */
570 570
571static reg_errcode_t 571static reg_errcode_t
572internal_function 572internal_function __attribute_warn_unused_result__
573re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags) 573re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags)
574{ 574{
575 Idx offset; 575 Idx offset;
@@ -964,7 +964,7 @@ re_string_context_at (const re_string_t *input, Idx idx, int eflags)
964/* Functions for set operation. */ 964/* Functions for set operation. */
965 965
966static reg_errcode_t 966static reg_errcode_t
967internal_function 967internal_function __attribute_warn_unused_result__
968re_node_set_alloc (re_node_set *set, Idx size) 968re_node_set_alloc (re_node_set *set, Idx size)
969{ 969{
970 set->alloc = size; 970 set->alloc = size;
@@ -976,7 +976,7 @@ re_node_set_alloc (re_node_set *set, Idx size)
976} 976}
977 977
978static reg_errcode_t 978static reg_errcode_t
979internal_function 979internal_function __attribute_warn_unused_result__
980re_node_set_init_1 (re_node_set *set, Idx elem) 980re_node_set_init_1 (re_node_set *set, Idx elem)
981{ 981{
982 set->alloc = 1; 982 set->alloc = 1;
@@ -992,7 +992,7 @@ re_node_set_init_1 (re_node_set *set, Idx elem)
992} 992}
993 993
994static reg_errcode_t 994static reg_errcode_t
995internal_function 995internal_function __attribute_warn_unused_result__
996re_node_set_init_2 (re_node_set *set, Idx elem1, Idx elem2) 996re_node_set_init_2 (re_node_set *set, Idx elem1, Idx elem2)
997{ 997{
998 set->alloc = 2; 998 set->alloc = 2;
@@ -1022,7 +1022,7 @@ re_node_set_init_2 (re_node_set *set, Idx elem1, Idx elem2)
1022} 1022}
1023 1023
1024static reg_errcode_t 1024static reg_errcode_t
1025internal_function 1025internal_function __attribute_warn_unused_result__
1026re_node_set_init_copy (re_node_set *dest, const re_node_set *src) 1026re_node_set_init_copy (re_node_set *dest, const re_node_set *src)
1027{ 1027{
1028 dest->nelem = src->nelem; 1028 dest->nelem = src->nelem;
@@ -1047,7 +1047,7 @@ re_node_set_init_copy (re_node_set *dest, const re_node_set *src)
1047 Note: We assume dest->elems is NULL, when dest->alloc is 0. */ 1047 Note: We assume dest->elems is NULL, when dest->alloc is 0. */
1048 1048
1049static reg_errcode_t 1049static reg_errcode_t
1050internal_function 1050internal_function __attribute_warn_unused_result__
1051re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1, 1051re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1,
1052 const re_node_set *src2) 1052 const re_node_set *src2)
1053{ 1053{
@@ -1062,7 +1062,7 @@ re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1,
1062 Idx new_alloc = src1->nelem + src2->nelem + dest->alloc; 1062 Idx new_alloc = src1->nelem + src2->nelem + dest->alloc;
1063 Idx *new_elems = re_realloc (dest->elems, Idx, new_alloc); 1063 Idx *new_elems = re_realloc (dest->elems, Idx, new_alloc);
1064 if (BE (new_elems == NULL, 0)) 1064 if (BE (new_elems == NULL, 0))
1065 return REG_ESPACE; 1065 return REG_ESPACE;
1066 dest->elems = new_elems; 1066 dest->elems = new_elems;
1067 dest->alloc = new_alloc; 1067 dest->alloc = new_alloc;
1068 } 1068 }
@@ -1112,20 +1112,20 @@ re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1,
1112 if (delta > 0 && REG_VALID_INDEX (id)) 1112 if (delta > 0 && REG_VALID_INDEX (id))
1113 for (;;) 1113 for (;;)
1114 { 1114 {
1115 if (dest->elems[is] > dest->elems[id]) 1115 if (dest->elems[is] > dest->elems[id])
1116 { 1116 {
1117 /* Copy from the top. */ 1117 /* Copy from the top. */
1118 dest->elems[id + delta--] = dest->elems[is--]; 1118 dest->elems[id + delta--] = dest->elems[is--];
1119 if (delta == 0) 1119 if (delta == 0)
1120 break; 1120 break;
1121 } 1121 }
1122 else 1122 else
1123 { 1123 {
1124 /* Slide from the bottom. */ 1124 /* Slide from the bottom. */
1125 dest->elems[id + delta] = dest->elems[id]; 1125 dest->elems[id + delta] = dest->elems[id];
1126 if (! REG_VALID_INDEX (--id)) 1126 if (! REG_VALID_INDEX (--id))
1127 break; 1127 break;
1128 } 1128 }
1129 } 1129 }
1130 1130
1131 /* Copy remaining SRC elements. */ 1131 /* Copy remaining SRC elements. */
@@ -1138,7 +1138,7 @@ re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1,
1138 DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ 1138 DEST. Return value indicate the error code or REG_NOERROR if succeeded. */
1139 1139
1140static reg_errcode_t 1140static reg_errcode_t
1141internal_function 1141internal_function __attribute_warn_unused_result__
1142re_node_set_init_union (re_node_set *dest, const re_node_set *src1, 1142re_node_set_init_union (re_node_set *dest, const re_node_set *src1,
1143 const re_node_set *src2) 1143 const re_node_set *src2)
1144{ 1144{
@@ -1191,7 +1191,7 @@ re_node_set_init_union (re_node_set *dest, const re_node_set *src1,
1191 DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ 1191 DEST. Return value indicate the error code or REG_NOERROR if succeeded. */
1192 1192
1193static reg_errcode_t 1193static reg_errcode_t
1194internal_function 1194internal_function __attribute_warn_unused_result__
1195re_node_set_merge (re_node_set *dest, const re_node_set *src) 1195re_node_set_merge (re_node_set *dest, const re_node_set *src)
1196{ 1196{
1197 Idx is, id, sbase, delta; 1197 Idx is, id, sbase, delta;
@@ -1221,11 +1221,11 @@ re_node_set_merge (re_node_set *dest, const re_node_set *src)
1221 REG_VALID_INDEX (is) && REG_VALID_INDEX (id); ) 1221 REG_VALID_INDEX (is) && REG_VALID_INDEX (id); )
1222 { 1222 {
1223 if (dest->elems[id] == src->elems[is]) 1223 if (dest->elems[id] == src->elems[is])
1224 is--, id--; 1224 is--, id--;
1225 else if (dest->elems[id] < src->elems[is]) 1225 else if (dest->elems[id] < src->elems[is])
1226 dest->elems[--sbase] = src->elems[is--]; 1226 dest->elems[--sbase] = src->elems[is--];
1227 else /* if (dest->elems[id] > src->elems[is]) */ 1227 else /* if (dest->elems[id] > src->elems[is]) */
1228 --id; 1228 --id;
1229 } 1229 }
1230 1230
1231 if (REG_VALID_INDEX (is)) 1231 if (REG_VALID_INDEX (is))
@@ -1247,21 +1247,21 @@ re_node_set_merge (re_node_set *dest, const re_node_set *src)
1247 for (;;) 1247 for (;;)
1248 { 1248 {
1249 if (dest->elems[is] > dest->elems[id]) 1249 if (dest->elems[is] > dest->elems[id])
1250 { 1250 {
1251 /* Copy from the top. */ 1251 /* Copy from the top. */
1252 dest->elems[id + delta--] = dest->elems[is--]; 1252 dest->elems[id + delta--] = dest->elems[is--];
1253 if (delta == 0) 1253 if (delta == 0)
1254 break; 1254 break;
1255 } 1255 }
1256 else 1256 else
1257 { 1257 {
1258 /* Slide from the bottom. */ 1258 /* Slide from the bottom. */
1259 dest->elems[id + delta] = dest->elems[id]; 1259 dest->elems[id + delta] = dest->elems[id];
1260 if (! REG_VALID_INDEX (--id)) 1260 if (! REG_VALID_INDEX (--id))
1261 { 1261 {
1262 /* Copy remaining SRC elements. */ 1262 /* Copy remaining SRC elements. */
1263 memcpy (dest->elems, dest->elems + sbase, 1263 memcpy (dest->elems, dest->elems + sbase,
1264 delta * sizeof (Idx)); 1264 delta * sizeof (Idx));
1265 break; 1265 break;
1266 } 1266 }
1267 } 1267 }
@@ -1275,7 +1275,7 @@ re_node_set_merge (re_node_set *dest, const re_node_set *src)
1275 Return true if successful. */ 1275 Return true if successful. */
1276 1276
1277static bool 1277static bool
1278internal_function 1278internal_function __attribute_warn_unused_result__
1279re_node_set_insert (re_node_set *set, Idx elem) 1279re_node_set_insert (re_node_set *set, Idx elem)
1280{ 1280{
1281 Idx idx; 1281 Idx idx;
@@ -1308,12 +1308,12 @@ re_node_set_insert (re_node_set *set, Idx elem)
1308 { 1308 {
1309 idx = 0; 1309 idx = 0;
1310 for (idx = set->nelem; idx > 0; idx--) 1310 for (idx = set->nelem; idx > 0; idx--)
1311 set->elems[idx] = set->elems[idx - 1]; 1311 set->elems[idx] = set->elems[idx - 1];
1312 } 1312 }
1313 else 1313 else
1314 { 1314 {
1315 for (idx = set->nelem; set->elems[idx - 1] > elem; idx--) 1315 for (idx = set->nelem; set->elems[idx - 1] > elem; idx--)
1316 set->elems[idx] = set->elems[idx - 1]; 1316 set->elems[idx] = set->elems[idx - 1];
1317 } 1317 }
1318 1318
1319 /* Insert the new element. */ 1319 /* Insert the new element. */
@@ -1327,7 +1327,7 @@ re_node_set_insert (re_node_set *set, Idx elem)
1327 Return true if successful. */ 1327 Return true if successful. */
1328 1328
1329static bool 1329static bool
1330internal_function 1330internal_function __attribute_warn_unused_result__
1331re_node_set_insert_last (re_node_set *set, Idx elem) 1331re_node_set_insert_last (re_node_set *set, Idx elem)
1332{ 1332{
1333 /* Realloc if we need. */ 1333 /* Realloc if we need. */
@@ -1473,7 +1473,7 @@ calc_state_hash (const re_node_set *nodes, unsigned int context)
1473 optimization. */ 1473 optimization. */
1474 1474
1475static re_dfastate_t * 1475static re_dfastate_t *
1476internal_function 1476internal_function __attribute_warn_unused_result__
1477re_acquire_state (reg_errcode_t *err, const re_dfa_t *dfa, 1477re_acquire_state (reg_errcode_t *err, const re_dfa_t *dfa,
1478 const re_node_set *nodes) 1478 const re_node_set *nodes)
1479{ 1479{
@@ -1521,7 +1521,7 @@ re_acquire_state (reg_errcode_t *err, const re_dfa_t *dfa,
1521 optimization. */ 1521 optimization. */
1522 1522
1523static re_dfastate_t * 1523static re_dfastate_t *
1524internal_function 1524internal_function __attribute_warn_unused_result__
1525re_acquire_state_context (reg_errcode_t *err, const re_dfa_t *dfa, 1525re_acquire_state_context (reg_errcode_t *err, const re_dfa_t *dfa,
1526 const re_node_set *nodes, unsigned int context) 1526 const re_node_set *nodes, unsigned int context)
1527{ 1527{
@@ -1562,6 +1562,7 @@ re_acquire_state_context (reg_errcode_t *err, const re_dfa_t *dfa,
1562 indicates the error code if failed. */ 1562 indicates the error code if failed. */
1563 1563
1564static reg_errcode_t 1564static reg_errcode_t
1565__attribute_warn_unused_result__
1565register_state (const re_dfa_t *dfa, re_dfastate_t *newstate, 1566register_state (const re_dfa_t *dfa, re_dfastate_t *newstate,
1566 re_hashval_t hash) 1567 re_hashval_t hash)
1567{ 1568{
@@ -1616,7 +1617,7 @@ free_state (re_dfastate_t *state)
1616 Return the new state if succeeded, otherwise return NULL. */ 1617 Return the new state if succeeded, otherwise return NULL. */
1617 1618
1618static re_dfastate_t * 1619static re_dfastate_t *
1619internal_function 1620internal_function __attribute_warn_unused_result__
1620create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, 1621create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes,
1621 re_hashval_t hash) 1622 re_hashval_t hash)
1622{ 1623{
@@ -1666,7 +1667,7 @@ create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes,
1666 Return the new state if succeeded, otherwise return NULL. */ 1667 Return the new state if succeeded, otherwise return NULL. */
1667 1668
1668static re_dfastate_t * 1669static re_dfastate_t *
1669internal_function 1670internal_function __attribute_warn_unused_result__
1670create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, 1671create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes,
1671 unsigned int context, re_hashval_t hash) 1672 unsigned int context, re_hashval_t hash)
1672{ 1673{
@@ -1715,7 +1716,9 @@ create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes,
1715 free_state (newstate); 1716 free_state (newstate);
1716 return NULL; 1717 return NULL;
1717 } 1718 }
1718 re_node_set_init_copy (newstate->entrance_nodes, nodes); 1719 if (re_node_set_init_copy (newstate->entrance_nodes, nodes)
1720 != REG_NOERROR)
1721 return NULL;
1719 nctx_nodes = 0; 1722 nctx_nodes = 0;
1720 newstate->has_constraint = 1; 1723 newstate->has_constraint = 1;
1721 } 1724 }