mhl implement simple globbing
[mmh] / uip / mhl.c
index b8213b0..76d2335 100644 (file)
--- a/uip/mhl.c
+++ b/uip/mhl.c
@@ -598,6 +598,34 @@ process(char *fname, int ofilen, int ofilec)
                c1->c_flags &= ~HDROUTPUT;
 }
 
                c1->c_flags &= ~HDROUTPUT;
 }
 
+static boolean
+simplematch(char *pattern, char *b)
+{
+       char *match = strrchr(pattern, '*');
+       char repl;
+       boolean ret;
+
+       /* check if pattern ends with a * and is not escaped witch a \ */
+       if (!match || match[1] || (match > pattern && match[-1] == '\\')) {
+               if (!match || match[1]) {
+                       return mh_strcasecmp(pattern, b) == 0;
+               }
+               match[0] = '\0';
+               match[-1] = '*';
+               ret = mh_strcasecmp(pattern, b)==0;
+               match[-1] = '\\';
+               match[0] = '*';
+               return ret;
+       }
+
+       repl = b[match-pattern];
+       b[match-pattern] = '\0';
+       *match = '\0';
+       ret = (mh_strcasecmp(pattern, b) == 0);
+       b[match-pattern] = repl;
+       *match = '*';
+       return ret;
+}
 
 static void
 mhlfile(FILE *fp, char *mname, int ofilen, int ofilec)
 
 static void
 mhlfile(FILE *fp, char *mname, int ofilen, int ofilec)
@@ -626,7 +654,7 @@ mhlfile(FILE *fp, char *mname, int ofilen, int ofilec)
                switch (state = m_getfld2(state, &f, fp)) {
                case FLD2:
                        for (ip = ignores; *ip; ip++)
                switch (state = m_getfld2(state, &f, fp)) {
                case FLD2:
                        for (ip = ignores; *ip; ip++)
-                               if (mh_strcasecmp(f.name, *ip)==0) {
+                               if (simplematch(*ip, f.name)) {
                                        break;
                                }
                        if (*ip) {
                                        break;
                                }
                        if (*ip) {