kwo pushed a commit to branch master.

http://git.enlightenment.org/e16/e16.git/commit/?id=d045a86c5c71466ea95111e29e7ecf0d41043c6a

commit d045a86c5c71466ea95111e29e7ecf0d41043c6a
Author: Kim Woelders <[email protected]>
Date:   Sat Nov 13 08:07:10 2021 +0100

    Implement matchregexp() using fnmatch()
---
 src/regex.c | 91 +++----------------------------------------------------------
 1 file changed, 4 insertions(+), 87 deletions(-)

diff --git a/src/regex.c b/src/regex.c
index 4e377e5a..46d22ddb 100644
--- a/src/regex.c
+++ b/src/regex.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various 
contributors
+ * Copyright (C) 2021 Kim Woelders
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to
@@ -22,97 +23,13 @@
  */
 #include "E.h"
 
-static int
-isafter(int p, const char *s1, const char *s2)
-{
-   int                 i, j;
-   int                 len, len2;
-   int                 match;
-
-   len = strlen(s1);
-   len2 = strlen(s2);
-
-   match = 0;
-   for (i = p; i < len; i++)
-     {
-       if (s1[i] == s2[0])
-         {
-            match = 1;
-            for (j = 0; j < len2; j++)
-              {
-                 if ((i + j) >= len)
-                    return -1;
-                 if (s1[i + j] != s2[j])
-                    match = 0;
-              }
-         }
-       if (match)
-          return i + len2;
-     }
-   return -1;
-}
+#include <fnmatch.h>
 
 int
 matchregexp(const char *rx, const char *s)
 {
-   int                 i, l, m;
-   int                 len, lenr;
-   int                 match;
-   char                rx2[1024];
-
-   if (!s)
-      return 0;
-   if (!rx)
-      return 0;
-
-   len = strlen(s);
-   l = 0;
-   lenr = 0;
-   match = 1;
-   if ((strcmp(rx, "*") || rx[0] == 0) && s[0] == 0)
+   if (!rx || !s)
       return 0;
 
-   if (rx[0] != '*')
-     {
-       m = 0;
-       while ((rx[l] != '*') && (rx[l]) && (m < 1023))
-          rx2[m++] = rx[l++];
-       rx2[m] = 0;
-       lenr = strlen(rx2);
-       if (lenr > len)
-          return 0;
-       for (i = 0; i < lenr; i++)
-         {
-            if (s[i] != rx[i])
-               return 0;
-         }
-     }
-   if ((!rx[l]) && (s[lenr]))
-      return 0;
-   for (i = lenr; i < len;)
-     {
-       if (rx[l])
-          l++;
-       if (rx[l])
-         {
-            m = 0;
-            while ((rx[l] != '*') && (rx[l]) && (m < 1023))
-               rx2[m++] = rx[l++];
-            rx2[m] = 0;
-            i = isafter(i, s, rx2);
-            if (i < 0)
-               return 0;
-         }
-       else
-         {
-            // We arrived at the end of the regex BUT if it doesn't
-            // end with the wildcard * and there are more chars
-            // in s remaining to be matched, we should return 0
-            if ((i < len) && (rx[l - 1] != '*'))
-               return 0;
-            else
-               return match;
-         }
-     }
-   return match;
+   return !fnmatch(rx, s, 0);
 }

-- 


Reply via email to