diff -up mc-4.7.3/lib/search/glob.c.dirname mc-4.7.3/lib/search/glob.c --- mc-4.7.3/lib/search/glob.c.dirname 2010-07-05 20:32:41.000000000 +0200 +++ mc-4.7.3/lib/search/glob.c 2010-09-02 17:21:07.174555656 +0200 @@ -118,14 +118,25 @@ mc_search__translate_replace_glob_to_reg { GString *buff = g_string_new (""); int cnt = '0'; - + gboolean escaped_mode = FALSE; while (*str) { char c = *str++; switch (c) { + case '\\': + if (!escaped_mode) + { + escaped_mode = TRUE; + } + g_string_append_c (buff, c); + continue; case '*': case '?': + if (!escaped_mode) + { g_string_append_c (buff, '\\'); c = ++cnt; + continue; + } break; /* breaks copying: mc uses "\0" internally, it must not be changed */ /*case '\\':*/ @@ -134,6 +145,7 @@ mc_search__translate_replace_glob_to_reg break; } g_string_append_c (buff, c); + escaped_mode = FALSE; } return buff; } @@ -170,7 +182,6 @@ mc_search__run_glob (mc_search_t * lc_mc /* --------------------------------------------------------------------------------------------- */ - GString * mc_search_glob_prepare_replace_str (mc_search_t * lc_mc_search, GString * replace_str) { diff -up mc-4.7.3/lib/search/regex.c.dirname mc-4.7.3/lib/search/regex.c --- mc-4.7.3/lib/search/regex.c.dirname 2010-07-05 20:32:41.000000000 +0200 +++ mc-4.7.3/lib/search/regex.c 2010-09-02 17:19:26.836553568 +0200 @@ -320,7 +320,7 @@ mc_search_regex__get_max_num_of_replace_ gsize loop; for (loop = 0; loop < len - 1; loop++) { - if (str[loop] == '\\' && (str[loop + 1] & (char) 0xf0) == 0x30 /* 0-9 */ ) + if (str[loop] == '\\' && g_ascii_isdigit(str[loop + 1]) ) { if (strutils_is_char_escaped (str, &str[loop])) continue; @@ -421,9 +421,9 @@ mc_search_regex__process_replace_str (co return -1; } - if ((*(curr_str + 1) & (char) 0xf0) == 0x30) + if ( g_ascii_isdigit(*(curr_str + 1))) { - ret = *(curr_str + 1) - '0'; + ret = g_ascii_digit_value (*(curr_str + 1)); *skip_len = 2; /* \\ and one digit */ return ret; } diff -up mc-4.7.3/lib/strutil/strescape.c.dirname mc-4.7.3/lib/strutil/strescape.c --- mc-4.7.3/lib/strutil/strescape.c.dirname 2010-07-05 20:32:41.000000000 +0200 +++ mc-4.7.3/lib/strutil/strescape.c 2010-09-02 17:19:26.835554197 +0200 @@ -39,7 +39,7 @@ static const char ESCAPE_SHELL_CHARS[] = " !#$%()&{}[]`?|<>;*\\\"'"; static const char ESCAPE_REGEX_CHARS[] = "^!#$%()&{}[]`?|<>;*.\\"; -static const char ESCAPE_GLOB_CHARS[] = "$*\\"; +static const char ESCAPE_GLOB_CHARS[] = "$*\\?"; /*** file scope functions ************************************************************************/