lib/search/regex.c: use [] to get char in string.

This commit is contained in:
Andrew Borodin 2014-12-31 19:59:20 +03:00
parent 2c7dfe7341
commit fa7d2ea110

View File

@ -381,17 +381,18 @@ mc_search_regex__replace_handle_esc_seq (const GString * replace_str, const gsiz
gsize * skip_len, int *ret) gsize * skip_len, int *ret)
{ {
char *curr_str = &(replace_str->str[current_pos]); char *curr_str = &(replace_str->str[current_pos]);
char c = *(curr_str + 1); char c = curr_str[1];
if (replace_str->len > current_pos + 2) if (replace_str->len > current_pos + 2)
{ {
if (c == '{') if (c == '{')
{ {
for (*skip_len = 2; /* \{ */ for (*skip_len = 2; /* \{ */
current_pos + *skip_len < replace_str->len current_pos + *skip_len < replace_str->len && curr_str[*skip_len] >= '0'
&& *(curr_str + *skip_len) >= '0' && curr_str[*skip_len] <= '7'; (*skip_len)++)
&& *(curr_str + *skip_len) <= '7'; (*skip_len)++); ;
if (current_pos + *skip_len < replace_str->len && *(curr_str + *skip_len) == '}')
if (current_pos + *skip_len < replace_str->len && curr_str[*skip_len] == '}')
{ {
(*skip_len)++; (*skip_len)++;
*ret = REPLACE_PREPARE_T_ESCAPE_SEQ; *ret = REPLACE_PREPARE_T_ESCAPE_SEQ;
@ -407,13 +408,15 @@ mc_search_regex__replace_handle_esc_seq (const GString * replace_str, const gsiz
if (c == 'x') if (c == 'x')
{ {
*skip_len = 2; /* \x */ *skip_len = 2; /* \x */
c = *(curr_str + 2); c = curr_str[2];
if (c == '{') if (c == '{')
{ {
for (*skip_len = 3; /* \x{ */ for (*skip_len = 3; /* \x{ */
current_pos + *skip_len < replace_str->len current_pos + *skip_len < replace_str->len
&& g_ascii_isxdigit ((guchar) * (curr_str + *skip_len)); (*skip_len)++); && g_ascii_isxdigit ((guchar) curr_str[*skip_len]); (*skip_len)++)
if (current_pos + *skip_len < replace_str->len && *(curr_str + *skip_len) == '}') ;
if (current_pos + *skip_len < replace_str->len && curr_str[*skip_len] == '}')
{ {
(*skip_len)++; (*skip_len)++;
*ret = REPLACE_PREPARE_T_ESCAPE_SEQ; *ret = REPLACE_PREPARE_T_ESCAPE_SEQ;
@ -433,7 +436,7 @@ mc_search_regex__replace_handle_esc_seq (const GString * replace_str, const gsiz
} }
else else
{ {
c = *(curr_str + 3); c = curr_str[3];
if (!g_ascii_isxdigit ((guchar) c)) if (!g_ascii_isxdigit ((guchar) c))
*skip_len = 3; /* \xH */ *skip_len = 3; /* \xH */
else else
@ -467,8 +470,8 @@ mc_search_regex__process_replace_str (const GString * replace_str, const gsize c
*skip_len = 0; *skip_len = 0;
if ((*curr_str == '$') && (*(curr_str + 1) == '{') && ((*(curr_str + 2) & (char) 0xf0) == 0x30) if (replace_str->len > current_pos + 2 && curr_str[0] == '$' && curr_str[1] == '{'
&& (replace_str->len > current_pos + 2)) && (curr_str[2] & (char) 0xf0) == 0x30)
{ {
char *tmp_str; char *tmp_str;
@ -480,9 +483,10 @@ mc_search_regex__process_replace_str (const GString * replace_str, const gsize c
for (*skip_len = 0; for (*skip_len = 0;
current_pos + *skip_len + 2 < replace_str->len current_pos + *skip_len + 2 < replace_str->len
&& (*(curr_str + 2 + *skip_len) & (char) 0xf0) == 0x30; (*skip_len)++); && (curr_str[2 + *skip_len] & (char) 0xf0) == 0x30; (*skip_len)++)
;
if (*(curr_str + 2 + *skip_len) != '}') if (curr_str[2 + *skip_len] != '}')
return REPLACE_PREPARE_T_NOTHING_SPECIAL; return REPLACE_PREPARE_T_NOTHING_SPECIAL;
tmp_str = g_strndup (curr_str + 2, *skip_len); tmp_str = g_strndup (curr_str + 2, *skip_len);
@ -496,7 +500,7 @@ mc_search_regex__process_replace_str (const GString * replace_str, const gsize c
return ret; /* capture buffer index >= 0 */ return ret; /* capture buffer index >= 0 */
} }
if ((*curr_str == '\\') && (replace_str->len > current_pos + 1)) if (curr_str[0] == '\\' && replace_str->len > current_pos + 1)
{ {
if (strutils_is_char_escaped (replace_str->str, curr_str)) if (strutils_is_char_escaped (replace_str->str, curr_str))
{ {
@ -504,9 +508,9 @@ mc_search_regex__process_replace_str (const GString * replace_str, const gsize c
return REPLACE_PREPARE_T_NOTHING_SPECIAL; return REPLACE_PREPARE_T_NOTHING_SPECIAL;
} }
if (g_ascii_isdigit (*(curr_str + 1))) if (g_ascii_isdigit (curr_str[1]))
{ {
ret = g_ascii_digit_value (*(curr_str + 1)); /* capture buffer index >= 0 */ ret = g_ascii_digit_value (curr_str[1]); /* capture buffer index >= 0 */
*skip_len = 2; /* \\ and one digit */ *skip_len = 2; /* \\ and one digit */
return ret; return ret;
} }
@ -516,7 +520,8 @@ mc_search_regex__process_replace_str (const GString * replace_str, const gsize c
ret = REPLACE_PREPARE_T_REPLACE_FLAG; ret = REPLACE_PREPARE_T_REPLACE_FLAG;
*skip_len += 2; *skip_len += 2;
switch (*(curr_str + 1))
switch (curr_str[1])
{ {
case 'U': case 'U':
*replace_flags |= REPLACE_T_UPP_TRANSFORM; *replace_flags |= REPLACE_T_UPP_TRANSFORM;
@ -615,6 +620,7 @@ mc_search_regex__process_escape_sequence (GString * dest_str, const char *from,
len = strlen (from); len = strlen (from);
if (len == 0) if (len == 0)
return; return;
if (from[i] == '{') if (from[i] == '{')
i++; i++;
if (i >= len) if (i >= len)