char *c_simple_http_path_to_generated(
const char *path,
const C_SIMPLE_HTTP_HTTPTemplates *templates,
- size_t *output_buf_size) {
+ size_t *output_buf_size,
+ SDArchiverLinkedList **files_list_out) {
if (output_buf_size) {
*output_buf_size = 0;
}
+ if (files_list_out) {
+ *files_list_out = simple_archiver_list_init();
+ }
size_t path_len_size_t = strlen(path) + 1;
if (path_len_size_t > 0xFFFFFFFF) {
fprintf(stderr, "ERROR: Path string is too large!\n");
}
html_buf[html_file_size] = 0;
html_buf_size = (size_t)html_file_size;
+ if (files_list_out) {
+ char *html_filename_copy = malloc(strlen(html_filename) + 1);
+ strcpy(html_filename_copy, html_filename);
+ simple_archiver_list_add(*files_list_out, html_filename_copy, NULL);
+ }
} else {
char *stored_html =
simple_archiver_hash_map_get(wrapped_hash_map->hash_map, "HTML", 5);
value_c_str);
return NULL;
}
+ if (files_list_out) {
+ char *variable_filename = malloc(strlen(value_c_str) + 1);
+ strcpy(variable_filename, value_c_str);
+ simple_archiver_list_add(
+ *files_list_out, variable_filename, NULL);
+ }
} else {
// Variable data is "value_c_str".
template_node =
// 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.
+// Third-party includes.
+#include <SimpleArchiver/src/data_structures/linked_list.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. If
+// "files_list_out" is non-NULL, then the pointer will be set to a newly
+// allocated linked-list containing filenames used in generating the HTML. This
+// newly allocated linked-list must be freed after use.
char *c_simple_http_path_to_generated(
const char *path,
const C_SIMPLE_HTTP_HTTPTemplates *templates,
- size_t *output_buf_size);
+ size_t *output_buf_size,
+ SDArchiverLinkedList **files_list_out);
#endif
#include <stdint.h>
// Local includes.
+#include "SimpleArchiver/src/data_structures/linked_list.h"
#include "config.h"
#include "http_template.h"
#include "http.h"
}
}
+int test_internal_check_matching_string_in_list(void *value, void *ud) {
+ if (value && ud) {
+ if (strcmp(value, ud) == 0) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
int main(void) {
// Test config.
{
size_t output_buf_size;
+ __attribute__((cleanup(simple_archiver_list_free)))
+ SDArchiverLinkedList *filenames_list = NULL;
+
__attribute__((cleanup(simple_archiver_helper_cleanup_c_string)))
- char *buf = c_simple_http_path_to_generated("/", &config, &output_buf_size);
+ char *buf = c_simple_http_path_to_generated(
+ "/", &config, &output_buf_size, &filenames_list);
ASSERT_TRUE(buf != NULL);
ASSERT_TRUE(strcmp(buf, "<h1>Test</h1>") == 0);
CHECK_TRUE(output_buf_size == 13);
+ CHECK_TRUE(filenames_list->count == 0);
simple_archiver_helper_cleanup_c_string(&buf);
+ simple_archiver_list_free(&filenames_list);
__attribute__((cleanup(test_internal_cleanup_delete_temporary_file)))
const char *test_http_template_filename2 =
);
ASSERT_TRUE(config.paths != NULL);
- buf = c_simple_http_path_to_generated("/", &config, &output_buf_size);
+ buf = c_simple_http_path_to_generated(
+ "/", &config, &output_buf_size, &filenames_list);
ASSERT_TRUE(buf != NULL);
printf("%s\n", buf);
ASSERT_TRUE(
"<h1> Some text. </h1><br><h2> More text. </h2>")
== 0);
CHECK_TRUE(output_buf_size == 46);
+ CHECK_TRUE(filenames_list->count == 0);
simple_archiver_helper_cleanup_c_string(&buf);
+ simple_archiver_list_free(&filenames_list);
__attribute__((cleanup(test_internal_cleanup_delete_temporary_file)))
const char *test_http_template_filename3 =
);
ASSERT_TRUE(config.paths != NULL);
- buf = c_simple_http_path_to_generated("/", &config, &output_buf_size);
+ buf = c_simple_http_path_to_generated(
+ "/", &config, &output_buf_size, &filenames_list);
ASSERT_TRUE(buf != NULL);
printf("%s\n", buf);
ASSERT_TRUE(
"<h1> testVar text. </h1><br><h2> testVar2 text. </h2>")
== 0);
CHECK_TRUE(output_buf_size == 53);
+ CHECK_TRUE(filenames_list->count == 1);
+ CHECK_TRUE(simple_archiver_list_get(
+ filenames_list,
+ test_internal_check_matching_string_in_list,
+ (void*)test_http_template_html_filename)
+ != NULL);
simple_archiver_helper_cleanup_c_string(&buf);
+ simple_archiver_list_free(&filenames_list);
__attribute__((cleanup(test_internal_cleanup_delete_temporary_file)))
const char *test_http_template_filename4 =
);
ASSERT_TRUE(config.paths != NULL);
- buf = c_simple_http_path_to_generated("/", &config, &output_buf_size);
+ buf = c_simple_http_path_to_generated(
+ "/", &config, &output_buf_size, &filenames_list);
ASSERT_TRUE(buf != NULL);
printf("%s\n", buf);
ASSERT_TRUE(
"<h1> some test text in test var file. </h1>")
== 0);
CHECK_TRUE(output_buf_size == 43);
+ CHECK_TRUE(filenames_list->count == 2);
+ CHECK_TRUE(simple_archiver_list_get(
+ filenames_list,
+ test_internal_check_matching_string_in_list,
+ (void*)test_http_template_html_filename2)
+ != NULL);
+ CHECK_TRUE(simple_archiver_list_get(
+ filenames_list,
+ test_internal_check_matching_string_in_list,
+ (void*)test_http_template_html_var_filename)
+ != NULL);
simple_archiver_helper_cleanup_c_string(&buf);
}