Title: [213768] trunk/Source/_javascript_Core
Revision
213768
Author
[email protected]
Date
2017-03-11 22:27:49 -0800 (Sat, 11 Mar 2017)

Log Message

Allow regular expressions to be used when selecting a process name in JSC config file
https://bugs.webkit.org/show_bug.cgi?id=169495

Reviewed by Saam Barati.

Only added regular _expression_ selectors for unix like platforms.

* runtime/ConfigFile.cpp:
(JSC::ConfigFileScanner::tryConsumeRegExPattern):
(JSC::ConfigFile::parse):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (213767 => 213768)


--- trunk/Source/_javascript_Core/ChangeLog	2017-03-12 06:21:05 UTC (rev 213767)
+++ trunk/Source/_javascript_Core/ChangeLog	2017-03-12 06:27:49 UTC (rev 213768)
@@ -1,3 +1,16 @@
+2017-03-11  Michael Saboff  <[email protected]>
+
+        Allow regular expressions to be used when selecting a process name in JSC config file
+        https://bugs.webkit.org/show_bug.cgi?id=169495
+
+        Reviewed by Saam Barati.
+
+        Only added regular _expression_ selectors for unix like platforms.
+
+        * runtime/ConfigFile.cpp:
+        (JSC::ConfigFileScanner::tryConsumeRegExPattern):
+        (JSC::ConfigFile::parse):
+
 2017-03-11  Jon Lee  <[email protected]>
 
         WebGPU prototype - Front-End

Modified: trunk/Source/_javascript_Core/runtime/ConfigFile.cpp (213767 => 213768)


--- trunk/Source/_javascript_Core/runtime/ConfigFile.cpp	2017-03-12 06:21:05 UTC (rev 213767)
+++ trunk/Source/_javascript_Core/runtime/ConfigFile.cpp	2017-03-12 06:27:49 UTC (rev 213768)
@@ -37,6 +37,7 @@
 #include <wtf/text/StringBuilder.h>
 
 #if OS(UNIX) || OS(DARWIN)
+#include <regex.h>
 #include <unistd.h>
 #endif
 
@@ -136,6 +137,32 @@
         return nullptr;
     }
 
+    char* tryConsumeRegExPattern(bool& ignoreCase)
+    {
+        if (!fillBufferIfNeeded())
+            return nullptr;
+
+        if (*m_srcPtr != '/')
+            return nullptr;
+
+        char* stringStart = m_srcPtr + 1;
+
+        char* stringEnd = strchr(stringStart, '/');
+        if (stringEnd) {
+            *stringEnd = '\0';
+            m_srcPtr = stringEnd + 1;
+            if (*m_srcPtr == 'i') {
+                ignoreCase = true;
+                m_srcPtr++;
+            } else
+                ignoreCase = false;
+
+            return stringStart;
+        }
+
+        return nullptr;
+    }
+    
     char* tryConsumeUpto(bool& foundChar, char c)
     {
         if (!fillBufferIfNeeded())
@@ -339,13 +366,31 @@
     };
 
     auto parsePredicate = [&](bool& predicateMatches, const char* matchValue) {
-        char* predicateValue = nullptr;
-        if (scanner.tryConsume("==")
-            && (predicateValue = scanner.tryConsumeString()) && matchValue) {
+        if (scanner.tryConsume("==")) {
+            char* predicateValue = nullptr;
+            if ((predicateValue = scanner.tryConsumeString()) && matchValue) {
                 predicateMatches = !strcmp(predicateValue, matchValue);
                 return true;
+            }
         }
+#if OS(UNIX) || OS(DARWIN)
+        else if (scanner.tryConsume("=~")) {
+            char* predicateRegExString = nullptr;
+            bool ignoreCase { false };
+            if ((predicateRegExString = scanner.tryConsumeRegExPattern(ignoreCase)) && matchValue) {
+                regex_t predicateRegEx;
+                int regexFlags = REG_EXTENDED;
+                if (ignoreCase)
+                    regexFlags |= REG_ICASE;
+                if (regcomp(&predicateRegEx, predicateRegExString, regexFlags))
+                    return false;
 
+                predicateMatches = !regexec(&predicateRegEx, matchValue, 0, nullptr, 0);
+                return true;
+            }
+        }
+#endif
+
         return false;
     };
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to