]> git.seodisparate.com - c_simple_http/commitdiff
Add "output" size parameter to http_template fn
authorStephen Seo <seo.disparate@gmail.com>
Thu, 5 Sep 2024 07:12:50 +0000 (16:12 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Thu, 5 Sep 2024 07:12:50 +0000 (16:12 +0900)
src/http_template.c
src/http_template.h
src/test.c

index 5b6e21d44cc81a5421a55c99539b44cd50210f49..012ed7a5a0d22584981682d9e3887bee8b111cb4 100644 (file)
@@ -98,7 +98,11 @@ int c_simple_http_internal_ends_with_FILE(const char *c_string) {
 
 char *c_simple_http_path_to_generated(
     const char *path,
-    const C_SIMPLE_HTTP_HTTPTemplates *templates) {
+    const C_SIMPLE_HTTP_HTTPTemplates *templates,
+    size_t *output_buf_size) {
+  if (output_buf_size) {
+    *output_buf_size = 0;
+  }
   C_SIMPLE_HTTP_ParsedConfig *wrapped_hash_map =
     simple_archiver_hash_map_get(templates->hash_map, path, strlen(path) + 1);
   if (!wrapped_hash_map) {
@@ -157,7 +161,7 @@ char *c_simple_http_path_to_generated(
   size_t delimeter_count = 0;
 
   // xxxx xxx0 - Initial state, no delimeter reached.
-  // xxxx xxx1 - Three "{" delimeters reached.
+  // xxxx xxx1 - Three left-curly-brace delimeters reached.
   unsigned int state = 0;
 
   for (; idx < html_buf_size; ++idx) {
@@ -321,11 +325,17 @@ char *c_simple_http_path_to_generated(
       return NULL;
     }
     to_fill.html[final_size] = 0;
+    if (output_buf_size) {
+      *output_buf_size = final_size;
+    }
     return to_fill.html;
   } else {
     // Prevent cleanup fn from "free"ing html_buf and return it verbatim.
     char *buf = html_buf;
     html_buf = NULL;
+    if (output_buf_size) {
+      *output_buf_size = html_buf_size;
+    }
     return buf;
   }
 }
index a6c43910a991fac50ed174dd1c27e5706168d2a1..e7a9da94821f5cdaa16cc2fe89362561e6c513c5 100644 (file)
 
 #include "http.h"
 
+// Standard library includes.
+#include <stddef.h>
+
 // Returns non-NULL on success, which must be free'd after use.
 // Takes a path string and templates and returns the generated HTML.
+// If "output_buf_size" is non-NULL, it will be set to the size of the returned
+// buffer.
 char *c_simple_http_path_to_generated(
   const char *path,
-  const C_SIMPLE_HTTP_HTTPTemplates *templates);
+  const C_SIMPLE_HTTP_HTTPTemplates *templates,
+  size_t *output_buf_size);
 
 #endif
 
index 3adba4f68c15e005dc1f3f49d926c2fa7bb2a16e..fb2cb0d1a90902baa584b667deb245147b08f64e 100644 (file)
@@ -248,10 +248,13 @@ int main(void) {
     );
     ASSERT_TRUE(config.paths != NULL);
 
+    size_t output_buf_size;
+
     __attribute__((cleanup(simple_archiver_helper_cleanup_c_string)))
-    char *buf = c_simple_http_path_to_generated("/", &config);
+    char *buf = c_simple_http_path_to_generated("/", &config, &output_buf_size);
     ASSERT_TRUE(buf != NULL);
     ASSERT_TRUE(strcmp(buf, "<h1>Test</h1>") == 0);
+    CHECK_TRUE(output_buf_size == 14);
     simple_archiver_helper_cleanup_c_string(&buf);
 
     __attribute__((cleanup(test_internal_cleanup_delete_temporary_file)))
@@ -283,7 +286,7 @@ int main(void) {
     );
     ASSERT_TRUE(config.paths != NULL);
 
-    buf = c_simple_http_path_to_generated("/", &config);
+    buf = c_simple_http_path_to_generated("/", &config, &output_buf_size);
     ASSERT_TRUE(buf != NULL);
     printf("%s\n", buf);
     ASSERT_TRUE(
@@ -291,6 +294,7 @@ int main(void) {
         buf,
         "<h1> Some text. </h1><br><h2> More text. </h2>")
       == 0);
+    CHECK_TRUE(output_buf_size == 47);
     simple_archiver_helper_cleanup_c_string(&buf);
 
     __attribute__((cleanup(test_internal_cleanup_delete_temporary_file)))
@@ -345,7 +349,7 @@ int main(void) {
     );
     ASSERT_TRUE(config.paths != NULL);
 
-    buf = c_simple_http_path_to_generated("/", &config);
+    buf = c_simple_http_path_to_generated("/", &config, &output_buf_size);
     ASSERT_TRUE(buf != NULL);
     printf("%s\n", buf);
     ASSERT_TRUE(
@@ -353,6 +357,7 @@ int main(void) {
         buf,
         "<h1> testVar text. </h1><br><h2> testVar2 text. </h2>")
       == 0);
+    CHECK_TRUE(output_buf_size == 53);
     simple_archiver_helper_cleanup_c_string(&buf);
 
     __attribute__((cleanup(test_internal_cleanup_delete_temporary_file)))
@@ -427,7 +432,7 @@ int main(void) {
     );
     ASSERT_TRUE(config.paths != NULL);
 
-    buf = c_simple_http_path_to_generated("/", &config);
+    buf = c_simple_http_path_to_generated("/", &config, &output_buf_size);
     ASSERT_TRUE(buf != NULL);
     printf("%s\n", buf);
     ASSERT_TRUE(
@@ -435,6 +440,7 @@ int main(void) {
         buf,
         "<h1> some test text in test var file. </h1>")
       == 0);
+    CHECK_TRUE(output_buf_size == 43);
     simple_archiver_helper_cleanup_c_string(&buf);
   }