mirror of
https://github.com/MidnightCommander/mc
synced 2025-01-18 09:19:24 +03:00
lib/search/regex.c: use [] to get char in string.
This commit is contained in:
parent
2c7dfe7341
commit
fa7d2ea110
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user