mirror of git://sourceware.org/git/glibc.git
Wrap #include wchar.h and wctype.h in #if. (build_range_exp): Add castings to strlen invocations. (build_collating_symbol): Restore the type of characters from "char" to "unsigned char", and supplement castings. (build_collating_symbol): Likewise. (build_equiv_class): Likewise. (build_charclass): Likewise. (seek_collating_symbol_entry): Likewise. (parse_bracket_exp): Likewise. (build_word_op): Supplement a casting.
This commit is contained in:
parent
c652a2edcb
commit
62439eac8b
|
|
@ -25,8 +25,13 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#if defined HAVE_WCHAR_H || defined _LIBC
|
||||||
# include <wchar.h>
|
# include <wchar.h>
|
||||||
|
#endif /* HAVE_WCHAR_H || _LIBC */
|
||||||
|
#if defined HAVE_WCTYPE_H || defined _LIBC
|
||||||
# include <wctype.h>
|
# include <wctype.h>
|
||||||
|
#endif /* HAVE_WCTYPE_H || _LIBC */
|
||||||
|
|
||||||
/* In case that the system doesn't have isblank(). */
|
/* In case that the system doesn't have isblank(). */
|
||||||
#if !defined _LIBC && !defined HAVE_ISBLANK && !defined isblank
|
#if !defined _LIBC && !defined HAVE_ISBLANK && !defined isblank
|
||||||
|
|
@ -130,30 +135,30 @@ static reg_errcode_t build_range_exp (re_bitset_ptr_t sbcset,
|
||||||
static reg_errcode_t build_collating_symbol (re_bitset_ptr_t sbcset,
|
static reg_errcode_t build_collating_symbol (re_bitset_ptr_t sbcset,
|
||||||
re_charset_t *mbcset,
|
re_charset_t *mbcset,
|
||||||
int *coll_sym_alloc,
|
int *coll_sym_alloc,
|
||||||
char *name);
|
const unsigned char *name);
|
||||||
# else /* not RE_ENABLE_I18N */
|
# else /* not RE_ENABLE_I18N */
|
||||||
static reg_errcode_t build_range_exp (re_bitset_ptr_t sbcset,
|
static reg_errcode_t build_range_exp (re_bitset_ptr_t sbcset,
|
||||||
bracket_elem_t *start_elem,
|
bracket_elem_t *start_elem,
|
||||||
bracket_elem_t *end_elem);
|
bracket_elem_t *end_elem);
|
||||||
static reg_errcode_t build_collating_symbol (re_bitset_ptr_t sbcset,
|
static reg_errcode_t build_collating_symbol (re_bitset_ptr_t sbcset,
|
||||||
char *name);
|
const unsigned char *name);
|
||||||
# endif /* not RE_ENABLE_I18N */
|
# endif /* not RE_ENABLE_I18N */
|
||||||
#endif /* not _LIBC */
|
#endif /* not _LIBC */
|
||||||
#ifdef RE_ENABLE_I18N
|
#ifdef RE_ENABLE_I18N
|
||||||
static reg_errcode_t build_equiv_class (re_bitset_ptr_t sbcset,
|
static reg_errcode_t build_equiv_class (re_bitset_ptr_t sbcset,
|
||||||
re_charset_t *mbcset,
|
re_charset_t *mbcset,
|
||||||
int *equiv_class_alloc,
|
int *equiv_class_alloc,
|
||||||
const char *name);
|
const unsigned char *name);
|
||||||
static reg_errcode_t build_charclass (re_bitset_ptr_t sbcset,
|
static reg_errcode_t build_charclass (re_bitset_ptr_t sbcset,
|
||||||
re_charset_t *mbcset,
|
re_charset_t *mbcset,
|
||||||
int *char_class_alloc,
|
int *char_class_alloc,
|
||||||
const char *class_name,
|
const unsigned char *class_name,
|
||||||
reg_syntax_t syntax);
|
reg_syntax_t syntax);
|
||||||
#else /* not RE_ENABLE_I18N */
|
#else /* not RE_ENABLE_I18N */
|
||||||
static reg_errcode_t build_equiv_class (re_bitset_ptr_t sbcset,
|
static reg_errcode_t build_equiv_class (re_bitset_ptr_t sbcset,
|
||||||
const char *name);
|
const unsigned char *name);
|
||||||
static reg_errcode_t build_charclass (re_bitset_ptr_t sbcset,
|
static reg_errcode_t build_charclass (re_bitset_ptr_t sbcset,
|
||||||
const char *class_name,
|
const unsigned char *class_name,
|
||||||
reg_syntax_t syntax);
|
reg_syntax_t syntax);
|
||||||
#endif /* not RE_ENABLE_I18N */
|
#endif /* not RE_ENABLE_I18N */
|
||||||
static bin_tree_t *build_word_op (re_dfa_t *dfa, int not, reg_errcode_t *err);
|
static bin_tree_t *build_word_op (re_dfa_t *dfa, int not, reg_errcode_t *err);
|
||||||
|
|
@ -2290,9 +2295,10 @@ build_range_exp (sbcset, start_elem, end_elem)
|
||||||
|
|
||||||
/* We can handle no multi character collating elements without libc
|
/* We can handle no multi character collating elements without libc
|
||||||
support. */
|
support. */
|
||||||
if (BE ((start_elem->type == COLL_SYM && strlen (start_elem->opr.name) > 1)
|
if (BE ((start_elem->type == COLL_SYM
|
||||||
|| (end_elem->type == COLL_SYM && strlen (end_elem->opr.name) > 1),
|
&& strlen ((char *) start_elem->opr.name) > 1)
|
||||||
0))
|
|| (end_elem->type == COLL_SYM
|
||||||
|
&& strlen ((char *) end_elem->opr.name) > 1), 0))
|
||||||
return REG_ECOLLATE;
|
return REG_ECOLLATE;
|
||||||
|
|
||||||
# ifdef RE_ENABLE_I18N
|
# ifdef RE_ENABLE_I18N
|
||||||
|
|
@ -2388,13 +2394,14 @@ build_collating_symbol (sbcset, mbcset, coll_sym_alloc, name)
|
||||||
build_collating_symbol (sbcset, name)
|
build_collating_symbol (sbcset, name)
|
||||||
# endif /* not RE_ENABLE_I18N */
|
# endif /* not RE_ENABLE_I18N */
|
||||||
re_bitset_ptr_t sbcset;
|
re_bitset_ptr_t sbcset;
|
||||||
char *name;
|
const unsigned char *name;
|
||||||
{
|
{
|
||||||
if (BE (strlen (name) != 1, 0))
|
size_t name_len = strlen ((const char *) name);
|
||||||
|
if (BE (name_len != 1, 0))
|
||||||
return REG_ECOLLATE;
|
return REG_ECOLLATE;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bitset_set (sbcset, *(unsigned char *) name);
|
bitset_set (sbcset, name[0]);
|
||||||
return REG_NOERROR;
|
return REG_NOERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2412,7 +2419,8 @@ parse_bracket_exp (regexp, dfa, token, syntax, err)
|
||||||
reg_errcode_t *err;
|
reg_errcode_t *err;
|
||||||
{
|
{
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
const char *collseqmb, *collseqwc;
|
const unsigned char *collseqmb;
|
||||||
|
const char *collseqwc;
|
||||||
uint32_t nrules;
|
uint32_t nrules;
|
||||||
int32_t table_size;
|
int32_t table_size;
|
||||||
const int32_t *symb_table;
|
const int32_t *symb_table;
|
||||||
|
|
@ -2424,10 +2432,10 @@ parse_bracket_exp (regexp, dfa, token, syntax, err)
|
||||||
|
|
||||||
static inline int32_t
|
static inline int32_t
|
||||||
seek_collating_symbol_entry (name, name_len)
|
seek_collating_symbol_entry (name, name_len)
|
||||||
char *name;
|
const unsigned char *name;
|
||||||
size_t name_len;
|
size_t name_len;
|
||||||
{
|
{
|
||||||
int32_t hash = elem_hash (name, name_len);
|
int32_t hash = elem_hash ((const char *) name, name_len);
|
||||||
int32_t elem = hash % table_size;
|
int32_t elem = hash % table_size;
|
||||||
int32_t second = hash % (table_size - 2);
|
int32_t second = hash % (table_size - 2);
|
||||||
while (symb_table[2 * elem] != 0)
|
while (symb_table[2 * elem] != 0)
|
||||||
|
|
@ -2477,11 +2485,12 @@ parse_bracket_exp (regexp, dfa, token, syntax, err)
|
||||||
}
|
}
|
||||||
else if (br_elem->type == COLL_SYM)
|
else if (br_elem->type == COLL_SYM)
|
||||||
{
|
{
|
||||||
|
size_t sym_name_len = strlen ((char *) br_elem->opr.name);
|
||||||
if (nrules != 0)
|
if (nrules != 0)
|
||||||
{
|
{
|
||||||
int32_t elem, idx;
|
int32_t elem, idx;
|
||||||
elem = seek_collating_symbol_entry (br_elem->opr.name,
|
elem = seek_collating_symbol_entry (br_elem->opr.name,
|
||||||
strlen (br_elem->opr.name));
|
sym_name_len);
|
||||||
if (symb_table[2 * elem] != 0)
|
if (symb_table[2 * elem] != 0)
|
||||||
{
|
{
|
||||||
/* We found the entry. */
|
/* We found the entry. */
|
||||||
|
|
@ -2500,16 +2509,15 @@ parse_bracket_exp (regexp, dfa, token, syntax, err)
|
||||||
/* Return the collation sequence value. */
|
/* Return the collation sequence value. */
|
||||||
return *(unsigned int *) (extra + idx);
|
return *(unsigned int *) (extra + idx);
|
||||||
}
|
}
|
||||||
else if (symb_table[2 * elem] == 0 &&
|
else if (symb_table[2 * elem] == 0 && sym_name_len == 1)
|
||||||
strlen (br_elem->opr.name) == 1)
|
|
||||||
{
|
{
|
||||||
/* No valid character. Match it as a single byte
|
/* No valid character. Match it as a single byte
|
||||||
character. */
|
character. */
|
||||||
return collseqmb[*(unsigned char *) br_elem->opr.name];
|
return collseqmb[br_elem->opr.name[0]];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (strlen (br_elem->opr.name) == 1)
|
else if (sym_name_len == 1)
|
||||||
return collseqmb[*(unsigned char *) br_elem->opr.name];
|
return collseqmb[br_elem->opr.name[0]];
|
||||||
}
|
}
|
||||||
return UINT_MAX;
|
return UINT_MAX;
|
||||||
}
|
}
|
||||||
|
|
@ -2616,12 +2624,13 @@ parse_bracket_exp (regexp, dfa, token, syntax, err)
|
||||||
build_collating_symbol (sbcset, name)
|
build_collating_symbol (sbcset, name)
|
||||||
# endif /* not RE_ENABLE_I18N */
|
# endif /* not RE_ENABLE_I18N */
|
||||||
re_bitset_ptr_t sbcset;
|
re_bitset_ptr_t sbcset;
|
||||||
char *name;
|
const unsigned char *name;
|
||||||
{
|
{
|
||||||
int32_t elem, idx;
|
int32_t elem, idx;
|
||||||
|
size_t name_len = strlen ((const char *) name);
|
||||||
if (nrules != 0)
|
if (nrules != 0)
|
||||||
{
|
{
|
||||||
elem = seek_collating_symbol_entry (name, strlen (name));
|
elem = seek_collating_symbol_entry (name, name_len);
|
||||||
if (symb_table[2 * elem] != 0)
|
if (symb_table[2 * elem] != 0)
|
||||||
{
|
{
|
||||||
/* We found the entry. */
|
/* We found the entry. */
|
||||||
|
|
@ -2629,11 +2638,11 @@ parse_bracket_exp (regexp, dfa, token, syntax, err)
|
||||||
/* Skip the name of collating element name. */
|
/* Skip the name of collating element name. */
|
||||||
idx += 1 + extra[idx];
|
idx += 1 + extra[idx];
|
||||||
}
|
}
|
||||||
else if (symb_table[2 * elem] == 0 && strlen (name) == 1)
|
else if (symb_table[2 * elem] == 0 && name_len == 1)
|
||||||
{
|
{
|
||||||
/* No valid character, treat it as a normal
|
/* No valid character, treat it as a normal
|
||||||
character. */
|
character. */
|
||||||
bitset_set (sbcset, *(unsigned char *) name);
|
bitset_set (sbcset, name[0]);
|
||||||
return REG_NOERROR;
|
return REG_NOERROR;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -2660,11 +2669,11 @@ parse_bracket_exp (regexp, dfa, token, syntax, err)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (BE (strlen (name) != 1, 0))
|
if (BE (name_len != 1, 0))
|
||||||
return REG_ECOLLATE;
|
return REG_ECOLLATE;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bitset_set (sbcset, *(unsigned char *) name);
|
bitset_set (sbcset, name[0]);
|
||||||
return REG_NOERROR;
|
return REG_NOERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2683,7 +2692,8 @@ parse_bracket_exp (regexp, dfa, token, syntax, err)
|
||||||
bin_tree_t *work_tree;
|
bin_tree_t *work_tree;
|
||||||
int token_len, new_idx;
|
int token_len, new_idx;
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
collseqmb = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB);
|
collseqmb = (const unsigned char *)
|
||||||
|
_NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB);
|
||||||
nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
|
nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
|
||||||
if (nrules)
|
if (nrules)
|
||||||
{
|
{
|
||||||
|
|
@ -2750,8 +2760,8 @@ parse_bracket_exp (regexp, dfa, token, syntax, err)
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
bracket_elem_t start_elem, end_elem;
|
bracket_elem_t start_elem, end_elem;
|
||||||
char start_name_buf[BRACKET_NAME_BUF_SIZE];
|
unsigned char start_name_buf[BRACKET_NAME_BUF_SIZE];
|
||||||
char end_name_buf[BRACKET_NAME_BUF_SIZE];
|
unsigned char end_name_buf[BRACKET_NAME_BUF_SIZE];
|
||||||
reg_errcode_t ret;
|
reg_errcode_t ret;
|
||||||
int token_len2 = 0, is_range_exp = 0;
|
int token_len2 = 0, is_range_exp = 0;
|
||||||
re_token_t token2;
|
re_token_t token2;
|
||||||
|
|
@ -3023,7 +3033,7 @@ build_equiv_class (sbcset, mbcset, equiv_class_alloc, name)
|
||||||
build_equiv_class (sbcset, name)
|
build_equiv_class (sbcset, name)
|
||||||
#endif /* not RE_ENABLE_I18N */
|
#endif /* not RE_ENABLE_I18N */
|
||||||
re_bitset_ptr_t sbcset;
|
re_bitset_ptr_t sbcset;
|
||||||
const char *name;
|
const unsigned char *name;
|
||||||
{
|
{
|
||||||
#if defined _LIBC && defined RE_ENABLE_I18N
|
#if defined _LIBC && defined RE_ENABLE_I18N
|
||||||
uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
|
uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
|
||||||
|
|
@ -3031,14 +3041,14 @@ build_equiv_class (sbcset, name)
|
||||||
{
|
{
|
||||||
const int32_t *table, *indirect;
|
const int32_t *table, *indirect;
|
||||||
const unsigned char *weights, *extra, *cp;
|
const unsigned char *weights, *extra, *cp;
|
||||||
char char_buf[2];
|
unsigned char char_buf[2];
|
||||||
int32_t idx1, idx2;
|
int32_t idx1, idx2;
|
||||||
unsigned int ch;
|
unsigned int ch;
|
||||||
size_t len;
|
size_t len;
|
||||||
/* This #include defines a local function! */
|
/* This #include defines a local function! */
|
||||||
# include <locale/weight.h>
|
# include <locale/weight.h>
|
||||||
/* Calculate the index for equivalence class. */
|
/* Calculate the index for equivalence class. */
|
||||||
cp = (const unsigned char *) name;
|
cp = name;
|
||||||
table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
|
table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
|
||||||
weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
|
weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
|
||||||
_NL_COLLATE_WEIGHTMB);
|
_NL_COLLATE_WEIGHTMB);
|
||||||
|
|
@ -3047,17 +3057,17 @@ build_equiv_class (sbcset, name)
|
||||||
indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE,
|
indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE,
|
||||||
_NL_COLLATE_INDIRECTMB);
|
_NL_COLLATE_INDIRECTMB);
|
||||||
idx1 = findidx (&cp);
|
idx1 = findidx (&cp);
|
||||||
if (BE (idx1 == 0 || (const char *) cp < name + strlen (name), 0))
|
if (BE (idx1 == 0 || cp < name + strlen ((const char *) name), 0))
|
||||||
/* This isn't a valid character. */
|
/* This isn't a valid character. */
|
||||||
return REG_ECOLLATE;
|
return REG_ECOLLATE;
|
||||||
|
|
||||||
/* Build single byte matcing table for this equivalence class. */
|
/* Build single byte matcing table for this equivalence class. */
|
||||||
char_buf[1] = '\0';
|
char_buf[1] = (unsigned char) '\0';
|
||||||
len = weights[idx1];
|
len = weights[idx1];
|
||||||
for (ch = 0; ch < SBC_MAX; ++ch)
|
for (ch = 0; ch < SBC_MAX; ++ch)
|
||||||
{
|
{
|
||||||
char_buf[0] = ch;
|
char_buf[0] = ch;
|
||||||
cp = (unsigned char *) char_buf;
|
cp = char_buf;
|
||||||
idx2 = findidx (&cp);
|
idx2 = findidx (&cp);
|
||||||
/*
|
/*
|
||||||
idx2 = table[ch];
|
idx2 = table[ch];
|
||||||
|
|
@ -3093,9 +3103,9 @@ build_equiv_class (sbcset, name)
|
||||||
else
|
else
|
||||||
#endif /* _LIBC && RE_ENABLE_I18N */
|
#endif /* _LIBC && RE_ENABLE_I18N */
|
||||||
{
|
{
|
||||||
if (BE (strlen (name) != 1, 0))
|
if (BE (strlen ((const char *) name) != 1, 0))
|
||||||
return REG_ECOLLATE;
|
return REG_ECOLLATE;
|
||||||
bitset_set (sbcset, *(unsigned char *) name);
|
bitset_set (sbcset, *name);
|
||||||
}
|
}
|
||||||
return REG_NOERROR;
|
return REG_NOERROR;
|
||||||
}
|
}
|
||||||
|
|
@ -3115,11 +3125,11 @@ build_charclass (sbcset, mbcset, char_class_alloc, class_name, syntax)
|
||||||
build_charclass (sbcset, class_name, syntax)
|
build_charclass (sbcset, class_name, syntax)
|
||||||
#endif /* not RE_ENABLE_I18N */
|
#endif /* not RE_ENABLE_I18N */
|
||||||
re_bitset_ptr_t sbcset;
|
re_bitset_ptr_t sbcset;
|
||||||
const char *class_name;
|
const unsigned char *class_name;
|
||||||
reg_syntax_t syntax;
|
reg_syntax_t syntax;
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
const char *name = class_name;
|
const char *name = (const char *) class_name;
|
||||||
|
|
||||||
/* In case of REG_ICASE "upper" and "lower" match the both of
|
/* In case of REG_ICASE "upper" and "lower" match the both of
|
||||||
upper and lower cases. */
|
upper and lower cases. */
|
||||||
|
|
@ -3236,7 +3246,7 @@ build_word_op (dfa, not, err)
|
||||||
#ifdef RE_ENABLE_I18N
|
#ifdef RE_ENABLE_I18N
|
||||||
mbcset, &alloc,
|
mbcset, &alloc,
|
||||||
#endif /* RE_ENABLE_I18N */
|
#endif /* RE_ENABLE_I18N */
|
||||||
"alpha", 0);
|
(const unsigned char *) "alpha", 0);
|
||||||
|
|
||||||
if (BE (ret != REG_NOERROR, 0))
|
if (BE (ret != REG_NOERROR, 0))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue