Description: Fixes case-sensitive bug in find dialog
Status to upstream: Not know, need info, need view CVS
Source URL and bug desc.: http://www.freebsd.org/cgi/query-pr.cgi?pr=99428

diff -Naur mc-mod.orig/src/cmd.c mc-mod/src/cmd.c
--- mc-mod.orig/src/cmd.c	2007-02-06 21:24:09.000000000 +0100
+++ mc-mod/src/cmd.c	2007-02-06 21:24:57.000000000 +0100
@@ -506,7 +506,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-mod.orig/src/dir.c mc-mod/src/dir.c
--- mc-mod.orig/src/dir.c	2007-02-06 21:24:09.000000000 +0100
+++ mc-mod/src/dir.c	2007-02-06 21:24:57.000000000 +0100
@@ -322,7 +322,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-mod.orig/src/ext.c mc-mod/src/ext.c
--- mc-mod.orig/src/ext.c	2007-02-06 21:24:09.000000000 +0100
+++ mc-mod/src/ext.c	2007-02-06 21:24:57.000000000 +0100
@@ -393,7 +393,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;
     }
 
@@ -517,11 +517,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-mod.orig/src/find.c mc-mod/src/find.c
--- mc-mod.orig/src/find.c	2007-02-06 21:24:09.000000000 +0100
+++ mc-mod/src/find.c	2007-02-06 21:24:57.000000000 +0100
@@ -613,6 +613,7 @@
     struct stat tmp_stat;
     static int pos;
     static int subdirs_left = 0;
+    int cflags = 0;
 
     if (!h) { /* someone forces me to close dirp */
 	if (dirp) {
@@ -624,6 +625,9 @@
         dp = 0;
 	return 1;
     }
+
+    if (case_sensitive == 0)
+	cflags |= REG_ICASE;
  do_search_begin:
     while (!dp){
 	
@@ -700,7 +704,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, cflags)){
 	if (content_pattern) {
 	    if (search_content (h, directory, dp->d_name)) {
 		return 1;
diff -Naur mc-mod.orig/src/subshell.c mc-mod/src/subshell.c
--- mc-mod.orig/src/subshell.c	2007-02-06 21:24:09.000000000 +0100
+++ mc-mod/src/subshell.c	2007-02-06 21:24:57.000000000 +0100
@@ -395,6 +395,8 @@
 	    subshell_type = ZSH;
 	else if (strstr (shell, "/tcsh"))
 	    subshell_type = TCSH;
+	else if (strstr (shell, "/csh"))
+	    subshell_type = TCSH;
 	else if (strstr (shell, "/bash") || getenv ("BASH"))
 	    subshell_type = BASH;
 	else {
diff -Naur mc-mod.orig/src/user.c mc-mod/src/user.c
--- mc-mod.orig/src/user.c	2007-02-06 21:24:09.000000000 +0100
+++ mc-mod/src/user.c	2007-02-06 21:24:57.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-mod.orig/src/util.c mc-mod/src/util.c
--- mc-mod.orig/src/util.c	2007-02-06 21:24:09.000000000 +0100
+++ mc-mod/src/util.c	2007-02-06 21:28:07.000000000 +0100
@@ -581,25 +581,28 @@
 }
 
 int
-regexp_match (const char *pattern, const char *string, int match_type)
+regexp_match (const char *pattern, const char *string, int match_type, int cflags)
 {
     static regex_t r;
     static char *old_pattern = NULL;
     static int old_type;
+    static int old_cflags;
     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 || cflags != old_cflags){
 	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|cflags)) {
 	    g_free (my_pattern);
 	    return -1;
 	}
+	old_cflags = cflags;
 	old_pattern = my_pattern;
 	old_type = match_type;
     }
diff -Naur mc-mod.orig/src/util.h mc-mod/src/util.h
--- mc-mod.orig/src/util.h	2007-02-06 21:24:09.000000000 +0100
+++ mc-mod/src/util.h	2007-02-06 21:24:57.000000000 +0100
@@ -126,7 +126,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 cflags);
 
 /* Error pipes */
 void open_error_pipe (void);
