Dear Squid Devs,

In order to simplify an already complicated squid config I needed a
negative boolean check like this:
if ${process_number} != 1
 ... do something in case this is NOT kid1
endif

Here's the patch, in case you find it interesting for inclusion in the trunk:
===[cut]===
--- src/cache_cf.cc 2014-03-07 18:18:30.041298048 +0200
+++ src/cache_cf.cc 2014-03-07 18:19:48.773297871 +0200
@@ -429,9 +429,10 @@
     } else if (strcmp(expr, "false") == 0) {
         return false;
     } else if (const char* equation = strchr(expr, '=')) {
+        int positive = (int) expr[equation - expr - 1] != '!';
         const char* rvalue = skip_ws(equation + 1);
-        char* lvalue = (char*)xmalloc(equation - expr + 1);
-        xstrncpy(lvalue, expr, equation - expr + 1);
+        char* lvalue = (char*)xmalloc(equation - expr + positive);
+        xstrncpy(lvalue, expr, equation - expr + positive);
         trim_trailing_ws(lvalue);

         long number1;
@@ -442,7 +443,7 @@
             fatalf("String is not a integer number: '%s'\n", rvalue);

         xfree(lvalue);
-        return number1 == number2;
+        return positive == 1 ? number1 == number2 : number1 != number2;
     }
     fatalf("Unable to evaluate expression '%s'\n", expr);
     return false; // this place cannot be reached
===[cut]===

Hope this helps.

Best,
Niki

P.S. Pls. excuse my coding style, I didn't do any c++ since early 90s
:) I don't mind if you rewrite it completely :)

Reply via email to