]> git.seodisparate.com - c_simple_http/commitdiff
Fix indexing in `IF`
authorStephen Seo <seo.disparate@gmail.com>
Fri, 29 Nov 2024 03:10:17 +0000 (12:10 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Fri, 29 Nov 2024 03:10:17 +0000 (12:10 +0900)
Expressions like `{{{!IF SomeVar[2]==true}}}` should work properly now.

example_config/example.config
src/http_template.c

index 9e911c799cf9070e70191212d3dab7eb96972c19..b7328bd666751ab2899959a5c6eca7f63ed23388 100644 (file)
@@ -36,6 +36,29 @@ HTML='''
     {{{!ENDIF}}}
 {{{!ENDFOREACH}}}
 
+Again with IFs:<br>
+
+{{{!IF EachIfTest_Array[0]==true}}}
+        EachIfTest_Array entry is <b>true</b>. <br>
+{{{!ELSE}}}
+        EachIfTest_Array entry is <b>false</b>. <br>
+{{{!ENDIF}}}
+{{{!IF EachIfTest_Array[1]==true}}}
+        EachIfTest_Array entry is <b>true</b>. <br>
+{{{!ELSE}}}
+        EachIfTest_Array entry is <b>false</b>. <br>
+{{{!ENDIF}}}
+{{{!IF EachIfTest_Array[2]==true}}}
+        EachIfTest_Array entry is <b>true</b>. <br>
+{{{!ELSE}}}
+        EachIfTest_Array entry is <b>false</b>. <br>
+{{{!ENDIF}}}
+{{{!IF EachIfTest_Array[3]==true}}}
+        EachIfTest_Array entry is <b>true</b>. <br>
+{{{!ELSE}}}
+        EachIfTest_Array entry is <b>false</b>. <br>
+{{{!ENDIF}}}
+
 <br>
 <h2>Test IF/FOREACH Expr</h2>
 
index 6d0cb5701e0a7142e34dc279cf96f4428b98977e..ef17aebcbae7ade465c3d55cae00b14d7dc94912 100644 (file)
@@ -229,10 +229,12 @@ int c_simple_http_internal_parse_if_expression(
         fprintf(stderr, "ERROR No closing \"]\"! %s\n", var);
         return 1;
       } else if (
-          idx + 1 < var_size && var[idx] == '!' && var[idx + 1] == '=') {
+          idx + 2 < var_size && var[idx + 1] == '!' && var[idx + 2] == '=') {
+        ++idx;
         break;
       } else if (
-          idx + 1 < var_size && var[idx] == '=' && var[idx + 1] == '=') {
+          idx + 2 < var_size && var[idx + 1] == '=' && var[idx + 2] == '=') {
+        ++idx;
         break;
       } else {
         fprintf(stderr, "ERROR Invalid expression after \"]\"! %s\n", var);