-- 
---------------------------------------------------------------------
 Enrico Weigelt    ==   metux IT service - http://www.metux.de/
---------------------------------------------------------------------
 Please visit the OpenSource QM Taskforce:
        http://wiki.metux.de/public/OpenSource_QM_Taskforce
 Patches / Fixes for a lot dozens of packages in dozens of versions:
        http://patches.metux.de/
---------------------------------------------------------------------
#
# This is a patch for the find file stuff, from Gentoo.
# 
# (not completely sure what it *really* does, but it seems to 
# have something to do w/ case sensitivity)
#
# Source:       Gentoo Portage
# Reference:    mc-4.6.1
# Submit-By:    Enrico Weigelt, metux IT service <weig...@metux.de>
# Submit-Date:  2008-12-16
# State:        new
#
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);
_______________________________________________
Mc-devel mailing list
http://mail.gnome.org/mailman/listinfo/mc-devel

Reply via email to