]> gitweb.hamatoma.de Git - crepublib/commitdiff
not pattern starts now with '-' (^ is a meta char in windows shell)
authorkawi <winfriedkappeler@atron.de>
Mon, 5 Jan 2015 12:32:48 +0000 (13:32 +0100)
committerkawi <winfriedkappeler@atron.de>
Mon, 5 Jan 2015 12:32:48 +0000 (13:32 +0100)
base/ReByteBuffer.cpp
base/ReCString.cpp
base/ReCString.hpp
cunit/cuReCString.cpp
cunit/cuReMatcher.cpp
cunit/cuReTraverser.cpp
os/ReDirTools.cpp
string/ReMatcher.cpp
string/ReMatcher.hpp

index 4194fa2df871d2a950765316569047d83b6e6cbc..0b2e27443798f30bae4c8fa7f1648ce2d9472775 100644 (file)
@@ -294,7 +294,7 @@ int ReByteBuffer::indexOf(const Byte* toFind, size_t toFindLength, int start,
        if (start >= 0 && start <= int(m_length - toFindLength)
                                && end >= (int) toFindLength && end <= (int) m_length){
                while(rc < 0 && start <= int(end - toFindLength)){
-                       if (ignoreCase ? strncasecmp(toFind, m_buffer + start, toFindLength) == 0
+                       if (ignoreCase ? memicmp(toFind, m_buffer + start, toFindLength) == 0
                                                : memcmp(toFind, m_buffer + start, toFindLength) == 0)
                                rc = start;
                        else
index a5252dd3b7a8874d1ca787f05455c600a9bc6f3b..99f6475057cc6086675e9b0860d715b1e5542ed4 100644 (file)
@@ -43,3 +43,31 @@ void replaceSubstring(char* start, size_t bufferSize, size_t lengthReplaced,
                }
        }
 }
+#if defined __linux__
+/**
+ * Compares two memory regions case insensitive.
+ *
+ * @param region1   the first region to compare
+ * @param region2   the second region to compare
+ * @return          0: both regions are equal (case insensitive)<br>
+ *                  < 0: region1 is alphabetically less than region2<br>
+ *                  > 0: region1 is alphabetically greater than region2
+ */
+int memicmp(void* region1, void* region2, int size)
+{
+    unsigned char* ptr1 = (unsigned char*) region1;
+    unsigned char* ptr2 = (unsigned char*) region2;
+    int rc = 0;
+    for (int ix = 0; ix < size; ix++){
+        unsigned char cc1 = *ptr1++;
+        unsigned char cc2 = *ptr2++;
+        int diff = tolower(cc1) - tolower(cc2);
+        if (diff != 0)
+        {
+            rc = diff;
+            break;
+        }
+    }
+    return rc;
+}
+#endif
index 7784b6d490d66ae2cd138bea5c718c54abb0ab3d..03d31a9db48e319744dde42bf0549d8d2716213a 100644 (file)
@@ -10,4 +10,7 @@
 
 void replaceSubstring(char* start, size_t bufferSize, size_t lengthReplaced,
        const char* newString);
+#if defined __linux__
+int memicmp(void* region1, void* region2, int size);
+#endif
 #endif /* RESTRING_H_ */
index 97de41f3a87f711ce86469c7f0333a4c75968fd2..5a49336a4de1fe032f41753caad38c6fb7e15363 100644 (file)
@@ -14,6 +14,7 @@ public:
        }
 private:
        void run(){
+        testMemicmp();
                testReplaceSubstring();
        }
        void testReplaceSubstring(){
@@ -31,6 +32,20 @@ private:
                replaceSubstring(buffer, 6, 0, "x");
                checkEqu("xw.ab", buffer);
        }
+    void testMemicmp(){
+               checkEqu(0, memicmp((void*) "abcd", (void*) "abcx", 3u));
+               checkEqu(0, memicmp("aBcd", "AbCx", 3));
+
+        checkEqu(1, memicmp("bbcd", "abcx", 3));
+        checkEqu(-1, memicmp("abcd", "bbcx", 3));
+
+        checkEqu(1, memicmp("Bbcd", "abcx", 3));
+        checkEqu(-1, memicmp("aBcd", "bbcx", 3));
+
+        checkEqu(1, memicmp("bbcd", "abcx", 3));
+        checkEqu(-1, memicmp("ABcd", "bbcx", 3));
+    }
+
 };
 extern void testReString(void);
 
index f29f22e67429830389426a0cc29eb0955b6dacc7..36f7f1aaa33f3f65557beedd6a5c52524585f569 100644 (file)
@@ -23,14 +23,14 @@ private:
        }
        void testPatternList(){
                RePatternList list;
-               list.set(";*.cpp;^cu*;*.hpp;", true);
+               list.set(";*.cpp;-cu*;*.hpp;", true);
                checkT(list.match("a.hpp"));
 
                checkT(list.match("a.cpp"));
                checkT(list.match("a.hpp"));
                checkF(list.match("cuA.hpp"));
                checkF(list.match("a.hpp~"));
-               list.set(" * ^*~");
+               list.set(" * -*~");
                checkT(list.match("a.hpp"));
                checkF(list.match("a.hpp~"));
        }
index 81151daf2f5aec8f9c95b304e1f17f592a253fff..13a9185d8735c069a8edf3d71a8d2cc5dcef5079 100644 (file)
@@ -111,7 +111,7 @@ private:
         ReDirOptions opts(s_empty, s_empty);
         opts.addStandardFilterOptions();
         char* argv[] = { "x", "-y1970.01.02", "-o1970.01.03", 
-            "-D5", "-d1", "-z1k", "-Z2M", "*"
+            "-D5", "-d1", "-z1k", "-Z2M", "-p;*;-*~"
         };
         ReDirEntryFilter_t filter;
         opts.programArgs().init(sizeof argv / sizeof argv[0], argv);
@@ -125,7 +125,7 @@ private:
         checkEqu(1000ll, filter.m_minSize);
         checkEqu(2*1024*1024ll, filter.m_maxSize);
         checkNN(filter.m_nodePatterns);
-        checkEqu("*", filter.m_nodePatterns->patternString());
+        checkEqu(";*;-*~", filter.m_nodePatterns->patternString());
     }
     void checkOneFile(const char* node, const char* parent, const ReHashList& hash){
         ReByteBuffer path, expected;
index 304b9aa320d46dfd7c33572a4308f5ddfc820037..0a7e61be2eccd31f142b733c7bbb3c01caa29183 100644 (file)
@@ -8,7 +8,7 @@
 #include "base/rebase.hpp"
 #include "os/reos.hpp"
 
-const char* ReDirTools::m_version = "2015.01.04";
+const char* ReDirTools::m_version = "2015.01.05";
 
 static const char* s_empty[] = { NULL };
 
@@ -46,7 +46,7 @@ const char* s_listUsage[] = {
 };
 const char* s_listExamples[] = {
     "dirtool list --min-size=10M e:\\data",
-    "dirtool list --type=f -y7d --size=10M -p;*.cpp;*.hpp;Makefile*;^*~ /home/data" ,
+    "dirtool list --type=f -y7d --size=10M -p;*.cpp;*.hpp;Makefile*;-*~ /home/data" ,
     NULL
 };
 
@@ -138,18 +138,18 @@ void ReDirOptions::addStandardFilterOptions(){
         i18n("a list of patterns for the path (without basename)\n"
             "the separator is the first character of the list\n"
             "Each pattern can contain '*' as wildcard\n"
-            "If the first character is '^' the pattern is a 'not pattern':\n"
+            "If the first character is '-' the pattern is a 'not pattern':\n"
             "A directory will be entered if at least one of the positive patterns\n"
             "and none of the 'not patterns' matches\n"
-            "examples: ';*;^*/.git/' ',*/cache/,*/temp/"),
+            "examples: ';*;-*/.git/' ',*/cache/,*/temp/"),
             'P', "path-pattern", false, NULL);
     m_programArgs.addString("nodepattern", 
         i18n("a list of patterns for the basename (name without path) separated by ';'\n"
             "Each pattern can contain '*' as wildcard\n"
-            "If the first character is '^' the pattern is a 'not pattern':\n"
+            "If the first character is '-' the pattern is a 'not pattern':\n"
             "A file will be found if at least one of the positive patterns and none\n"
             "of the 'not patterns' matches\n"
-            "examples: '*.cpp;*.hpp;Make*' '*;^*.bak;^*~"),
+            "examples: '*.cpp;*.hpp;Make*' '*;-*.bak;-*~"),
         'p', "basename-pattern", false, NULL);
     m_programArgs.addBool("quiet", 
         i18n("no additional information like runtime"),
@@ -316,7 +316,7 @@ time_t ReDirOptions::checkSize(const char* value){
  * @throws          ReOptionExecption
  */
 const char* ReDirOptions::checkPatternList(const char* value){
-    if (isalpha(*value) || *value == '*' || *value == '.')
+    if (iscsym(*value) || *value == '*' || *value == '.' || *value == '-')
          throw ReOptionException(&m_programArgs, 
             i18n("invalid separator (first character): $1 use ';' instead"), 
             value);
index e3ca4bed8c67c320d259043b0b208d60a0934135..47889520d514d727d84b515330b1366384fb9129 100644 (file)
@@ -215,7 +215,7 @@ void RePatternList::destroy(){
  * Tests whether a name matches at least one of the patterns.
  *
  * <pre>Examples:
- * list: ";*.cpp;^test*;*.hpp"
+ * list: ";*.cpp;-test*;*.hpp"
  * returns true: "a.cpp" "xy.hpp"
  * returns false: "x.img", "test.cpp"
  * </pre>
index f4fb8696bee05afca05452736425403bdc53835d..3567e9b9a05a3b7385a2d1bcc09a5a963657ba21 100644 (file)
@@ -90,7 +90,7 @@ public:
        void destroy();
        bool match(const char* pattern);
        void set(const char* patterns, bool ignoreCase = false,
-                               const char* separator = NULL, const char* notPrefix = "^");
+                               const char* separator = NULL, const char* notPrefix = "-");
     /** Returns the original pattern string.
      * @return the string describing the patterns.
      */