diff -Naur mc-4.6.1.orig/src/cmd.c mc-4.6.1/src/cmd.c --- mc-4.6.1.orig/src/cmd.c 2005-05-27 16:19:18.000000000 +0200 +++ mc-4.6.1/src/cmd.c 2006-03-19 12:57:00.000000000 +0100 @@ -510,7 +510,7 @@ continue; } c = regexp_match (reg_exp_t, current_panel->dir.list[i].fname, - match_file); + match_file, 0); if (c == -1) { message (1, MSG_ERROR, _(" Malformed regular expression ")); g_free (reg_exp); diff -Naur mc-4.6.1.orig/src/dir.c mc-4.6.1/src/dir.c --- mc-4.6.1.orig/src/dir.c 2005-05-27 16:19:18.000000000 +0200 +++ mc-4.6.1/src/dir.c 2006-03-19 12:58:56.000000000 +0100 @@ -405,7 +405,7 @@ *stale_link = 1; } if (!(S_ISDIR (buf1->st_mode) || *link_to_dir) && filter - && !regexp_match (filter, dp->d_name, match_file)) + && !regexp_match (filter, dp->d_name, match_file, 0)) return 0; /* Need to grow the *list? */ diff -Naur mc-4.6.1.orig/src/ext.c mc-4.6.1/src/ext.c --- mc-4.6.1.orig/src/ext.c 2005-05-27 16:19:18.000000000 +0200 +++ mc-4.6.1/src/ext.c 2006-03-19 13:00:43.000000000 +0100 @@ -394,7 +394,7 @@ } if (content_string[0] - && regexp_match (ptr, content_string + content_shift, match_regex)) { + && regexp_match (ptr, content_string + content_shift, match_regex, 0)) { found = 1; } @@ -534,11 +534,11 @@ /* Do not transform shell patterns, you can use shell/ for * that */ - if (regexp_match (p, filename, match_regex)) + if (regexp_match (p, filename, match_regex, 0)) found = 1; } else if (!strncmp (p, "directory/", 10)) { if (S_ISDIR (mystat.st_mode) - && regexp_match (p + 10, filename, match_regex)) + && regexp_match (p + 10, filename, match_regex, 0)) found = 1; } else if (!strncmp (p, "shell/", 6)) { p += 6; diff -Naur mc-4.6.1.orig/src/find.c mc-4.6.1/src/find.c --- mc-4.6.1.orig/src/find.c 2005-05-27 16:19:18.000000000 +0200 +++ mc-4.6.1/src/find.c 2006-03-19 13:04:10.000000000 +0100 @@ -575,6 +575,7 @@ struct stat tmp_stat; static int pos; static int subdirs_left = 0; + int flags = 0; if (!h) { /* someone forces me to close dirp */ if (dirp) { @@ -586,6 +587,10 @@ dp = 0; return 1; } + + if (!(case_sense->state & C_BOOL)) + flags |= REG_ICASE; + do_search_begin: while (!dp){ @@ -662,7 +667,7 @@ g_free (tmp_name); } - if (regexp_match (find_pattern, dp->d_name, match_file)){ + if (regexp_match (find_pattern, dp->d_name, match_file, flags)){ if (content_pattern) { if (search_content (h, directory, dp->d_name)) { return 1; diff -Naur mc-4.6.1.orig/src/user.c mc-4.6.1/src/user.c --- mc-4.6.1.orig/src/user.c 2005-07-01 17:47:07.000000000 +0200 +++ mc-4.6.1/src/user.c 2006-03-19 13:05:00.000000000 +0100 @@ -412,18 +412,18 @@ break; case 'f': /* file name pattern */ p = extract_arg (p, arg, sizeof (arg)); - *condition = panel && regexp_match (arg, panel->dir.list [panel->selected].fname, match_file); + *condition = panel && regexp_match (arg, panel->dir.list [panel->selected].fname, match_file, 0); break; case 'y': /* syntax pattern */ if (edit_widget && edit_widget->syntax_type) { p = extract_arg (p, arg, sizeof (arg)); *condition = panel && - regexp_match (arg, edit_widget->syntax_type, match_normal); + regexp_match (arg, edit_widget->syntax_type, match_normal, 0); } break; case 'd': p = extract_arg (p, arg, sizeof (arg)); - *condition = panel && regexp_match (arg, panel->cwd, match_file); + *condition = panel && regexp_match (arg, panel->cwd, match_file, 0); break; case 't': p = extract_arg (p, arg, sizeof (arg)); diff -Naur mc-4.6.1.orig/src/util.c mc-4.6.1/src/util.c --- mc-4.6.1.orig/src/util.c 2005-05-27 16:19:18.000000000 +0200 +++ mc-4.6.1/src/util.c 2006-03-19 13:06:58.000000000 +0100 @@ -563,27 +563,30 @@ return g_strdup (pattern); } -int regexp_match (const char *pattern, const char *string, int match_type) +int regexp_match (const char *pattern, const char *string, int match_type, int flags) { static regex_t r; static char *old_pattern = NULL; static int old_type; + static int old_flags; int rval; char *my_pattern; - if (!old_pattern || STRCOMP (old_pattern, pattern) || old_type != match_type){ + if (!old_pattern || STRCOMP (old_pattern, pattern) || old_type != match_type || old_flags != flags){ if (old_pattern){ regfree (&r); g_free (old_pattern); old_pattern = NULL; } my_pattern = convert_pattern (pattern, match_type, 0); - if (regcomp (&r, my_pattern, REG_EXTENDED|REG_NOSUB|MC_ARCH_FLAGS)) { + + if (regcomp (&r, my_pattern, REG_EXTENDED|REG_NOSUB|MC_ARCH_FLAGS|flags)) { g_free (my_pattern); return -1; } old_pattern = my_pattern; old_type = match_type; + old_flags = flags; } rval = !regexec (&r, string, 0, NULL, 0); return rval; diff -Naur mc-4.6.1.orig/src/util.h mc-4.6.1/src/util.h --- mc-4.6.1.orig/src/util.h 2005-01-13 20:20:47.000000000 +0100 +++ mc-4.6.1/src/util.h 2006-03-19 13:07:16.000000000 +0100 @@ -116,7 +116,7 @@ extern int easy_patterns; char *convert_pattern (const char *pattern, int match_type, int do_group); -int regexp_match (const char *pattern, const char *string, int match_type); +int regexp_match (const char *pattern, const char *string, int match_type, int flags); /* Error pipes */ void open_error_pipe (void);