diff options
96 files changed, 2891 insertions, 7465 deletions
@@ -42,6 +42,7 @@ Makefile.in /m4/*.m4 !/m4/ax_pthread.m4 !/m4/pkg.m4 +!/m4/squareball.m4 # man pages /blogc*.[157] diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..061fb99 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "squareball"] + path = squareball + url = https://github.com/rafaelmartins/squareball.git diff --git a/Makefile.am b/Makefile.am index 040f291..1c5837b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -13,6 +13,9 @@ AM_DISTCHECK_CONFIGURE_FLAGS = \ --disable-valgrind \ $(NULL) +if INTERNAL_SQUAREBALL +SUBDIRS = squareball +endif ## File listings @@ -65,19 +68,10 @@ noinst_HEADERS = \ src/blogc-runserver/httpd.h \ src/blogc-runserver/httpd-utils.h \ src/blogc-runserver/mime.h \ - src/common/compat.h \ - src/common/config-parser.h \ - src/common/error.h \ - src/common/file.h \ - src/common/sort.h \ - src/common/stdin.h \ - src/common/utf8.h \ - src/common/utils.h \ $(NULL) noinst_LTLIBRARIES = \ libblogc.la \ - libblogc_common.la \ $(NULL) noinst_PROGRAMS = \ @@ -139,27 +133,12 @@ libblogc_la_SOURCES = \ libblogc_la_CFLAGS = \ $(AM_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) libblogc_la_LIBADD = \ $(LIBM) \ - libblogc_common.la \ - $(NULL) - - -libblogc_common_la_SOURCES = \ - src/common/compat.c \ - src/common/config-parser.c \ - src/common/error.c \ - src/common/file.c \ - src/common/sort.c \ - src/common/stdin.c \ - src/common/utf8.c \ - src/common/utils.c \ - $(NULL) - -libblogc_common_la_CFLAGS = \ - $(AM_CFLAGS) \ + $(SQUAREBALL_LIBS) \ $(NULL) @@ -169,11 +148,12 @@ blogc_SOURCES = \ blogc_CFLAGS = \ $(AM_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) blogc_LDADD = \ + $(SQUAREBALL_LIBS) \ libblogc.la \ - libblogc_common.la \ $(NULL) if BUILD_MAKE_EMBEDDED @@ -194,11 +174,12 @@ blogc_git_receiver_SOURCES = \ blogc_git_receiver_CFLAGS = \ $(AM_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) blogc_git_receiver_LDADD = \ + $(SQUAREBALL_LIBS) \ libblogc_git_receiver.la \ - libblogc_common.la \ $(NULL) libblogc_git_receiver_la_SOURCES = \ @@ -212,10 +193,11 @@ libblogc_git_receiver_la_SOURCES = \ libblogc_git_receiver_la_CFLAGS = \ $(AM_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) libblogc_git_receiver_la_LIBADD = \ - libblogc_common.la \ + $(SQUAREBALL_LIBS) \ $(NULL) endif @@ -227,13 +209,14 @@ blogc_make_SOURCES = \ blogc_make_CFLAGS = \ $(AM_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(PTHREAD_CFLAGS) \ $(NULL) blogc_make_LDADD = \ + $(SQUAREBALL_LIBS) \ $(PTHREAD_LIBS) \ libblogc_make.la \ - libblogc_common.la \ $(NULL) endif @@ -252,12 +235,13 @@ libblogc_make_la_SOURCES = \ libblogc_make_la_CFLAGS = \ $(AM_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(PTHREAD_CFLAGS) \ $(NULL) libblogc_make_la_LIBADD = \ + $(SQUAREBALL_LIBS) \ $(PTHREAD_LIBS) \ - libblogc_common.la \ $(NULL) endif @@ -269,13 +253,14 @@ blogc_runserver_SOURCES = \ blogc_runserver_CFLAGS = \ $(AM_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(PTHREAD_CFLAGS) \ $(NULL) blogc_runserver_LDADD = \ + $(SQUAREBALL_LIBS) \ $(PTHREAD_LIBS) \ libblogc_runserver.la \ - libblogc_common.la \ $(NULL) libblogc_runserver_la_SOURCES = \ @@ -286,12 +271,13 @@ libblogc_runserver_la_SOURCES = \ libblogc_runserver_la_CFLAGS = \ $(AM_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(PTHREAD_CFLAGS) \ $(NULL) libblogc_runserver_la_LIBADD = \ + $(SQUAREBALL_LIBS) \ $(PTHREAD_LIBS) \ - libblogc_common.la \ $(NULL) endif @@ -471,11 +457,6 @@ check_PROGRAMS += \ tests/blogc/check_renderer \ tests/blogc/check_source_parser \ tests/blogc/check_template_parser \ - tests/common/check_config_parser \ - tests/common/check_error \ - tests/common/check_sort \ - tests/common/check_utf8 \ - tests/common/check_utils \ $(NULL) if USE_LD_WRAP @@ -484,7 +465,6 @@ check_PROGRAMS += \ tests/blogc/check_loader \ tests/blogc/check_sysinfo \ tests/blogc/check_sysinfo2 \ - tests/common/check_stdin \ $(NULL) tests_blogc_check_funcvars_SOURCES = \ @@ -493,17 +473,18 @@ tests_blogc_check_funcvars_SOURCES = \ tests_blogc_check_funcvars_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_check_funcvars_LDFLAGS = \ -no-install \ - -Wl,--wrap=bc_file_get_contents \ + -Wl,--wrap=sb_file_get_contents \ $(NULL) tests_blogc_check_funcvars_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc.la \ - libblogc_common.la \ $(NULL) tests_blogc_check_loader_SOURCES = \ @@ -512,17 +493,18 @@ tests_blogc_check_loader_SOURCES = \ tests_blogc_check_loader_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_check_loader_LDFLAGS = \ -no-install \ - -Wl,--wrap=bc_file_get_contents \ + -Wl,--wrap=sb_file_get_contents_utf8 \ $(NULL) tests_blogc_check_loader_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc.la \ - libblogc_common.la \ $(NULL) tests_blogc_check_sysinfo_SOURCES = \ @@ -531,11 +513,12 @@ tests_blogc_check_sysinfo_SOURCES = \ tests_blogc_check_sysinfo_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_check_sysinfo_LDFLAGS = \ -no-install \ - -Wl,--wrap=bc_file_get_contents \ + -Wl,--wrap=sb_file_get_contents \ -Wl,--wrap=getenv \ $(NULL) @@ -554,8 +537,8 @@ endif tests_blogc_check_sysinfo_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc.la \ - libblogc_common.la \ $(NULL) tests_blogc_check_sysinfo2_SOURCES = \ @@ -564,35 +547,18 @@ tests_blogc_check_sysinfo2_SOURCES = \ tests_blogc_check_sysinfo2_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_check_sysinfo2_LDFLAGS = \ -no-install \ - -Wl,--wrap=bc_file_get_contents \ + -Wl,--wrap=sb_file_get_contents \ $(NULL) tests_blogc_check_sysinfo2_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc.la \ - libblogc_common.la \ - $(NULL) - -tests_common_check_stdin_SOURCES = \ - tests/common/check_stdin.c \ - $(NULL) - -tests_common_check_stdin_CFLAGS = \ - $(CMOCKA_CFLAGS) \ - $(NULL) - -tests_common_check_stdin_LDFLAGS = \ - -no-install \ - -Wl,--wrap=fgetc \ - $(NULL) - -tests_common_check_stdin_LDADD = \ - $(CMOCKA_LIBS) \ - libblogc_common.la \ $(NULL) if HAVE_SYS_RESOURCE_H @@ -607,6 +573,7 @@ tests_blogc_check_rusage_SOURCES = \ tests_blogc_check_rusage_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_check_rusage_LDFLAGS = \ @@ -616,8 +583,8 @@ tests_blogc_check_rusage_LDFLAGS = \ tests_blogc_check_rusage_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc.la \ - libblogc_common.la \ $(NULL) endif endif @@ -630,6 +597,7 @@ tests_blogc_check_content_parser_SOURCES = \ tests_blogc_check_content_parser_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_check_content_parser_LDFLAGS = \ @@ -638,8 +606,8 @@ tests_blogc_check_content_parser_LDFLAGS = \ tests_blogc_check_content_parser_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc.la \ - libblogc_common.la \ $(NULL) tests_blogc_check_datetime_parser_SOURCES = \ @@ -648,6 +616,7 @@ tests_blogc_check_datetime_parser_SOURCES = \ tests_blogc_check_datetime_parser_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_check_datetime_parser_LDFLAGS = \ @@ -656,8 +625,8 @@ tests_blogc_check_datetime_parser_LDFLAGS = \ tests_blogc_check_datetime_parser_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc.la \ - libblogc_common.la \ $(NULL) tests_blogc_check_renderer_SOURCES = \ @@ -666,6 +635,7 @@ tests_blogc_check_renderer_SOURCES = \ tests_blogc_check_renderer_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_check_renderer_LDFLAGS = \ @@ -674,8 +644,8 @@ tests_blogc_check_renderer_LDFLAGS = \ tests_blogc_check_renderer_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc.la \ - libblogc_common.la \ $(NULL) tests_blogc_check_source_parser_SOURCES = \ @@ -684,6 +654,7 @@ tests_blogc_check_source_parser_SOURCES = \ tests_blogc_check_source_parser_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_check_source_parser_LDFLAGS = \ @@ -692,8 +663,8 @@ tests_blogc_check_source_parser_LDFLAGS = \ tests_blogc_check_source_parser_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc.la \ - libblogc_common.la \ $(NULL) tests_blogc_check_template_parser_SOURCES = \ @@ -702,6 +673,7 @@ tests_blogc_check_template_parser_SOURCES = \ tests_blogc_check_template_parser_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_check_template_parser_LDFLAGS = \ @@ -710,93 +682,8 @@ tests_blogc_check_template_parser_LDFLAGS = \ tests_blogc_check_template_parser_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc.la \ - libblogc_common.la \ - $(NULL) - -tests_common_check_config_parser_SOURCES = \ - tests/common/check_config_parser.c \ - $(NULL) - -tests_common_check_config_parser_CFLAGS = \ - $(CMOCKA_CFLAGS) \ - $(NULL) - -tests_common_check_config_parser_LDFLAGS = \ - -no-install \ - $(NULL) - -tests_common_check_config_parser_LDADD = \ - $(CMOCKA_LIBS) \ - libblogc_common.la \ - $(NULL) - -tests_common_check_error_SOURCES = \ - tests/common/check_error.c \ - $(NULL) - -tests_common_check_error_CFLAGS = \ - $(CMOCKA_CFLAGS) \ - $(NULL) - -tests_common_check_error_LDFLAGS = \ - -no-install \ - $(NULL) - -tests_common_check_error_LDADD = \ - $(CMOCKA_LIBS) \ - libblogc_common.la \ - $(NULL) - -tests_common_check_sort_SOURCES = \ - tests/common/check_sort.c \ - $(NULL) - -tests_common_check_sort_CFLAGS = \ - $(CMOCKA_CFLAGS) \ - $(NULL) - -tests_common_check_sort_LDFLAGS = \ - -no-install \ - $(NULL) - -tests_common_check_sort_LDADD = \ - $(CMOCKA_LIBS) \ - libblogc_common.la \ - $(NULL) - -tests_common_check_utf8_SOURCES = \ - tests/common/check_utf8.c \ - $(NULL) - -tests_common_check_utf8_CFLAGS = \ - $(CMOCKA_CFLAGS) \ - $(NULL) - -tests_common_check_utf8_LDFLAGS = \ - -no-install \ - $(NULL) - -tests_common_check_utf8_LDADD = \ - $(CMOCKA_LIBS) \ - libblogc_common.la \ - $(NULL) - -tests_common_check_utils_SOURCES = \ - tests/common/check_utils.c \ - $(NULL) - -tests_common_check_utils_CFLAGS = \ - $(CMOCKA_CFLAGS) \ - $(NULL) - -tests_common_check_utils_LDFLAGS = \ - -no-install \ - $(NULL) - -tests_common_check_utils_LDADD = \ - $(CMOCKA_LIBS) \ - libblogc_common.la \ $(NULL) if BUILD_RUNSERVER @@ -812,6 +699,7 @@ tests_blogc_runserver_check_httpd_utils_SOURCES = \ tests_blogc_runserver_check_httpd_utils_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_runserver_check_httpd_utils_LDFLAGS = \ @@ -821,8 +709,8 @@ tests_blogc_runserver_check_httpd_utils_LDFLAGS = \ tests_blogc_runserver_check_httpd_utils_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc_runserver.la \ - libblogc_common.la \ $(NULL) tests_blogc_runserver_check_mime_SOURCES = \ @@ -831,6 +719,7 @@ tests_blogc_runserver_check_mime_SOURCES = \ tests_blogc_runserver_check_mime_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_runserver_check_mime_LDFLAGS = \ @@ -840,8 +729,8 @@ tests_blogc_runserver_check_mime_LDFLAGS = \ tests_blogc_runserver_check_mime_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc_runserver.la \ - libblogc_common.la \ $(NULL) endif endif @@ -863,6 +752,7 @@ tests_blogc_git_receiver_check_settings_SOURCES = \ tests_blogc_git_receiver_check_settings_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_git_receiver_check_settings_LDFLAGS = \ @@ -872,8 +762,8 @@ tests_blogc_git_receiver_check_settings_LDFLAGS = \ tests_blogc_git_receiver_check_settings_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc_git_receiver.la \ - libblogc_common.la \ $(NULL) endif @@ -883,6 +773,7 @@ tests_blogc_git_receiver_check_pre_receive_parser_SOURCES = \ tests_blogc_git_receiver_check_pre_receive_parser_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_git_receiver_check_pre_receive_parser_LDFLAGS = \ @@ -891,8 +782,8 @@ tests_blogc_git_receiver_check_pre_receive_parser_LDFLAGS = \ tests_blogc_git_receiver_check_pre_receive_parser_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc_git_receiver.la \ - libblogc_common.la \ $(NULL) tests_blogc_git_receiver_check_shell_command_parser_SOURCES = \ @@ -901,6 +792,7 @@ tests_blogc_git_receiver_check_shell_command_parser_SOURCES = \ tests_blogc_git_receiver_check_shell_command_parser_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_git_receiver_check_shell_command_parser_LDFLAGS = \ @@ -909,8 +801,8 @@ tests_blogc_git_receiver_check_shell_command_parser_LDFLAGS = \ tests_blogc_git_receiver_check_shell_command_parser_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc_git_receiver.la \ - libblogc_common.la \ $(NULL) endif @@ -933,6 +825,7 @@ tests_blogc_make_check_exec_SOURCES = \ tests_blogc_make_check_exec_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_make_check_exec_LDFLAGS = \ @@ -942,8 +835,8 @@ tests_blogc_make_check_exec_LDFLAGS = \ tests_blogc_make_check_exec_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc_make.la \ - libblogc_common.la \ $(NULL) endif @@ -953,6 +846,7 @@ tests_blogc_make_check_atom_SOURCES = \ tests_blogc_make_check_atom_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_make_check_atom_LDFLAGS = \ @@ -961,8 +855,8 @@ tests_blogc_make_check_atom_LDFLAGS = \ tests_blogc_make_check_atom_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc_make.la \ - libblogc_common.la \ $(NULL) tests_blogc_make_check_rules_SOURCES = \ @@ -971,6 +865,7 @@ tests_blogc_make_check_rules_SOURCES = \ tests_blogc_make_check_rules_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_make_check_rules_LDFLAGS = \ @@ -979,8 +874,8 @@ tests_blogc_make_check_rules_LDFLAGS = \ tests_blogc_make_check_rules_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc_make.la \ - libblogc_common.la \ $(NULL) tests_blogc_make_check_settings_SOURCES = \ @@ -989,6 +884,7 @@ tests_blogc_make_check_settings_SOURCES = \ tests_blogc_make_check_settings_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_make_check_settings_LDFLAGS = \ @@ -997,8 +893,8 @@ tests_blogc_make_check_settings_LDFLAGS = \ tests_blogc_make_check_settings_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc_make.la \ - libblogc_common.la \ $(NULL) tests_blogc_make_check_utils_SOURCES = \ @@ -1007,6 +903,7 @@ tests_blogc_make_check_utils_SOURCES = \ tests_blogc_make_check_utils_CFLAGS = \ $(CMOCKA_CFLAGS) \ + $(SQUAREBALL_CFLAGS) \ $(NULL) tests_blogc_make_check_utils_LDFLAGS = \ @@ -1015,8 +912,8 @@ tests_blogc_make_check_utils_LDFLAGS = \ tests_blogc_make_check_utils_LDADD = \ $(CMOCKA_LIBS) \ + $(SQUAREBALL_LIBS) \ libblogc_make.la \ - libblogc_common.la \ $(NULL) endif diff --git a/build-aux/build-static.sh b/build-aux/build-static.sh index cacca1b..10bb4da 100755 --- a/build-aux/build-static.sh +++ b/build-aux/build-static.sh @@ -2,6 +2,6 @@ set -ex -${MAKE_CMD:-make} LDFLAGS="-all-static" blogc +${MAKE_CMD:-make} LDFLAGS="-all-static" xz -zc blogc > "blogc-static-amd64-${PV}.xz" diff --git a/build-aux/build-windows.sh b/build-aux/build-windows.sh index b00fbe6..56117f4 100755 --- a/build-aux/build-windows.sh +++ b/build-aux/build-windows.sh @@ -4,7 +4,7 @@ set -ex DESTDIR="${PN}-${TARGET}-${PV}" -${MAKE_CMD:-make} blogc.exe +${MAKE_CMD:-make} rm -rf "${DESTDIR}" mkdir -p "${DESTDIR}" diff --git a/configure.ac b/configure.ac index 880acf4..8cdd4f5 100644 --- a/configure.ac +++ b/configure.ac @@ -22,6 +22,8 @@ AS_IF([test "x$ac_cv_prog_cc_c99" = "xno"], [ PKG_PROG_PKG_CONFIG +SQUAREBALL_INIT + AC_PROG_SED RPM_VERSION=`echo ${PACKAGE_VERSION} | sed "s/-/./g"` diff --git a/m4/squareball.m4 b/m4/squareball.m4 new file mode 100644 index 0000000..297701d --- /dev/null +++ b/m4/squareball.m4 @@ -0,0 +1,46 @@ +# squareball: A general-purpose library for C99. +# Copyright (C) 2014-2018 Rafael G. Martins <rafael@rafaelmartins.eng.br> +# +# This program can be distributed under the terms of the BSD License. +# See the file LICENSE. + +# SQUAREBALL_INIT([VERSION_ATOM]) +# +# This should be added to Makefile.am +# +# if INTERNAL_SQUAREBALL +# SUBDIRS = squareball +# endif +# +# The following variables will be exported to be used in the Makefile.am: +# +# - SQUAREBALL_CFLAGS +# - SQUAREBALL_LIBS +# +# This macro requires squareball to be installed as a git submodule in the +# top source dir. +# ---------------------------------- +AC_DEFUN([SQUAREBALL_INIT], [ + AC_ARG_WITH([squareball], [AS_HELP_STRING([--with-squareball=@<:@internal/system@:>@], + [whether to use library squareball from system [default=internal]])]) + AS_IF([test "x$with_squareball" = "xsystem"], [ + SQUAREBALL="system" + PKG_CHECK_MODULES([SQUAREBALL], [squareball$1], , [ + AC_MSG_ERROR([library squareball requested from system but not found]) + ]) + ], [ + SQUAREBALL="internal" + SQUAREBALL_CFLAGS='-I$(top_srcdir)/squareball/src' + SQUAREBALL_LIBS='$(top_builddir)/squareball/libsquareball.la' + AC_SUBST(SQUAREBALL_LIBS) + AC_SUBST(SQUAREBALL_CFLAGS) + ac_configure_args_pre="$ac_configure_args" + ac_configure_args_post="$ac_configure_args --enable-bundleme" + ac_configure_args="$ac_configure_args_post" + AC_CONFIG_COMMANDS_PRE([ac_configure_args="$ac_configure_args_pre"]) + AC_CONFIG_COMMANDS_POST([ac_configure_args="$ac_configure_args_post"]) + AC_CONFIG_SUBDIRS([squareball]) + ac_configure_args="$ac_configure_args_pre" + ]) + AM_CONDITIONAL(INTERNAL_SQUAREBALL, [test "x$with_squareball" != "xsystem"]) +]) diff --git a/squareball b/squareball new file mode 160000 +Subproject dd5b2fc6fd395b5ad1efb4eba7fece9ba76b0a5 diff --git a/src/blogc-git-receiver/post-receive.c b/src/blogc-git-receiver/post-receive.c index 17a8aa7..5cdd0ce 100644 --- a/src/blogc-git-receiver/post-receive.c +++ b/src/blogc-git-receiver/post-receive.c @@ -12,8 +12,8 @@ #include <libgen.h> #include <unistd.h> #include <stdlib.h> -#include "../common/utils.h" -#include "../common/config-parser.h" +#include <squareball.h> + #include "settings.h" #include "post-receive.h" @@ -32,7 +32,7 @@ bgr_post_receive_hook(int argc, char *argv[]) return 1; } - char *repo_path = bc_strdup(dirname(real_hooks_dir)); + char *repo_path = sb_strdup(dirname(real_hooks_dir)); free(real_hooks_dir); if (0 != chdir(repo_path)) { fprintf(stderr, "error: failed to change to repository root\n"); @@ -47,11 +47,11 @@ bgr_post_receive_hook(int argc, char *argv[]) if ((0 == system("git config --local remote.mirror.pushurl > /dev/null")) || (0 == system("git config --local remote.mirror.url > /dev/null"))) { - mirror = bc_strdup("mirror"); + mirror = sb_strdup("mirror"); goto push; } - bc_config_t *config = bgr_settings_parse(); + sb_config_t *config = bgr_settings_parse(); if (config == NULL) { fprintf(stderr, "warning: repository mirroring disabled\n"); goto cleanup; @@ -60,13 +60,13 @@ bgr_post_receive_hook(int argc, char *argv[]) char *section = bgr_settings_get_section(config, repo_path); if (section == NULL) { fprintf(stderr, "warning: repository mirroring disabled\n"); - bc_config_free(config); + sb_config_free(config); goto cleanup; } - mirror = bc_strdup(bc_config_get(config, section, "mirror")); + mirror = sb_strdup(sb_config_get(config, section, "mirror")); free(section); - bc_config_free(config); + sb_config_free(config); if (mirror == NULL) { fprintf(stderr, "warning: repository mirroring disabled\n"); @@ -76,7 +76,7 @@ bgr_post_receive_hook(int argc, char *argv[]) push: { - char *git_cmd = bc_strdup_printf("git push --mirror %s", mirror); + char *git_cmd = sb_strdup_printf("git push --mirror %s", mirror); if (0 != system(git_cmd)) fprintf(stderr, "warning: failed push to git mirror\n"); free(git_cmd); diff --git a/src/blogc-git-receiver/pre-receive-parser.c b/src/blogc-git-receiver/pre-receive-parser.c index fb4c4d5..0e18ae7 100644 --- a/src/blogc-git-receiver/pre-receive-parser.c +++ b/src/blogc-git-receiver/pre-receive-parser.c @@ -8,7 +8,8 @@ #include <stdlib.h> #include <string.h> -#include "../common/utils.h" +#include <squareball.h> + #include "pre-receive-parser.h" typedef enum { @@ -67,7 +68,7 @@ bgr_pre_receive_parse(const char *input) if ((current - start == 17) && (0 == strncmp("refs/heads/master", input + start, 17))) { - return bc_strndup(input + start_new, start - 1 - start_new); + return sb_strndup(input + start_new, start - 1 - start_new); } break; } diff --git a/src/blogc-git-receiver/pre-receive.c b/src/blogc-git-receiver/pre-receive.c index 03b5b21..69fec27 100644 --- a/src/blogc-git-receiver/pre-receive.c +++ b/src/blogc-git-receiver/pre-receive.c @@ -15,9 +15,8 @@ #include <dirent.h> #include <time.h> #include <libgen.h> -#include "../common/compat.h" -#include "../common/utils.h" -#include "../common/stdin.h" +#include <squareball.h> + #include "settings.h" #include "pre-receive-parser.h" #include "pre-receive.h" @@ -58,7 +57,7 @@ rmdir_recursive(const char *dir) while (NULL != (e = readdir(d))) { if ((0 == strcmp(e->d_name, ".")) || (0 == strcmp(e->d_name, ".."))) continue; - char *f = bc_strdup_printf("%s/%s", dir, e->d_name); + char *f = sb_strdup_printf("%s/%s", dir, e->d_name); if (0 != stat(f, &buf)) { fprintf(stderr, "error: failed to stat directory entry (%s): %s\n", e->d_name, strerror(errno)); @@ -106,7 +105,7 @@ bgr_pre_receive_hook(int argc, char *argv[]) return 1; } - char *repo_dir = bc_strdup(dirname(real_hooks_dir)); + char *repo_dir = sb_strdup(dirname(real_hooks_dir)); free(real_hooks_dir); if (0 != chdir(repo_dir)) { fprintf(stderr, "error: failed to change to repository root\n"); @@ -114,33 +113,33 @@ bgr_pre_receive_hook(int argc, char *argv[]) goto cleanup; } - bc_config_t *config = bgr_settings_parse(); + sb_config_t *config = bgr_settings_parse(); if (config == NULL) { goto default_sym; } char *section = bgr_settings_get_section(config, repo_dir); if (section == NULL) { - bc_config_free(config); + sb_config_free(config); goto default_sym; } - const char *sym_tmp = bc_config_get(config, section, "symlink"); + const char *sym_tmp = sb_config_get(config, section, "symlink"); if (sym_tmp == NULL) { free(section); - bc_config_free(config); + sb_config_free(config); goto default_sym; } - sym = bc_str_starts_with(sym_tmp, "/") ? bc_strdup(sym_tmp) : - bc_strdup_printf("%s/%s", repo_dir, sym_tmp); + sym = sb_str_starts_with(sym_tmp, "/") ? sb_strdup(sym_tmp) : + sb_strdup_printf("%s/%s", repo_dir, sym_tmp); free(section); - bc_config_free(config); + sb_config_free(config); default_sym: if (sym == NULL) { - sym = bc_strdup_printf("%s/htdocs", repo_dir); + sym = sb_strdup_printf("%s/htdocs", repo_dir); } if (NULL == getenv("GIT_DIR")) { @@ -157,20 +156,20 @@ default_sym: rv = 1; goto cleanup; } - char **pieces = bc_str_split(basename(build_dir), '-', 2); + char **pieces = sb_str_split(basename(build_dir), '-', 2); free(build_dir); - if (bc_strv_length(pieces) != 2) { + if (sb_strv_length(pieces) != 2) { fprintf(stderr, "error: failed to parse the hash of last built " "commit.\n"); - bc_strv_free(pieces); + sb_strv_free(pieces); rv = 1; goto cleanup; } - master = bc_strdup(pieces[0]); - bc_strv_free(pieces); + master = sb_strdup(pieces[0]); + sb_strv_free(pieces); } else { - char *input = bc_stdin_read(); + char *input = sb_stdin_get_contents(); master = bgr_pre_receive_parse(input); free(input); } @@ -188,7 +187,7 @@ default_sym: } tmpdir = dir; - char *git_archive_cmd = bc_strdup_printf( + char *git_archive_cmd = sb_strdup_printf( "git archive \"%s\" | tar -x -C \"%s\" -f -", master, tmpdir); if (0 != system(git_archive_cmd)) { fprintf(stderr, "error: failed to extract git content to temporary " @@ -214,12 +213,12 @@ default_sym: } unsigned long epoch = time(NULL); - output_dir = bc_strdup_printf("%s/%s-%lu", buildsd, master, epoch); + output_dir = sb_strdup_printf("%s/%s-%lu", buildsd, master, epoch); free(buildsd); if (0 == access(output_dir, F_OK)) { char *tmp = output_dir; - output_dir = bc_strdup_printf("%s-", tmp); + output_dir = sb_strdup_printf("%s-", tmp); free(tmp); } @@ -228,24 +227,24 @@ default_sym: char *build_cmd = NULL; if (0 == access("blogcfile", F_OK)) { int status_bmake = system("blogc-make -v 2> /dev/null > /dev/null"); - if (127 == bc_compat_status_code(status_bmake)) { + if (127 == sb_compat_status_code(status_bmake)) { fprintf(stderr, "error: failed to find blogc-make binary\n"); rv = 1; goto cleanup; } - build_cmd = bc_strdup_printf("OUTPUT_DIR=\"%s\" blogc-make -V all", + build_cmd = sb_strdup_printf("OUTPUT_DIR=\"%s\" blogc-make -V all", output_dir); } else if ((0 == access("Makefile", F_OK)) || (0 == access("GNUMakefile", F_OK))) { const char *make_impl = NULL; int status_gmake = system("gmake -f /dev/null 2> /dev/null > /dev/null"); - if (127 != bc_compat_status_code(status_gmake)) { + if (127 != sb_compat_status_code(status_gmake)) { make_impl = "gmake"; } else { int status_make = system("make -f /dev/null 2> /dev/null > /dev/null"); - if (127 != bc_compat_status_code(status_make)) { + if (127 != sb_compat_status_code(status_make)) { make_impl = "make"; } } @@ -255,7 +254,7 @@ default_sym: rv = 1; goto cleanup; } - build_cmd = bc_strdup_printf( + build_cmd = sb_strdup_printf( "%s -j%d OUTPUT_DIR=\"%s\" BLOGC_GIT_RECEIVER=1", make_impl, cpu_count(), output_dir); } diff --git a/src/blogc-git-receiver/settings.c b/src/blogc-git-receiver/settings.c index db29b18..6de1042 100644 --- a/src/blogc-git-receiver/settings.c +++ b/src/blogc-git-receiver/settings.c @@ -12,10 +12,8 @@ #include <stdlib.h> #include <string.h> #include <stdbool.h> -#include "../common/utils.h" -#include "../common/config-parser.h" -#include "../common/error.h" -#include "../common/file.h" +#include <squareball.h> + #include "settings.h" @@ -35,72 +33,72 @@ bgr_settings_get_builds_dir(void) { char *rv = getenv("BLOGC_GIT_RECEIVER_BUILDS_DIR"); if (rv != NULL) { - return bc_strdup(rv); + return sb_strdup(rv); } - return bc_strdup_printf("%s/builds", bgr_settings_get_base_dir()); + return sb_strdup_printf("%s/builds", bgr_settings_get_base_dir()); } char* -bgr_settings_get_section(bc_config_t *config, const char *repo_path) +bgr_settings_get_section(sb_config_t *config, const char *repo_path) { const char *bd = bgr_settings_get_base_dir(); if (bd == NULL) { return NULL; } char *rv = NULL; - char** sections = bc_config_list_sections(config); + char** sections = sb_config_list_sections(config); for (size_t i = 0; sections[i] != NULL; i++) { - if (bc_str_starts_with(sections[i], "repo:")) { - char *tmp_repo = bc_strdup_printf("%s/repos/%s", bd, sections[i] + 5); + if (sb_str_starts_with(sections[i], "repo:")) { + char *tmp_repo = sb_strdup_printf("%s/repos/%s", bd, sections[i] + 5); char *real_tmp_repo = realpath(tmp_repo, NULL); // maybe not needed free(tmp_repo); if (real_tmp_repo == NULL) continue; if (0 == strcmp(real_tmp_repo, repo_path)) { - rv = bc_strdup(sections[i]); + rv = sb_strdup(sections[i]); free(real_tmp_repo); break; } free(real_tmp_repo); } } - bc_strv_free(sections); + sb_strv_free(sections); return rv; } -bc_config_t* +sb_config_t* bgr_settings_parse(void) { const char *bd = bgr_settings_get_base_dir(); if (bd == NULL) { return NULL; } - char *config_file = bc_strdup_printf("%s/blogc-git-receiver.ini", bd); + char *config_file = sb_strdup_printf("%s/blogc-git-receiver.ini", bd); if ((0 != access(config_file, F_OK))) { free(config_file); return NULL; } size_t len; - bc_error_t *err = NULL; - char* config_content = bc_file_get_contents(config_file, true, &len, &err); + sb_error_t *err = NULL; + char* config_content = sb_file_get_contents(config_file, &len, &err); if (err != NULL) { fprintf(stderr, "warning: failed to read configuration file (%s): %s\n", - config_file, err->msg); - bc_error_free(err); + config_file, sb_error_to_string(err)); + sb_error_free(err); free(config_file); free(config_content); return NULL; } - bc_config_t *config = bc_config_parse(config_content, len, NULL, &err); + sb_config_t *config = sb_config_parse(config_content, len, NULL, &err); free(config_content); if (err != NULL) { fprintf(stderr, "warning: failed to parse configuration file (%s): %s\n", - config_file, err->msg); - bc_error_free(err); + config_file, sb_error_to_string(err)); + sb_error_free(err); free(config_file); return NULL; } diff --git a/src/blogc-git-receiver/settings.h b/src/blogc-git-receiver/settings.h index 04c1a2b..012dfaf 100644 --- a/src/blogc-git-receiver/settings.h +++ b/src/blogc-git-receiver/settings.h @@ -9,11 +9,11 @@ #ifndef _SETTINGS_H #define _SETTINGS_H -#include "../common/config-parser.h" +#include <squareball.h> const char* bgr_settings_get_base_dir(void); char* bgr_settings_get_builds_dir(void); -char* bgr_settings_get_section(bc_config_t *config, const char *repo_path); -bc_config_t* bgr_settings_parse(void); +char* bgr_settings_get_section(sb_config_t *config, const char *repo_path); +sb_config_t* bgr_settings_parse(void); #endif /* _SETTINGS_H */ diff --git a/src/blogc-git-receiver/shell-command-parser.c b/src/blogc-git-receiver/shell-command-parser.c index 0091e0b..2b99e33 100644 --- a/src/blogc-git-receiver/shell-command-parser.c +++ b/src/blogc-git-receiver/shell-command-parser.c @@ -9,7 +9,8 @@ #include <stdbool.h> #include <stdlib.h> #include <string.h> -#include "../common/utils.h" +#include <squareball.h> + #include "shell-command-parser.h" typedef enum { @@ -28,7 +29,7 @@ bgr_shell_command_parse(const char *command) size_t start = 0; size_t command_len = strlen(command); - bc_string_t *rv = bc_string_new(); + sb_string_t *rv = sb_string_new(); for (size_t current = 0; current < command_len; current++) { @@ -76,7 +77,7 @@ bgr_shell_command_parse(const char *command) case START_ESCAPED: if (c == '!' || c == '\'') { - bc_string_append_c(rv, c); + sb_string_append_c(rv, c); state = START_REPO; break; } @@ -84,7 +85,7 @@ bgr_shell_command_parse(const char *command) case REPO: if (c == '\'') { - bc_string_append_len(rv, command + start, current - start); + sb_string_append_len(rv, command + start, current - start); state = START_REPO; break; } @@ -93,9 +94,9 @@ bgr_shell_command_parse(const char *command) } if (rv->len > 0) - return bc_string_free(rv, false); + return sb_string_free(rv, false); error: - bc_string_free(rv, true); + sb_string_free(rv, true); return NULL; } diff --git a/src/blogc-git-receiver/shell.c b/src/blogc-git-receiver/shell.c index a460ac2..a9e5c45 100644 --- a/src/blogc-git-receiver/shell.c +++ b/src/blogc-git-receiver/shell.c @@ -13,7 +13,8 @@ #include <unistd.h> #include <errno.h> #include <sys/stat.h> -#include "../common/utils.h" +#include <squareball.h> + #include "settings.h" #include "shell-command-parser.h" #include "shell.h" @@ -62,15 +63,15 @@ bgr_shell(int argc, char *argv[]) goto cleanup; } - repo = bc_strdup_printf("%s/repos/%s", bd, tmp_repo); - quoted_repo = bc_shell_quote(repo); + repo = sb_strdup_printf("%s/repos/%s", bd, tmp_repo); + quoted_repo = sb_shell_quote(repo); free(tmp_repo); if (0 == strncmp(argv[2], "git-upload-", 11)) // no need to check len here goto git_exec; if (0 != access(repo, F_OK)) { - char *git_init_cmd = bc_strdup_printf( + char *git_init_cmd = sb_strdup_printf( "git init --bare %s > /dev/null", quoted_repo); if (0 != system(git_init_cmd)) { fprintf(stderr, "error: failed to create git repository: %s\n", @@ -147,9 +148,9 @@ git_exec: goto cleanup; } - // static allocation instead of bc_strdup_printf to avoid leaks + // static allocation instead of sb_strdup_printf to avoid leaks char buffer[4096]; - char *command = bc_strdup(argv[2]); + char *command = sb_strdup(argv[2]); char *p; for (p = command; *p != ' ' && *p != '\0'; p++); if (*p == ' ') diff --git a/src/blogc-make/atom.c b/src/blogc-make/atom.c index 6749658..47b9ee3 100644 --- a/src/blogc-make/atom.c +++ b/src/blogc-make/atom.c @@ -10,8 +10,8 @@ #include <string.h> #include <errno.h> #include <unistd.h> -#include "../common/error.h" -#include "../common/utils.h" +#include <squareball.h> + #include "settings.h" #include "utils.h" #include "atom.h" @@ -53,32 +53,32 @@ bm_atom_generate(bm_settings_t *settings) if (settings == NULL) return NULL; - const char *atom_prefix = bc_trie_lookup(settings->settings, "atom_prefix"); - const char *atom_ext = bc_trie_lookup(settings->settings, "atom_ext"); - const char *post_prefix = bc_trie_lookup(settings->settings, "post_prefix"); - const char *post_ext = bc_trie_lookup(settings->settings, "html_ext"); + const char *atom_prefix = sb_trie_lookup(settings->settings, "atom_prefix"); + const char *atom_ext = sb_trie_lookup(settings->settings, "atom_ext"); + const char *post_prefix = sb_trie_lookup(settings->settings, "post_prefix"); + const char *post_ext = sb_trie_lookup(settings->settings, "html_ext"); - bc_string_t *atom_url = bc_string_new(); + sb_string_t *atom_url = sb_string_new(); if (atom_prefix[0] != '\0') - bc_string_append_c(atom_url, '/'); + sb_string_append_c(atom_url, '/'); - bc_string_append(atom_url, atom_prefix); - bc_string_append(atom_url, "{% ifdef FILTER_TAG %}/{{ FILTER_TAG }}"); + sb_string_append(atom_url, atom_prefix); + sb_string_append(atom_url, "{% ifdef FILTER_TAG %}/{{ FILTER_TAG }}"); if (atom_prefix[0] == '\0' && atom_ext[0] != '/') - bc_string_append(atom_url, "{% else %}/index"); + sb_string_append(atom_url, "{% else %}/index"); - bc_string_append(atom_url, "{% endif %}"); - bc_string_append(atom_url, atom_ext); + sb_string_append(atom_url, "{% endif %}"); + sb_string_append(atom_url, atom_ext); char *post_url = bm_generate_filename(NULL, post_prefix, "{{ FILENAME }}", post_ext); - char *rv = bc_strdup_printf(atom_template, atom_url->str, atom_url->str, + char *rv = sb_strdup_printf(atom_template, atom_url->str, atom_url->str, post_url, post_url); - bc_string_free(atom_url, true); + sb_string_free(atom_url, true); free(post_url); return rv; @@ -86,14 +86,14 @@ bm_atom_generate(bm_settings_t *settings) char* -bm_atom_deploy(bm_settings_t *settings, bc_error_t **err) +bm_atom_deploy(bm_settings_t *settings, sb_error_t **err) { if (settings == NULL || err == NULL || *err != NULL) return NULL; - if (NULL != bc_trie_lookup(settings->settings, "atom_legacy_entry_id")) { - *err = bc_error_new_printf(BLOGC_MAKE_ERROR_ATOM, - "'atom_legacy_entry_id' setting is not supported anymore. see " + if (NULL != sb_trie_lookup(settings->settings, "atom_legacy_entry_id")) { + *err = sb_strerror_new( + "atom: 'atom_legacy_entry_id' setting is not supported anymore. see " "https://blogc.rgm.io/news/blogc-0.16.1/ for details"); return NULL; } @@ -102,8 +102,8 @@ bm_atom_deploy(bm_settings_t *settings, bc_error_t **err) char fname[] = "/tmp/blogc-make_XXXXXX"; int fd; if (-1 == (fd = mkstemp(fname))) { - *err = bc_error_new_printf(BLOGC_MAKE_ERROR_ATOM, - "Failed to create temporary atom template: %s", strerror(errno)); + *err = sb_strerror_new_printf( + "atom: Failed to create temporary atom template: %s", strerror(errno)); return NULL; } @@ -115,8 +115,8 @@ bm_atom_deploy(bm_settings_t *settings, bc_error_t **err) } if (-1 == write(fd, content, strlen(content))) { - *err = bc_error_new_printf(BLOGC_MAKE_ERROR_ATOM, - "Failed to write to temporary atom template: %s", strerror(errno)); + *err = sb_strerror_new_printf( + "atom: Failed to write to temporary atom template: %s", strerror(errno)); free(content); close(fd); unlink(fname); @@ -126,7 +126,7 @@ bm_atom_deploy(bm_settings_t *settings, bc_error_t **err) free(content); close(fd); - return bc_strdup(fname); + return sb_strdup(fname); } diff --git a/src/blogc-make/atom.h b/src/blogc-make/atom.h index 29a6dcb..d22b8ab 100644 --- a/src/blogc-make/atom.h +++ b/src/blogc-make/atom.h @@ -9,11 +9,12 @@ #ifndef _MAKE_ATOM_H #define _MAKE_ATOM_H -#include "../common/error.h" +#include <squareball.h> + #include "settings.h" char* bm_atom_generate(bm_settings_t *settings); -char* bm_atom_deploy(bm_settings_t *settings, bc_error_t **err); +char* bm_atom_deploy(bm_settings_t *settings, sb_error_t **err); void bm_atom_destroy(const char *fname); #endif /* _MAKE_ATOM_H */ diff --git a/src/blogc-make/ctx.c b/src/blogc-make/ctx.c index 423b334..f856b6e 100644 --- a/src/blogc-make/ctx.c +++ b/src/blogc-make/ctx.c @@ -14,11 +14,11 @@ #include <limits.h> #include <time.h> #include <stdlib.h> +#include <stdio.h> #include <stdbool.h> #include <string.h> -#include "../common/error.h" -#include "../common/file.h" -#include "../common/utils.h" +#include <squareball.h> + #include "atom.h" #include "settings.h" #include "exec.h" @@ -33,13 +33,13 @@ bm_filectx_new(bm_ctx_t *ctx, const char *filename, const char *slug, if (ctx == NULL || filename == NULL) return NULL; - char *f = filename[0] == '/' ? bc_strdup(filename) : - bc_strdup_printf("%s/%s", ctx->root_dir, filename); + char *f = filename[0] == '/' ? sb_strdup(filename) : + sb_strdup_printf("%s/%s", ctx->root_dir, filename); - bm_filectx_t *rv = bc_malloc(sizeof(bm_filectx_t)); + bm_filectx_t *rv = sb_malloc(sizeof(bm_filectx_t)); rv->path = f; - rv->short_path = bc_strdup(filename); - rv->slug = bc_strdup(slug); + rv->short_path = sb_strdup(filename); + rv->slug = sb_strdup(slug); if (st == NULL) { struct stat buf; @@ -62,14 +62,14 @@ bm_filectx_new(bm_ctx_t *ctx, const char *filename, const char *slug, } -bc_slist_t* -bm_filectx_new_r(bc_slist_t *l, bm_ctx_t *ctx, const char *filename) +sb_slist_t* +bm_filectx_new_r(sb_slist_t *l, bm_ctx_t *ctx, const char *filename) { if (ctx == NULL || filename == NULL) return NULL; - char *f = filename[0] == '/' ? bc_strdup(filename) : - bc_strdup_printf("%s/%s", ctx->root_dir, filename); + char *f = filename[0] == '/' ? sb_strdup(filename) : + sb_strdup_printf("%s/%s", ctx->root_dir, filename); struct stat buf; if (0 != stat(f, &buf)) { @@ -88,7 +88,7 @@ bm_filectx_new_r(bc_slist_t *l, bm_ctx_t *ctx, const char *filename) while (NULL != (e = readdir(dir))) { if ((0 == strcmp(e->d_name, ".")) || (0 == strcmp(e->d_name, ".."))) continue; - char *tmp = bc_strdup_printf("%s/%s", filename, e->d_name); + char *tmp = sb_strdup_printf("%s/%s", filename, e->d_name); l = bm_filectx_new_r(l, ctx, tmp); free(tmp); } @@ -98,7 +98,7 @@ bm_filectx_new_r(bc_slist_t *l, bm_ctx_t *ctx, const char *filename) return l; } - l = bc_slist_append(l, bm_filectx_new(ctx, filename, NULL, &buf)); + l = sb_slist_append(l, bm_filectx_new(ctx, filename, NULL, &buf)); free(f); return l; } @@ -167,7 +167,7 @@ bm_filectx_free(bm_filectx_t *fctx) bm_ctx_t* bm_ctx_new(bm_ctx_t *base, const char *settings_file, const char *argv0, - bc_error_t **err) + sb_error_t **err) { if (settings_file == NULL || err == NULL || *err != NULL) return NULL; @@ -177,7 +177,7 @@ bm_ctx_new(bm_ctx_t *base, const char *settings_file, const char *argv0, return NULL; size_t content_len; - char *content = bc_file_get_contents(abs_filename, true, &content_len, + char *content = sb_file_get_contents_utf8(abs_filename, &content_len, err); if (*err != NULL) { free(abs_filename); @@ -192,16 +192,16 @@ bm_ctx_new(bm_ctx_t *base, const char *settings_file, const char *argv0, } free(content); - const char *template_dir = bc_trie_lookup(settings->settings, "template_dir"); + const char *template_dir = sb_trie_lookup(settings->settings, "template_dir"); if (template_dir == NULL) template_dir = ""; char *atom_template = NULL; bool atom_template_tmp = false; - const char *atom_template_conf = bc_trie_lookup(settings->settings, + const char *atom_template_conf = sb_trie_lookup(settings->settings, "atom_template"); if (atom_template_conf != NULL) { - atom_template = bc_strdup_printf("%s/%s", template_dir, atom_template_conf); + atom_template = sb_strdup_printf("%s/%s", template_dir, atom_template_conf); } else { atom_template = bm_atom_deploy(settings, err); @@ -215,7 +215,7 @@ bm_ctx_new(bm_ctx_t *base, const char *settings_file, const char *argv0, bm_ctx_t *rv = NULL; if (base == NULL) { - rv = bc_malloc(sizeof(bm_ctx_t)); + rv = sb_malloc(sizeof(bm_ctx_t)); rv->blogc = bm_exec_find_binary(argv0, "blogc", "BLOGC"); rv->blogc_runserver = bm_exec_find_binary(argv0, "blogc-runserver", "BLOGC_RUNSERVER"); @@ -229,23 +229,23 @@ bm_ctx_new(bm_ctx_t *base, const char *settings_file, const char *argv0, rv->settings = settings; rv->settings_fctx = bm_filectx_new(rv, abs_filename, NULL, NULL); - rv->root_dir = bc_strdup(dirname(abs_filename)); + rv->root_dir = sb_strdup(dirname(abs_filename)); free(abs_filename); const char *output_dir = getenv("OUTPUT_DIR"); - rv->short_output_dir = bc_strdup(output_dir != NULL ? output_dir : "_build"); + rv->short_output_dir = sb_strdup(output_dir != NULL ? output_dir : "_build"); if (rv->short_output_dir[0] == '/') { - rv->output_dir = bc_strdup(rv->short_output_dir); + rv->output_dir = sb_strdup(rv->short_output_dir); } else { - rv->output_dir = bc_strdup_printf("%s/%s", rv->root_dir, + rv->output_dir = sb_strdup_printf("%s/%s", rv->root_dir, rv->short_output_dir); } // can't return null and set error after this! - char *main_template = bc_strdup_printf("%s/%s", template_dir, + char *main_template = sb_strdup_printf("%s/%s", template_dir, bm_ctx_settings_lookup(rv, "main_template")); rv->main_template_fctx = bm_filectx_new(rv, main_template, NULL, NULL); free(main_template); @@ -271,7 +271,7 @@ bm_ctx_new(bm_ctx_t *base, const char *settings_file, const char *argv0, for (size_t i = 0; settings->posts[i] != NULL; i++) { char *f = bm_generate_filename(content_dir, post_prefix, settings->posts[i], source_ext); - rv->posts_fctx = bc_slist_append(rv->posts_fctx, + rv->posts_fctx = sb_slist_append(rv->posts_fctx, bm_filectx_new(rv, f, settings->posts[i], NULL)); free(f); } @@ -282,7 +282,7 @@ bm_ctx_new(bm_ctx_t *base, const char *settings_file, const char *argv0, for (size_t i = 0; settings->pages[i] != NULL; i++) { char *f = bm_generate_filename(content_dir, NULL, settings->pages[i], source_ext); - rv->pages_fctx = bc_slist_append(rv->pages_fctx, + rv->pages_fctx = sb_slist_append(rv->pages_fctx, bm_filectx_new(rv, f, settings->pages[i], NULL)); free(f); } @@ -312,13 +312,13 @@ bm_ctx_reload(bm_ctx_t **ctx) // files // needs to dup path, because it may be freed when reloading. - char *tmp = bc_strdup((*ctx)->settings_fctx->path); - bc_error_t *err = NULL; + char *tmp = sb_strdup((*ctx)->settings_fctx->path); + sb_error_t *err = NULL; *ctx = bm_ctx_new(*ctx, tmp, NULL, &err); free(tmp); if (err != NULL) { - bc_error_print(err, "blogc-make"); - bc_error_free(err); + fprintf(stderr, "blogc-make: error: %s\n", sb_error_to_string(err)); + sb_error_free(err); return false; } return true; @@ -328,13 +328,13 @@ bm_ctx_reload(bm_ctx_t **ctx) bm_filectx_reload((*ctx)->atom_template_fctx); bm_filectx_reload((*ctx)->listing_entry_fctx); - for (bc_slist_t *tmp = (*ctx)->posts_fctx; tmp != NULL; tmp = tmp->next) + for (sb_slist_t *tmp = (*ctx)->posts_fctx; tmp != NULL; tmp = tmp->next) bm_filectx_reload((bm_filectx_t*) tmp->data); - for (bc_slist_t *tmp = (*ctx)->pages_fctx; tmp != NULL; tmp = tmp->next) + for (sb_slist_t *tmp = (*ctx)->pages_fctx; tmp != NULL; tmp = tmp->next) bm_filectx_reload((bm_filectx_t*) tmp->data); - for (bc_slist_t *tmp = (*ctx)->copy_fctx; tmp != NULL; tmp = tmp->next) + for (sb_slist_t *tmp = (*ctx)->copy_fctx; tmp != NULL; tmp = tmp->next) bm_filectx_reload((bm_filectx_t*) tmp->data); return true; @@ -370,11 +370,11 @@ bm_ctx_free_internal(bm_ctx_t *ctx) bm_filectx_free(ctx->listing_entry_fctx); ctx->listing_entry_fctx = NULL; - bc_slist_free_full(ctx->posts_fctx, (bc_free_func_t) bm_filectx_free); + sb_slist_free_full(ctx->posts_fctx, (sb_free_func_t) bm_filectx_free); ctx->posts_fctx = NULL; - bc_slist_free_full(ctx->pages_fctx, (bc_free_func_t) bm_filectx_free); + sb_slist_free_full(ctx->pages_fctx, (sb_free_func_t) bm_filectx_free); ctx->pages_fctx = NULL; - bc_slist_free_full(ctx->copy_fctx, (bc_free_func_t) bm_filectx_free); + sb_slist_free_full(ctx->copy_fctx, (sb_free_func_t) bm_filectx_free); ctx->copy_fctx = NULL; } @@ -396,7 +396,7 @@ bm_ctx_settings_lookup(bm_ctx_t *ctx, const char *key) { if (ctx == NULL || ctx->settings == NULL || ctx->settings->settings == NULL) return NULL; - return bc_trie_lookup(ctx->settings->settings, key); + return sb_trie_lookup(ctx->settings->settings, key); } diff --git a/src/blogc-make/ctx.h b/src/blogc-make/ctx.h index a66d51c..c819b9e 100644 --- a/src/blogc-make/ctx.h +++ b/src/blogc-make/ctx.h @@ -12,9 +12,9 @@ #include <sys/stat.h> #include <stdbool.h> #include <time.h> +#include <squareball.h> + #include "settings.h" -#include "../common/error.h" -#include "../common/utils.h" #ifdef __APPLE__ #define st_mtim_tv_sec st_mtimespec.tv_sec @@ -62,19 +62,19 @@ typedef struct { bm_filectx_t *settings_fctx; bm_filectx_t *listing_entry_fctx; - bc_slist_t *posts_fctx; - bc_slist_t *pages_fctx; - bc_slist_t *copy_fctx; + sb_slist_t *posts_fctx; + sb_slist_t *pages_fctx; + sb_slist_t *copy_fctx; } bm_ctx_t; bm_filectx_t* bm_filectx_new(bm_ctx_t *ctx, const char *filename, const char *slug, struct stat *st); -bc_slist_t* bm_filectx_new_r(bc_slist_t *l, bm_ctx_t *ctx, const char *filename); +sb_slist_t* bm_filectx_new_r(sb_slist_t *l, bm_ctx_t *ctx, const char *filename); bool bm_filectx_changed(bm_filectx_t *ctx, time_t *tv_sec, long *tv_nsec); void bm_filectx_reload(bm_filectx_t *ctx); void bm_filectx_free(bm_filectx_t *fctx); bm_ctx_t* bm_ctx_new(bm_ctx_t *base, const char *settings_file, - const char *argv0, bc_error_t **err); + const char *argv0, sb_error_t **err); bool bm_ctx_reload(bm_ctx_t **ctx); void bm_ctx_free_internal(bm_ctx_t *ctx); void bm_ctx_free(bm_ctx_t *ctx); diff --git a/src/blogc-make/exec-native.c b/src/blogc-make/exec-native.c index 179216a..0278c00 100644 --- a/src/blogc-make/exec-native.c +++ b/src/blogc-make/exec-native.c @@ -16,11 +16,10 @@ #include <unistd.h> #include <libgen.h> #include <errno.h> -#include "../common/error.h" -#include "../common/file.h" -#include "../common/utils.h" -#include "exec-native.h" +#include <squareball.h> + #include "ctx.h" +#include "exec-native.h" int @@ -32,7 +31,7 @@ bm_exec_native_cp(bm_filectx_t *source, bm_filectx_t *dest, bool verbose) printf(" COPY %s\n", dest->short_path); fflush(stdout); - char *fname = bc_strdup(dest->path); + char *fname = sb_strdup(dest->path); for (char *tmp = fname; *tmp != '\0'; tmp++) { if (*tmp != '/' && *tmp != '\\') continue; @@ -67,8 +66,8 @@ bm_exec_native_cp(bm_filectx_t *source, bm_filectx_t *dest, bool verbose) } ssize_t nread; - char buffer[BC_FILE_CHUNK_SIZE]; - while (0 < (nread = read(fd_from, buffer, BC_FILE_CHUNK_SIZE))) { + char buffer[128]; + while (0 < (nread = read(fd_from, buffer, 128))) { char *out_ptr = buffer; do { ssize_t nwritten = write(fd_to, out_ptr, nread); @@ -89,7 +88,7 @@ bm_exec_native_cp(bm_filectx_t *source, bm_filectx_t *dest, bool verbose) bool -bm_exec_native_is_empty_dir(const char *dir, bc_error_t **err) +bm_exec_native_is_empty_dir(const char *dir, sb_error_t **err) { DIR *d = opendir(dir); if (d == NULL) { @@ -97,7 +96,7 @@ bm_exec_native_is_empty_dir(const char *dir, bc_error_t **err) return true; } if (err != NULL) { - *err = bc_error_new_printf(0, "failed to open directory (%s): %s\n", + *err = sb_strerror_new_printf("failed to open directory (%s): %s\n", dir, strerror(errno)); } return true; @@ -114,7 +113,7 @@ bm_exec_native_is_empty_dir(const char *dir, bc_error_t **err) if (0 != closedir(d)) { if (err != NULL) { - *err = bc_error_new_printf(0, "failed to close directory (%s): %s\n", + *err = sb_strerror_new_printf("failed to close directory (%s): %s\n", dir, strerror(errno)); } return true; @@ -143,16 +142,16 @@ bm_exec_native_rm(const char *output_dir, bm_filectx_t *dest, bool verbose) // blame freebsd's libc for all of those memory allocations around dirname // calls! - char *short_dir = bc_strdup(dirname(dest->short_path)); - char *dir = bc_strdup(dirname(dest->path)); + char *short_dir = sb_strdup(dirname(dest->short_path)); + char *dir = sb_strdup(dirname(dest->path)); - bc_error_t *err = NULL; + sb_error_t *err = NULL; while ((0 != strcmp(short_dir, ".")) && (0 != strcmp(short_dir, "/"))) { bool empty = bm_exec_native_is_empty_dir(dir, &err); if (err != NULL) { - fprintf(stderr, "blogc-make: error: %s\n", err->msg); - bc_error_free(err); + fprintf(stderr, "blogc-make: error: %s\n", sb_error_to_string(err)); + sb_error_free(err); rv = 1; break; } @@ -175,10 +174,10 @@ bm_exec_native_rm(const char *output_dir, bm_filectx_t *dest, bool verbose) } char *tmp = short_dir; - short_dir = bc_strdup(dirname(short_dir)); + short_dir = sb_strdup(dirname(short_dir)); free(tmp); tmp = dir; - dir = bc_strdup(dirname(dir)); + dir = sb_strdup(dirname(dir)); free(tmp); } diff --git a/src/blogc-make/exec-native.h b/src/blogc-make/exec-native.h index 56a1da1..7fe7575 100644 --- a/src/blogc-make/exec-native.h +++ b/src/blogc-make/exec-native.h @@ -10,11 +10,12 @@ #define _MAKE_EXEC_NATIVE_H #include <stdbool.h> -#include "../common/error.h" +#include <squareball.h> + #include "ctx.h" int bm_exec_native_cp(bm_filectx_t *source, bm_filectx_t *dest, bool verbose); -bool bm_exec_native_is_empty_dir(const char *dir, bc_error_t **err); +bool bm_exec_native_is_empty_dir(const char *dir, sb_error_t **err); int bm_exec_native_rm(const char *output_dir, bm_filectx_t *dest, bool verbose); #endif /* _MAKE_EXEC_NATIVE_H */ diff --git a/src/blogc-make/exec.c b/src/blogc-make/exec.c index 74af2ed..89d4b0a 100644 --- a/src/blogc-make/exec.c +++ b/src/blogc-make/exec.c @@ -19,13 +19,11 @@ #include <sysexits.h> #include <errno.h> #include <libgen.h> -#include "../common/compat.h" -#include "../common/error.h" -#include "../common/file.h" -#include "../common/utils.h" +#include <squareball.h> + #include "ctx.h" -#include "exec.h" #include "settings.h" +#include "exec.h" char* @@ -36,14 +34,14 @@ bm_exec_find_binary(const char *argv0, const char *bin, const char *env) // argv0, because the static binary may not be named `blogc`, and we // prefer to use our own `blogc` instead of some other version around. if (argv0 != NULL && bin != NULL && (0 == strcmp(bin, "blogc"))) { - return bc_shell_quote(argv0); + return sb_shell_quote(argv0); } #endif // first try: env var const char *env_bin = getenv(env); if (env_bin != NULL) { - return bc_shell_quote(env_bin); + return sb_shell_quote(env_bin); } // second try: same dir as current exec @@ -55,13 +53,13 @@ bm_exec_find_binary(const char *argv0, const char *bin, const char *env) // that relative paths will work as expected. // - windows path sep is not supported if (argv0 != NULL && (NULL != strchr(argv0, '/'))) { - char *path = bc_strdup(argv0); - char *dir = bc_strdup(dirname(path)); + char *path = sb_strdup(argv0); + char *dir = sb_strdup(dirname(path)); free(path); - char *tmp = bc_strdup_printf("%s/%s", dir, bin); + char *tmp = sb_strdup_printf("%s/%s", dir, bin); free(dir); if (0 == access(tmp, X_OK)) { - char *rv = bc_shell_quote(tmp); + char *rv = sb_shell_quote(tmp); free(tmp); return rv; } @@ -69,28 +67,28 @@ bm_exec_find_binary(const char *argv0, const char *bin, const char *env) } // last try: $PATH - return bc_strdup(bin); + return sb_strdup(bin); } int bm_exec_command(const char *cmd, const char *input, char **output, - char **error, bc_error_t **err) + char **error, sb_error_t **err) { if (err == NULL || *err != NULL) return 1; int fd_in[2]; if (-1 == pipe(fd_in)) { - *err = bc_error_new_printf(BLOGC_MAKE_ERROR_EXEC, - "Failed to create stdin pipe: %s", strerror(errno)); + *err = sb_strerror_new_printf( + "exec: Failed to create stdin pipe: %s", strerror(errno)); return 1; } int fd_out[2]; if (-1 == pipe(fd_out)) { - *err = bc_error_new_printf(BLOGC_MAKE_ERROR_EXEC, - "Failed to create stdout pipe: %s", strerror(errno)); + *err = sb_strerror_new_printf( + "exec: Failed to create stdout pipe: %s", strerror(errno)); close(fd_in[0]); close(fd_in[1]); return 1; @@ -98,8 +96,8 @@ bm_exec_command(const char *cmd, const char *input, char **output, int fd_err[2]; if (-1 == pipe(fd_err)) { - *err = bc_error_new_printf(BLOGC_MAKE_ERROR_EXEC, - "Failed to create stderr pipe: %s", strerror(errno)); + *err = sb_strerror_new_printf( + "exec: Failed to create stderr pipe: %s", strerror(errno)); close(fd_in[0]); close(fd_in[1]); close(fd_out[0]); @@ -109,8 +107,8 @@ bm_exec_command(const char *cmd, const char *input, char **output, pid_t pid = fork(); if (pid == -1) { - *err = bc_error_new_printf(BLOGC_MAKE_ERROR_EXEC, - "Failed to fork: %s", strerror(errno)); + *err = sb_strerror_new_printf( + "exec: Failed to fork: %s", strerror(errno)); close(fd_in[0]); close(fd_in[1]); close(fd_out[0]); @@ -149,8 +147,8 @@ bm_exec_command(const char *cmd, const char *input, char **output, if (input != NULL) { if (-1 == write(fd_in[1], input, strlen(input))) { - *err = bc_error_new_printf(BLOGC_MAKE_ERROR_EXEC, - "Failed to write to stdin pipe: %s", strerror(errno)); + *err = sb_strerror_new_printf( + "exec: Failed to write to stdin pipe: %s", strerror(errno)); close(fd_in[1]); close(fd_out[0]); close(fd_err[0]); @@ -160,145 +158,145 @@ bm_exec_command(const char *cmd, const char *input, char **output, close(fd_in[1]); - char buffer[BC_FILE_CHUNK_SIZE]; + char buffer[128]; ssize_t s; - bc_string_t *out = NULL; - while(0 != (s = read(fd_out[0], buffer, BC_FILE_CHUNK_SIZE))) { + sb_string_t *out = NULL; + while(0 != (s = read(fd_out[0], buffer, 128))) { if (s == -1) { - *err = bc_error_new_printf(BLOGC_MAKE_ERROR_EXEC, - "Failed to read from stdout pipe: %s", strerror(errno)); + *err = sb_strerror_new_printf( + "exec: Failed to read from stdout pipe: %s", strerror(errno)); close(fd_out[0]); close(fd_err[0]); - bc_string_free(out, true); + sb_string_free(out, true); return 1; } if (out == NULL) { - out = bc_string_new(); + out = sb_string_new(); } - bc_string_append_len(out, buffer, s); + sb_string_append_len(out, buffer, s); } if (out != NULL) { - *output = bc_string_free(out, false); + *output = sb_string_free(out, false); } close(fd_out[0]); out = NULL; - while(0 != (s = read(fd_err[0], buffer, BC_FILE_CHUNK_SIZE))) { + while(0 != (s = read(fd_err[0], buffer, 128))) { if (s == -1) { - *err = bc_error_new_printf(BLOGC_MAKE_ERROR_EXEC, - "Failed to read from stderr pipe: %s", strerror(errno)); + *err = sb_strerror_new_printf( + "exec: Failed to read from stderr pipe: %s", strerror(errno)); close(fd_err[0]); - bc_string_free(out, true); + sb_string_free(out, true); return 1; } if (out == NULL) - out = bc_string_new(); - bc_string_append_len(out, buffer, s); + out = sb_string_new(); + sb_string_append_len(out, buffer, s); } if (out != NULL) { - *error = bc_string_free(out, false); + *error = sb_string_free(out, false); } close(fd_err[0]); int status; waitpid(pid, &status, 0); - return bc_compat_status_code(status); + return sb_compat_status_code(status); } static void -list_variables(const char *key, const char *value, bc_string_t *str) +list_variables(const char *key, const char *value, sb_string_t *str) { - char *tmp = bc_shell_quote(value); - bc_string_append_printf(str, " -D %s=%s", key, tmp); + char *tmp = sb_shell_quote(value); + sb_string_append_printf(str, " -D %s=%s", key, tmp); free(tmp); } char* bm_exec_build_blogc_cmd(const char *blogc_bin, bm_settings_t *settings, - bc_trie_t *global_variables, bc_trie_t *local_variables, const char *print, + sb_trie_t *global_variables, sb_trie_t *local_variables, const char *print, bool listing, const char *listing_entry, const char *template, const char *output, bool dev, bool sources_stdin) { - bc_string_t *rv = bc_string_new(); + sb_string_t *rv = sb_string_new(); const char *locale = NULL; if (settings != NULL) { - locale = bc_trie_lookup(settings->settings, "locale"); + locale = sb_trie_lookup(settings->settings, "locale"); } if (locale != NULL) { - char *tmp = bc_shell_quote(locale); - bc_string_append_printf(rv, "LC_ALL=%s ", tmp); + char *tmp = sb_shell_quote(locale); + sb_string_append_printf(rv, "LC_ALL=%s ", tmp); free(tmp); } - bc_string_append(rv, blogc_bin); + sb_string_append(rv, blogc_bin); if (settings != NULL) { if (settings->tags != NULL) { - char *tags = bc_strv_join(settings->tags, " "); - bc_string_append_printf(rv, " -D MAKE_TAGS='%s'", tags); + char *tags = sb_strv_join(settings->tags, " "); + sb_string_append_printf(rv, " -D MAKE_TAGS='%s'", tags); free(tags); } - bc_trie_foreach(settings->global, - (bc_trie_foreach_func_t) list_variables, rv); + sb_trie_foreach(settings->global, + (sb_trie_foreach_func_t) list_variables, rv); } - bc_trie_foreach(global_variables, (bc_trie_foreach_func_t) list_variables, rv); - bc_trie_foreach(local_variables, (bc_trie_foreach_func_t) list_variables, rv); + sb_trie_foreach(global_variables, (sb_trie_foreach_func_t) list_variables, rv); + sb_trie_foreach(local_variables, (sb_trie_foreach_func_t) list_variables, rv); if (dev) { - bc_string_append(rv, " -D MAKE_ENV_DEV=1 -D MAKE_ENV='dev'"); + sb_string_append(rv, " -D MAKE_ENV_DEV=1 -D MAKE_ENV='dev'"); } if (print != NULL) { - bc_string_append_printf(rv, " -p %s", print); + sb_string_append_printf(rv, " -p %s", print); } if (listing) { - bc_string_append(rv, " -l"); + sb_string_append(rv, " -l"); if (listing_entry != NULL) { - char *tmp = bc_shell_quote(listing_entry); - bc_string_append_printf(rv, " -e %s", tmp); + char *tmp = sb_shell_quote(listing_entry); + sb_string_append_printf(rv, " -e %s", tmp); free(tmp); } } if (template != NULL) { - char *tmp = bc_shell_quote(template); - bc_string_append_printf(rv, " -t %s", tmp); + char *tmp = sb_shell_quote(template); + sb_string_append_printf(rv, " -t %s", tmp); free(tmp); } if (output != NULL) { - char *tmp = bc_shell_quote(output); - bc_string_append_printf(rv, " -o %s", tmp); + char *tmp = sb_shell_quote(output); + sb_string_append_printf(rv, " -o %s", tmp); free(tmp); } if (sources_stdin) { - bc_string_append(rv, " -i"); + sb_string_append(rv, " -i"); } - return bc_string_free(rv, false); + return sb_string_free(rv, false); } int -bm_exec_blogc(bm_ctx_t *ctx, bc_trie_t *global_variables, bc_trie_t *local_variables, +bm_exec_blogc(bm_ctx_t *ctx, sb_trie_t *global_variables, sb_trie_t *local_variables, bool listing, bm_filectx_t *listing_entry, bm_filectx_t *template, - bm_filectx_t *output, bc_slist_t *sources, bool only_first_source) + bm_filectx_t *output, sb_slist_t *sources, bool only_first_source) { if (ctx == NULL) return 1; - bc_string_t *input = bc_string_new(); - for (bc_slist_t *l = sources; l != NULL; l = l->next) { - bc_string_append_printf(input, "%s\n", ((bm_filectx_t*) l->data)->path); + sb_string_t *input = sb_string_new(); + for (sb_slist_t *l = sources; l != NULL; l = l->next) { + sb_string_append_printf(input, "%s\n", ((bm_filectx_t*) l->data)->path); if (only_first_source) break; } @@ -315,17 +313,17 @@ bm_exec_blogc(bm_ctx_t *ctx, bc_trie_t *global_variables, bc_trie_t *local_varia char *out = NULL; char *err = NULL; - bc_error_t *error = NULL; + sb_error_t *error = NULL; int rv = bm_exec_command(cmd, input->str, &out, &err, &error); if (error != NULL) { - bc_error_print(error, "blogc-make"); + fprintf(stderr, "blogc-make: error: %s\n", sb_error_to_string(error)); free(cmd); free(out); free(err); - bc_string_free(input, true); - bc_error_free(error); + sb_string_free(input, true); + sb_error_free(error); return 1; } @@ -339,21 +337,21 @@ bm_exec_blogc(bm_ctx_t *ctx, bc_trie_t *global_variables, bc_trie_t *local_varia "----------------------------->8-----------------------------\n" "%s\n" "----------------------------->8-----------------------------\n", - bc_str_strip(input->str)); + sb_str_strip(input->str)); } if (out != NULL) { fprintf(stderr, "\nSTDOUT:\n" "----------------------------->8-----------------------------\n" "%s\n" "----------------------------->8-----------------------------\n", - bc_str_strip(out)); + sb_str_strip(out)); } if (err != NULL) { fprintf(stderr, "\nSTDERR:\n" "----------------------------->8-----------------------------\n" "%s\n" "----------------------------->8-----------------------------\n", - bc_str_strip(err)); + sb_str_strip(err)); } fprintf(stderr, "\n"); } @@ -361,7 +359,7 @@ bm_exec_blogc(bm_ctx_t *ctx, bc_trie_t *global_variables, bc_trie_t *local_varia fprintf(stderr, "%s\n", err); } - bc_string_free(input, true); + sb_string_free(input, true); free(cmd); free(out); free(err); @@ -371,16 +369,16 @@ bm_exec_blogc(bm_ctx_t *ctx, bc_trie_t *global_variables, bc_trie_t *local_varia char* -bm_exec_blogc_get_variable(bm_ctx_t *ctx, bc_trie_t *global_variables, - bc_trie_t *local_variables, const char *variable, bool listing, - bc_slist_t *sources, bool only_first_source) +bm_exec_blogc_get_variable(bm_ctx_t *ctx, sb_trie_t *global_variables, + sb_trie_t *local_variables, const char *variable, bool listing, + sb_slist_t *sources, bool only_first_source) { if (ctx == NULL) return NULL; - bc_string_t *input = bc_string_new(); - for (bc_slist_t *l = sources; l != NULL; l = l->next) { - bc_string_append_printf(input, "%s\n", ((bm_filectx_t*) l->data)->path); + sb_string_t *input = sb_string_new(); + for (sb_slist_t *l = sources; l != NULL; l = l->next) { + sb_string_append_printf(input, "%s\n", ((bm_filectx_t*) l->data)->path); if (only_first_source) break; } @@ -394,14 +392,14 @@ bm_exec_blogc_get_variable(bm_ctx_t *ctx, bc_trie_t *global_variables, char *out = NULL; char *err = NULL; - bc_error_t *error = NULL; + sb_error_t *error = NULL; int rv = bm_exec_command(cmd, input->str, &out, &err, &error); if (error != NULL) { - bc_error_print(error, "blogc-make"); - bc_error_free(error); - bc_string_free(input, true); + fprintf(stderr, "blogc-make: error: %s\n", sb_error_to_string(error)); + sb_error_free(error); + sb_string_free(input, true); free(cmd); free(out); free(err); @@ -410,8 +408,8 @@ bm_exec_blogc_get_variable(bm_ctx_t *ctx, bc_trie_t *global_variables, if (rv != 0) { if (rv != EX_CONFIG) - fprintf(stderr, "blogc-make: error: %s\n", bc_str_strip(err)); - bc_string_free(input, true); + fprintf(stderr, "blogc-make: error: %s\n", sb_str_strip(err)); + sb_string_free(input, true); free(cmd); free(out); free(err); @@ -420,9 +418,9 @@ bm_exec_blogc_get_variable(bm_ctx_t *ctx, bc_trie_t *global_variables, char *val = NULL; if (out != NULL) - val = bc_strndup(out, strlen(out) - 1); + val = sb_strndup(out, strlen(out) - 1); - bc_string_free(input, true); + sb_string_free(input, true); free(cmd); free(out); free(err); @@ -438,30 +436,30 @@ bm_exec_blogc_runserver(bm_ctx_t *ctx, const char *host, const char *port, if (ctx == NULL) return 1; - bc_string_t *cmd = bc_string_new(); + sb_string_t *cmd = sb_string_new(); - bc_string_append(cmd, ctx->blogc_runserver); + sb_string_append(cmd, ctx->blogc_runserver); if (host != NULL) { - char *tmp = bc_shell_quote(host); - bc_string_append_printf(cmd, " -t %s", tmp); + char *tmp = sb_shell_quote(host); + sb_string_append_printf(cmd, " -t %s", tmp); free(tmp); } if (port != NULL) { - char *tmp = bc_shell_quote(port); - bc_string_append_printf(cmd, " -p %s", tmp); + char *tmp = sb_shell_quote(port); + sb_string_append_printf(cmd, " -p %s", tmp); free(tmp); } if (threads != NULL) { - char *tmp = bc_shell_quote(threads); - bc_string_append_printf(cmd, " -m %s", tmp); + char *tmp = sb_shell_quote(threads); + sb_string_append_printf(cmd, " -m %s", tmp); free(tmp); } - char *tmp = bc_shell_quote(ctx->output_dir); - bc_string_append_printf(cmd, " %s", tmp); + char *tmp = sb_shell_quote(ctx->output_dir); + sb_string_append_printf(cmd, " %s", tmp); free(tmp); if (ctx->verbose) @@ -472,8 +470,8 @@ bm_exec_blogc_runserver(bm_ctx_t *ctx, const char *host, const char *port, // we don't need pipes to run blogc-runserver, because it is "interactive" int status = system(cmd->str); - int rv = bc_compat_status_code(status); - bc_string_free(cmd, true); + int rv = sb_compat_status_code(status); + sb_string_free(cmd, true); if (rv != 0 && rv != 130) { if (rv == 127) { diff --git a/src/blogc-make/exec.h b/src/blogc-make/exec.h index 6bc206f..40d38b9 100644 --- a/src/blogc-make/exec.h +++ b/src/blogc-make/exec.h @@ -10,25 +10,25 @@ #define _MAKE_EXEC_H #include <stdbool.h> -#include "../common/error.h" -#include "../common/utils.h" +#include <squareball.h> + #include "ctx.h" #include "settings.h" char* bm_exec_find_binary(const char *argv0, const char *bin, const char *env); int bm_exec_command(const char *cmd, const char *input, char **output, - char **error, bc_error_t **err); + char **error, sb_error_t **err); char* bm_exec_build_blogc_cmd(const char *blogc_bin, bm_settings_t *settings, - bc_trie_t *global_variables, bc_trie_t *local_variables, const char *print, + sb_trie_t *global_variables, sb_trie_t *local_variables, const char *print, bool listing, const char *listing_entry, const char *template, const char *output, bool dev, bool sources_stdin); -int bm_exec_blogc(bm_ctx_t *ctx, bc_trie_t *global_variables, - bc_trie_t *local_variables, bool listing, bm_filectx_t *listing_entry, - bm_filectx_t *template, bm_filectx_t *output, bc_slist_t *sources, +int bm_exec_blogc(bm_ctx_t *ctx, sb_trie_t *global_variables, + sb_trie_t *local_variables, bool listing, bm_filectx_t *listing_entry, + bm_filectx_t *template, bm_filectx_t *output, sb_slist_t *sources, bool only_first_source); -char* bm_exec_blogc_get_variable(bm_ctx_t *ctx, bc_trie_t *global_variables, - bc_trie_t *local_variables, const char *variable, bool listing, - bc_slist_t *sources, bool only_first_source); +char* bm_exec_blogc_get_variable(bm_ctx_t *ctx, sb_trie_t *global_variables, + sb_trie_t *local_variables, const char *variable, bool listing, + sb_slist_t *sources, bool only_first_source); int bm_exec_blogc_runserver(bm_ctx_t *ctx, const char *host, const char *port, const char *threads); diff --git a/src/blogc-make/httpd.c b/src/blogc-make/httpd.c index adf9a9b..4412369 100644 --- a/src/blogc-make/httpd.c +++ b/src/blogc-make/httpd.c @@ -11,7 +11,8 @@ #include <string.h> #include <pthread.h> #include <unistd.h> -#include "../common/utils.h" +#include <squareball.h> + #include "ctx.h" #include "exec.h" #include "reloader.h" @@ -23,7 +24,7 @@ typedef struct { bm_ctx_t *ctx; - bc_trie_t *args; + sb_trie_t *args; } bm_httpd_t; @@ -32,8 +33,8 @@ httpd_thread(void *arg) { bm_httpd_t *httpd = arg; - int rv = bm_exec_blogc_runserver(httpd->ctx, bc_trie_lookup(httpd->args, "host"), - bc_trie_lookup(httpd->args, "port"), bc_trie_lookup(httpd->args, "threads")); + int rv = bm_exec_blogc_runserver(httpd->ctx, sb_trie_lookup(httpd->args, "host"), + sb_trie_lookup(httpd->args, "port"), sb_trie_lookup(httpd->args, "threads")); free(httpd); @@ -45,8 +46,8 @@ httpd_thread(void *arg) int -bm_httpd_run(bm_ctx_t **ctx, bm_rule_exec_func_t rule_exec, bc_slist_t *outputs, - bc_trie_t *args) +bm_httpd_run(bm_ctx_t **ctx, bm_rule_exec_func_t rule_exec, sb_slist_t *outputs, + sb_trie_t *args) { // this is here to avoid that the httpd starts running in the middle of the // first build, as the reloader and the httpd are started in parallel. @@ -76,7 +77,7 @@ bm_httpd_run(bm_ctx_t **ctx, bm_rule_exec_func_t rule_exec, bc_slist_t *outputs, return 1; } - bm_httpd_t *rv = bc_malloc(sizeof(bm_httpd_t)); + bm_httpd_t *rv = sb_malloc(sizeof(bm_httpd_t)); rv->ctx = *ctx; rv->args = args; diff --git a/src/blogc-make/httpd.h b/src/blogc-make/httpd.h index b0fa87d..2aa90b9 100644 --- a/src/blogc-make/httpd.h +++ b/src/blogc-make/httpd.h @@ -9,11 +9,12 @@ #ifndef _MAKE_HTTPD_H #define _MAKE_HTTPD_H -#include "../common/utils.h" +#include <squareball.h> + #include "ctx.h" #include "rules.h" -int bm_httpd_run(bm_ctx_t **ctx, bm_rule_exec_func_t rule_exec, bc_slist_t *outputs, - bc_trie_t *args); +int bm_httpd_run(bm_ctx_t **ctx, bm_rule_exec_func_t rule_exec, sb_slist_t *outputs, + sb_trie_t *args); #endif /* _MAKE_HTTPD_H */ diff --git a/src/blogc-make/main.c b/src/blogc-make/main.c index 5b4a030..9b4bce0 100644 --- a/src/blogc-make/main.c +++ b/src/blogc-make/main.c @@ -14,8 +14,8 @@ #include <stdbool.h> #include <stdio.h> #include <stdlib.h> -#include "../common/error.h" -#include "../common/utils.h" +#include <squareball.h> + #include "ctx.h" #include "rules.h" @@ -60,9 +60,9 @@ main(int argc, char **argv) setlocale(LC_ALL, ""); int rv = 0; - bc_error_t *err = NULL; + sb_error_t *err = NULL; - bc_slist_t *rules = NULL; + sb_slist_t *rules = NULL; bool verbose = false; bool dev = false; char *blogcfile = NULL; @@ -85,9 +85,9 @@ main(int argc, char **argv) break; case 'f': if (argv[i][2] != '\0') - blogcfile = bc_strdup(argv[i] + 2); + blogcfile = sb_strdup(argv[i] + 2); else if (i + 1 < argc) - blogcfile = bc_strdup(argv[++i]); + blogcfile = sb_strdup(argv[++i]); break; #ifdef MAKE_EMBEDDED case 'm': @@ -103,18 +103,18 @@ main(int argc, char **argv) } } else { - rules = bc_slist_append(rules, bc_strdup(argv[i])); + rules = sb_slist_append(rules, sb_strdup(argv[i])); } } if (rules == NULL) { - rules = bc_slist_append(rules, bc_strdup("all")); + rules = sb_slist_append(rules, sb_strdup("all")); } ctx = bm_ctx_new(NULL, blogcfile ? blogcfile : "blogcfile", argc > 0 ? argv[0] : NULL, &err); if (err != NULL) { - bc_error_print(err, "blogc-make"); + fprintf(stderr, "blogc-make: error: %s\n", sb_error_to_string(err)); rv = 1; goto cleanup; } @@ -125,10 +125,10 @@ main(int argc, char **argv) cleanup: - bc_slist_free_full(rules, free); + sb_slist_free_full(rules, free); free(blogcfile); bm_ctx_free(ctx); - bc_error_free(err); + sb_error_free(err); return rv; } diff --git a/src/blogc-make/reloader.c b/src/blogc-make/reloader.c index fea8bd4..2fcbaf9 100644 --- a/src/blogc-make/reloader.c +++ b/src/blogc-make/reloader.c @@ -14,7 +14,8 @@ #include <unistd.h> #include <pthread.h> #include <errno.h> -#include "../common/utils.h" +#include <squareball.h> + #include "ctx.h" #include "rules.h" #include "reloader.h" @@ -36,7 +37,7 @@ sig_handler(int signum) int bm_reloader_run(bm_ctx_t **ctx, bm_rule_exec_func_t rule_exec, - bc_slist_t *outputs, bc_trie_t *args) + sb_slist_t *outputs, sb_trie_t *args) { // install ^C handler struct sigaction current_action; diff --git a/src/blogc-make/reloader.h b/src/blogc-make/reloader.h index f3fddf4..95332db 100644 --- a/src/blogc-make/reloader.h +++ b/src/blogc-make/reloader.h @@ -9,12 +9,13 @@ #ifndef _MAKE_RELOADER_H #define _MAKE_RELOADER_H -#include "../common/utils.h" +#include <squareball.h> + #include "ctx.h" #include "rules.h" int bm_reloader_run(bm_ctx_t **ctx, bm_rule_exec_func_t rule_exec, - bc_slist_t *outputs, bc_trie_t *args); + sb_slist_t *outputs, sb_trie_t *args); void bm_reloader_stop(int status_code); #endif /* _MAKE_RELOADER_H */ diff --git a/src/blogc-make/rules.c b/src/blogc-make/rules.c index 06223c0..3b10bd2 100644 --- a/src/blogc-make/rules.c +++ b/src/blogc-make/rules.c @@ -11,7 +11,8 @@ #include <string.h> #include <stdlib.h> #include <time.h> -#include "../common/utils.h" +#include <squareball.h> + #include "atom.h" #include "ctx.h" #include "exec.h" @@ -24,36 +25,36 @@ static void -posts_ordering(bm_ctx_t *ctx, bc_trie_t *variables, const char *variable) +posts_ordering(bm_ctx_t *ctx, sb_trie_t *variables, const char *variable) { if (ctx == NULL) return; // something is wrong, let's not add any variable const char *value = bm_ctx_settings_lookup_str(ctx, variable); bool asc = 0 == strcasecmp(value, "asc"); - bool sort = bc_str_to_bool(bm_ctx_settings_lookup(ctx, "posts_sort")); + bool sort = sb_str_to_bool(bm_ctx_settings_lookup(ctx, "posts_sort")); if (sort) { - bc_trie_insert(variables, "FILTER_SORT", bc_strdup("1")); + sb_trie_insert(variables, "FILTER_SORT", sb_strdup("1")); } if ((sort && asc) || (!sort && !asc)) { - bc_trie_insert(variables, "FILTER_REVERSE", bc_strdup("1")); + sb_trie_insert(variables, "FILTER_REVERSE", sb_strdup("1")); } } static void -posts_pagination(bm_ctx_t *ctx, bc_trie_t *variables, const char *variable) +posts_pagination(bm_ctx_t *ctx, sb_trie_t *variables, const char *variable) { if (ctx == NULL) return; // something is wrong, let's not add any variable long posts_per_page = strtol(bm_ctx_settings_lookup_str(ctx, variable), NULL, 10); if (posts_per_page >= 0) { - bc_trie_insert(variables, "FILTER_PAGE", bc_strdup("1")); - bc_trie_insert(variables, "FILTER_PER_PAGE", - bc_strdup(bm_ctx_settings_lookup(ctx, variable))); + sb_trie_insert(variables, "FILTER_PAGE", sb_strdup("1")); + sb_trie_insert(variables, "FILTER_PER_PAGE", + sb_strdup(bm_ctx_settings_lookup(ctx, variable))); } } @@ -71,7 +72,7 @@ posts_pagination_enabled(bm_ctx_t *ctx, const char *variable) // INDEX RULE -static bc_slist_t* +static sb_slist_t* index_outputlist(bm_ctx_t *ctx) { if (ctx == NULL || ctx->settings->posts == NULL) @@ -80,36 +81,36 @@ index_outputlist(bm_ctx_t *ctx) if (!posts_pagination_enabled(ctx, "posts_per_page")) return NULL; - bc_slist_t *rv = NULL; + sb_slist_t *rv = NULL; const char *index_prefix = bm_ctx_settings_lookup(ctx, "index_prefix"); const char *html_ext = bm_ctx_settings_lookup(ctx, "html_ext"); char *f = bm_generate_filename(ctx->short_output_dir, index_prefix, NULL, html_ext); - rv = bc_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); + rv = sb_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); free(f); return rv; } static int -index_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) +index_exec(bm_ctx_t *ctx, sb_slist_t *outputs, sb_trie_t *args) { if (ctx == NULL || ctx->settings->posts == NULL) return 0; int rv = 0; - bc_trie_t *variables = bc_trie_new(free); + sb_trie_t *variables = sb_trie_new(free); posts_pagination(ctx, variables, "posts_per_page"); posts_ordering(ctx, variables, "html_order"); - bc_trie_insert(variables, "DATE_FORMAT", - bc_strdup(bm_ctx_settings_lookup_str(ctx, "date_format"))); - bc_trie_insert(variables, "MAKE_RULE", bc_strdup("index")); - bc_trie_insert(variables, "MAKE_TYPE", bc_strdup("post")); + sb_trie_insert(variables, "DATE_FORMAT", + sb_strdup(bm_ctx_settings_lookup_str(ctx, "date_format"))); + sb_trie_insert(variables, "MAKE_RULE", sb_strdup("index")); + sb_trie_insert(variables, "MAKE_TYPE", sb_strdup("post")); - for (bc_slist_t *l = outputs; l != NULL; l = l->next) { + for (sb_slist_t *l = outputs; l != NULL; l = l->next) { bm_filectx_t *fctx = l->data; if (fctx == NULL) continue; @@ -123,7 +124,7 @@ index_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) } } - bc_trie_free(variables); + sb_trie_free(variables); return rv; } @@ -131,7 +132,7 @@ index_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) // ATOM RULE -static bc_slist_t* +static sb_slist_t* atom_outputlist(bm_ctx_t *ctx) { if (ctx == NULL || ctx->settings->posts == NULL) @@ -140,35 +141,35 @@ atom_outputlist(bm_ctx_t *ctx) if (!posts_pagination_enabled(ctx, "atom_posts_per_page")) return NULL; - bc_slist_t *rv = NULL; + sb_slist_t *rv = NULL; const char *atom_prefix = bm_ctx_settings_lookup(ctx, "atom_prefix"); const char *atom_ext = bm_ctx_settings_lookup(ctx, "atom_ext"); char *f = bm_generate_filename(ctx->short_output_dir, atom_prefix, NULL, atom_ext); - rv = bc_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); + rv = sb_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); free(f); return rv; } static int -atom_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) +atom_exec(bm_ctx_t *ctx, sb_slist_t *outputs, sb_trie_t *args) { if (ctx == NULL || ctx->settings->posts == NULL) return 0; int rv = 0; - bc_trie_t *variables = bc_trie_new(free); + sb_trie_t *variables = sb_trie_new(free); posts_pagination(ctx, variables, "atom_posts_per_page"); posts_ordering(ctx, variables, "atom_order"); - bc_trie_insert(variables, "DATE_FORMAT", bc_strdup("%Y-%m-%dT%H:%M:%SZ")); - bc_trie_insert(variables, "MAKE_RULE", bc_strdup("atom")); - bc_trie_insert(variables, "MAKE_TYPE", bc_strdup("atom")); + sb_trie_insert(variables, "DATE_FORMAT", sb_strdup("%Y-%m-%dT%H:%M:%SZ")); + sb_trie_insert(variables, "MAKE_RULE", sb_strdup("atom")); + sb_trie_insert(variables, "MAKE_TYPE", sb_strdup("atom")); - for (bc_slist_t *l = outputs; l != NULL; l = l->next) { + for (sb_slist_t *l = outputs; l != NULL; l = l->next) { bm_filectx_t *fctx = l->data; if (fctx == NULL) continue; @@ -182,7 +183,7 @@ atom_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) } } - bc_trie_free(variables); + sb_trie_free(variables); return rv; } @@ -190,7 +191,7 @@ atom_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) // ATOM TAGS RULE -static bc_slist_t* +static sb_slist_t* atom_tags_outputlist(bm_ctx_t *ctx) { if (ctx == NULL || ctx->settings->posts == NULL || ctx->settings->tags == NULL) @@ -199,7 +200,7 @@ atom_tags_outputlist(bm_ctx_t *ctx) if (!posts_pagination_enabled(ctx, "atom_posts_per_page")) return NULL; - bc_slist_t *rv = NULL; + sb_slist_t *rv = NULL; const char *atom_prefix = bm_ctx_settings_lookup(ctx, "atom_prefix"); const char *atom_ext = bm_ctx_settings_lookup(ctx, "atom_ext"); @@ -207,7 +208,7 @@ atom_tags_outputlist(bm_ctx_t *ctx) for (size_t i = 0; ctx->settings->tags[i] != NULL; i++) { char *f = bm_generate_filename(ctx->short_output_dir, atom_prefix, ctx->settings->tags[i], atom_ext); - rv = bc_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); + rv = sb_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); free(f); } @@ -215,7 +216,7 @@ atom_tags_outputlist(bm_ctx_t *ctx) } static int -atom_tags_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) +atom_tags_exec(bm_ctx_t *ctx, sb_slist_t *outputs, sb_trie_t *args) { if (ctx == NULL || ctx->settings->posts == NULL || ctx->settings->tags == NULL) return 0; @@ -223,20 +224,20 @@ atom_tags_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) int rv = 0; size_t i = 0; - bc_trie_t *variables = bc_trie_new(free); + sb_trie_t *variables = sb_trie_new(free); posts_pagination(ctx, variables, "atom_posts_per_page"); posts_ordering(ctx, variables, "atom_order"); - bc_trie_insert(variables, "DATE_FORMAT", bc_strdup("%Y-%m-%dT%H:%M:%SZ")); - bc_trie_insert(variables, "MAKE_RULE", bc_strdup("atom_tags")); - bc_trie_insert(variables, "MAKE_TYPE", bc_strdup("atom")); + sb_trie_insert(variables, "DATE_FORMAT", sb_strdup("%Y-%m-%dT%H:%M:%SZ")); + sb_trie_insert(variables, "MAKE_RULE", sb_strdup("atom_tags")); + sb_trie_insert(variables, "MAKE_TYPE", sb_strdup("atom")); - for (bc_slist_t *l = outputs; l != NULL; l = l->next, i++) { + for (sb_slist_t *l = outputs; l != NULL; l = l->next, i++) { bm_filectx_t *fctx = l->data; if (fctx == NULL) continue; - bc_trie_insert(variables, "FILTER_TAG", - bc_strdup(ctx->settings->tags[i])); + sb_trie_insert(variables, "FILTER_TAG", + sb_strdup(ctx->settings->tags[i])); if (bm_rule_need_rebuild(ctx->posts_fctx, ctx->settings_fctx, NULL, NULL, fctx, false)) @@ -248,7 +249,7 @@ atom_tags_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) } } - bc_trie_free(variables); + sb_trie_free(variables); return rv; } @@ -256,7 +257,7 @@ atom_tags_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) // PAGINATION RULE -static bc_slist_t* +static sb_slist_t* pagination_outputlist(bm_ctx_t *ctx) { if (ctx == NULL || ctx->settings->posts == NULL) @@ -265,13 +266,13 @@ pagination_outputlist(bm_ctx_t *ctx) if (!posts_pagination_enabled(ctx, "posts_per_page")) return NULL; - bc_trie_t *variables = bc_trie_new(free); + sb_trie_t *variables = sb_trie_new(free); posts_pagination(ctx, variables, "posts_per_page"); char *last_page = bm_exec_blogc_get_variable(ctx, variables, NULL, "LAST_PAGE", true, ctx->posts_fctx, false); - bc_trie_free(variables); + sb_trie_free(variables); if (last_page == NULL) return NULL; @@ -279,16 +280,16 @@ pagination_outputlist(bm_ctx_t *ctx) long pages = strtol(last_page, NULL, 10); free(last_page); - bc_slist_t *rv = NULL; + sb_slist_t *rv = NULL; const char *pagination_prefix = bm_ctx_settings_lookup(ctx, "pagination_prefix"); const char *html_ext = bm_ctx_settings_lookup(ctx, "html_ext"); for (size_t i = 0; i < pages; i++) { - char *j = bc_strdup_printf("%d", i + 1); + char *j = sb_strdup_printf("%d", i + 1); char *f = bm_generate_filename(ctx->short_output_dir, pagination_prefix, j, html_ext); - rv = bc_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); + rv = sb_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); free(j); free(f); } @@ -297,7 +298,7 @@ pagination_outputlist(bm_ctx_t *ctx) } static int -pagination_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) +pagination_exec(bm_ctx_t *ctx, sb_slist_t *outputs, sb_trie_t *args) { if (ctx == NULL || ctx->settings->posts == NULL) return 0; @@ -305,22 +306,22 @@ pagination_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) int rv = 0; size_t page = 1; - bc_trie_t *variables = bc_trie_new(free); + sb_trie_t *variables = sb_trie_new(free); // not using posts_pagination because we set FILTER_PAGE anyway, and the // first value inserted in that function would be useless - bc_trie_insert(variables, "FILTER_PER_PAGE", - bc_strdup(bm_ctx_settings_lookup_str(ctx, "posts_per_page"))); + sb_trie_insert(variables, "FILTER_PER_PAGE", + sb_strdup(bm_ctx_settings_lookup_str(ctx, "posts_per_page"))); posts_ordering(ctx, variables, "html_order"); - bc_trie_insert(variables, "DATE_FORMAT", - bc_strdup(bm_ctx_settings_lookup_str(ctx, "date_format"))); - bc_trie_insert(variables, "MAKE_RULE", bc_strdup("pagination")); - bc_trie_insert(variables, "MAKE_TYPE", bc_strdup("post")); + sb_trie_insert(variables, "DATE_FORMAT", + sb_strdup(bm_ctx_settings_lookup_str(ctx, "date_format"))); + sb_trie_insert(variables, "MAKE_RULE", sb_strdup("pagination")); + sb_trie_insert(variables, "MAKE_TYPE", sb_strdup("post")); - for (bc_slist_t *l = outputs; l != NULL; l = l->next, page++) { + for (sb_slist_t *l = outputs; l != NULL; l = l->next, page++) { bm_filectx_t *fctx = l->data; if (fctx == NULL) continue; - bc_trie_insert(variables, "FILTER_PAGE", bc_strdup_printf("%zu", page)); + sb_trie_insert(variables, "FILTER_PAGE", sb_strdup_printf("%zu", page)); if (bm_rule_need_rebuild(ctx->posts_fctx, ctx->settings_fctx, ctx->listing_entry_fctx, ctx->main_template_fctx, fctx, false)) { @@ -331,7 +332,7 @@ pagination_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) } } - bc_trie_free(variables); + sb_trie_free(variables); return rv; } @@ -339,7 +340,7 @@ pagination_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) // PAGINATION TAGS RULE -static bc_slist_t* +static sb_slist_t* pagination_tags_outputlist(bm_ctx_t *ctx) { if (ctx == NULL || ctx->settings->posts == NULL || ctx->settings->tags == NULL) @@ -348,23 +349,23 @@ pagination_tags_outputlist(bm_ctx_t *ctx) if (!posts_pagination_enabled(ctx, "posts_per_page")) return NULL; - bc_trie_t *variables = bc_trie_new(free); + sb_trie_t *variables = sb_trie_new(free); posts_pagination(ctx, variables, "posts_per_page"); const char *tag_prefix = bm_ctx_settings_lookup(ctx, "tag_prefix"); const char *pagination_prefix = bm_ctx_settings_lookup(ctx, "pagination_prefix"); const char *html_ext = bm_ctx_settings_lookup(ctx, "html_ext"); - bc_slist_t *rv = NULL; + sb_slist_t *rv = NULL; for (size_t k = 0; ctx->settings->tags[k] != NULL; k++) { - bc_trie_t *local = bc_trie_new(free); - bc_trie_insert(local, "FILTER_TAG", bc_strdup(ctx->settings->tags[k])); + sb_trie_t *local = sb_trie_new(free); + sb_trie_insert(local, "FILTER_TAG", sb_strdup(ctx->settings->tags[k])); char *last_page = bm_exec_blogc_get_variable(ctx, variables, local, "LAST_PAGE", true, ctx->posts_fctx, false); - bc_trie_free(local); + sb_trie_free(local); if (last_page == NULL) continue; @@ -373,22 +374,22 @@ pagination_tags_outputlist(bm_ctx_t *ctx) free(last_page); for (size_t i = 0; i < pages; i++) { - char *j = bc_strdup_printf("%d", i + 1); + char *j = sb_strdup_printf("%d", i + 1); char *f = bm_generate_filename2(ctx->short_output_dir, tag_prefix, ctx->settings->tags[k], pagination_prefix, j, html_ext); - rv = bc_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); + rv = sb_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); free(j); free(f); } } - bc_trie_free(variables); + sb_trie_free(variables); return rv; } static int -pagination_tags_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) +pagination_tags_exec(bm_ctx_t *ctx, sb_slist_t *outputs, sb_trie_t *args) { if (ctx == NULL || ctx->settings->posts == NULL || ctx->settings->tags == NULL) return 0; @@ -396,22 +397,22 @@ pagination_tags_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) int rv = 0; size_t page = 1; - bc_trie_t *variables = bc_trie_new(free); + sb_trie_t *variables = sb_trie_new(free); // not using posts_pagination because we set FILTER_PAGE anyway, and the // first value inserted in that function would be useless - bc_trie_insert(variables, "FILTER_PER_PAGE", - bc_strdup(bm_ctx_settings_lookup_str(ctx, "posts_per_page"))); + sb_trie_insert(variables, "FILTER_PER_PAGE", + sb_strdup(bm_ctx_settings_lookup_str(ctx, "posts_per_page"))); posts_ordering(ctx, variables, "html_order"); - bc_trie_insert(variables, "DATE_FORMAT", - bc_strdup(bm_ctx_settings_lookup_str(ctx, "date_format"))); - bc_trie_insert(variables, "MAKE_RULE", bc_strdup("pagination_tags")); - bc_trie_insert(variables, "MAKE_TYPE", bc_strdup("post")); + sb_trie_insert(variables, "DATE_FORMAT", + sb_strdup(bm_ctx_settings_lookup_str(ctx, "date_format"))); + sb_trie_insert(variables, "MAKE_RULE", sb_strdup("pagination_tags")); + sb_trie_insert(variables, "MAKE_TYPE", sb_strdup("post")); const char *tag_prefix = bm_ctx_settings_lookup(ctx, "tag_prefix"); const char *pagination_prefix = bm_ctx_settings_lookup(ctx, "pagination_prefix"); const char *html_ext = bm_ctx_settings_lookup(ctx, "html_ext"); - for (bc_slist_t *l = outputs; l != NULL; l = l->next) { + for (sb_slist_t *l = outputs; l != NULL; l = l->next) { bm_filectx_t *fctx = l->data; if (fctx == NULL) continue; @@ -424,8 +425,8 @@ pagination_tags_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) // it is impossible to have more output files per tag than the whole // amount of output pages - for (size_t k = 1; k <= bc_slist_length(outputs); k++) { - char *j = bc_strdup_printf("%d", k); + for (size_t k = 1; k <= sb_slist_length(outputs); k++) { + char *j = sb_strdup_printf("%d", k); char *f = bm_generate_filename2(ctx->short_output_dir, tag_prefix, ctx->settings->tags[i], pagination_prefix, j, html_ext); free(j); @@ -444,8 +445,8 @@ pagination_tags_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) if (tag == NULL) continue; - bc_trie_insert(variables, "FILTER_TAG", bc_strdup(tag)); - bc_trie_insert(variables, "FILTER_PAGE", bc_strdup_printf("%zu", page)); + sb_trie_insert(variables, "FILTER_TAG", sb_strdup(tag)); + sb_trie_insert(variables, "FILTER_PAGE", sb_strdup_printf("%zu", page)); if (bm_rule_need_rebuild(ctx->posts_fctx, ctx->settings_fctx, ctx->listing_entry_fctx, ctx->main_template_fctx, fctx, false)) @@ -457,7 +458,7 @@ pagination_tags_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) } } - bc_trie_free(variables); + sb_trie_free(variables); return rv; } @@ -465,13 +466,13 @@ pagination_tags_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) // POSTS RULE -static bc_slist_t* +static sb_slist_t* posts_outputlist(bm_ctx_t *ctx) { if (ctx == NULL || ctx->settings->posts == NULL) return NULL; - bc_slist_t *rv = NULL; + sb_slist_t *rv = NULL; const char *post_prefix = bm_ctx_settings_lookup(ctx, "post_prefix"); const char *html_ext = bm_ctx_settings_lookup(ctx, "html_ext"); @@ -479,7 +480,7 @@ posts_outputlist(bm_ctx_t *ctx) for (size_t i = 0; ctx->settings->posts[i] != NULL; i++) { char *f = bm_generate_filename(ctx->short_output_dir, post_prefix, ctx->settings->posts[i], html_ext); - rv = bc_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); + rv = sb_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); free(f); } @@ -487,22 +488,22 @@ posts_outputlist(bm_ctx_t *ctx) } static int -posts_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) +posts_exec(bm_ctx_t *ctx, sb_slist_t *outputs, sb_trie_t *args) { if (ctx == NULL || ctx->settings->posts == NULL) return 0; int rv = 0; - bc_trie_t *variables = bc_trie_new(free); - bc_trie_insert(variables, "IS_POST", bc_strdup("1")); - bc_trie_insert(variables, "DATE_FORMAT", - bc_strdup(bm_ctx_settings_lookup(ctx, "date_format"))); + sb_trie_t *variables = sb_trie_new(free); + sb_trie_insert(variables, "IS_POST", sb_strdup("1")); + sb_trie_insert(variables, "DATE_FORMAT", + sb_strdup(bm_ctx_settings_lookup(ctx, "date_format"))); posts_ordering(ctx, variables, "html_order"); - bc_trie_insert(variables, "MAKE_RULE", bc_strdup("posts")); - bc_trie_insert(variables, "MAKE_TYPE", bc_strdup("post")); + sb_trie_insert(variables, "MAKE_RULE", sb_strdup("posts")); + sb_trie_insert(variables, "MAKE_TYPE", sb_strdup("post")); - bc_slist_t *s, *o; + sb_slist_t *s, *o; for (s = ctx->posts_fctx, o = outputs; s != NULL && o != NULL; s = s->next, o = o->next) @@ -514,17 +515,17 @@ posts_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) if (bm_rule_need_rebuild(s, ctx->settings_fctx, NULL, ctx->main_template_fctx, o_fctx, true)) { - bc_trie_t *local = bc_trie_new(NULL); - bc_trie_insert(local, "MAKE_SLUG", s_fctx->slug); // no need to copy + sb_trie_t *local = sb_trie_new(NULL); + sb_trie_insert(local, "MAKE_SLUG", s_fctx->slug); // no need to copy rv = bm_exec_blogc(ctx, variables, local, false, NULL, ctx->main_template_fctx, o_fctx, s, true); - bc_trie_free(local); + sb_trie_free(local); if (rv != 0) break; } } - bc_trie_free(variables); + sb_trie_free(variables); return rv; } @@ -532,7 +533,7 @@ posts_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) // TAGS RULE -static bc_slist_t* +static sb_slist_t* tags_outputlist(bm_ctx_t *ctx) { if (ctx == NULL || ctx->settings->posts == NULL || ctx->settings->tags == NULL) @@ -541,7 +542,7 @@ tags_outputlist(bm_ctx_t *ctx) if (!posts_pagination_enabled(ctx, "posts_per_page")) return NULL; - bc_slist_t *rv = NULL; + sb_slist_t *rv = NULL; const char *tag_prefix = bm_ctx_settings_lookup(ctx, "tag_prefix"); const char *html_ext = bm_ctx_settings_lookup(ctx, "html_ext"); @@ -549,7 +550,7 @@ tags_outputlist(bm_ctx_t *ctx) for (size_t i = 0; ctx->settings->tags[i] != NULL; i++) { char *f = bm_generate_filename(ctx->short_output_dir, tag_prefix, ctx->settings->tags[i], html_ext); - rv = bc_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); + rv = sb_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); free(f); } @@ -557,7 +558,7 @@ tags_outputlist(bm_ctx_t *ctx) } static int -tags_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) +tags_exec(bm_ctx_t *ctx, sb_slist_t *outputs, sb_trie_t *args) { if (ctx == NULL || ctx->settings->posts == NULL || ctx->settings->tags == NULL) return 0; @@ -565,21 +566,21 @@ tags_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) int rv = 0; size_t i = 0; - bc_trie_t *variables = bc_trie_new(free); + sb_trie_t *variables = sb_trie_new(free); posts_pagination(ctx, variables, "posts_per_page"); posts_ordering(ctx, variables, "html_order"); - bc_trie_insert(variables, "DATE_FORMAT", - bc_strdup(bm_ctx_settings_lookup_str(ctx, "date_format"))); - bc_trie_insert(variables, "MAKE_RULE", bc_strdup("tags")); - bc_trie_insert(variables, "MAKE_TYPE", bc_strdup("post")); + sb_trie_insert(variables, "DATE_FORMAT", + sb_strdup(bm_ctx_settings_lookup_str(ctx, "date_format"))); + sb_trie_insert(variables, "MAKE_RULE", sb_strdup("tags")); + sb_trie_insert(variables, "MAKE_TYPE", sb_strdup("post")); - for (bc_slist_t *l = outputs; l != NULL; l = l->next, i++) { + for (sb_slist_t *l = outputs; l != NULL; l = l->next, i++) { bm_filectx_t *fctx = l->data; if (fctx == NULL) continue; - bc_trie_insert(variables, "FILTER_TAG", - bc_strdup(ctx->settings->tags[i])); + sb_trie_insert(variables, "FILTER_TAG", + sb_strdup(ctx->settings->tags[i])); if (bm_rule_need_rebuild(ctx->posts_fctx, ctx->settings_fctx, ctx->listing_entry_fctx, ctx->main_template_fctx, fctx, false)) @@ -591,7 +592,7 @@ tags_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) } } - bc_trie_free(variables); + sb_trie_free(variables); return rv; } @@ -599,20 +600,20 @@ tags_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) // PAGES RULE -static bc_slist_t* +static sb_slist_t* pages_outputlist(bm_ctx_t *ctx) { if (ctx == NULL || ctx->settings->pages == NULL) return NULL; - bc_slist_t *rv = NULL; + sb_slist_t *rv = NULL; const char *html_ext = bm_ctx_settings_lookup(ctx, "html_ext"); for (size_t i = 0; ctx->settings->pages[i] != NULL; i++) { char *f = bm_generate_filename(ctx->short_output_dir, NULL, ctx->settings->pages[i], html_ext); - rv = bc_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); + rv = sb_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); free(f); } @@ -620,20 +621,20 @@ pages_outputlist(bm_ctx_t *ctx) } static int -pages_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) +pages_exec(bm_ctx_t *ctx, sb_slist_t *outputs, sb_trie_t *args) { if (ctx == NULL || ctx->settings->pages == NULL) return 0; int rv = 0; - bc_trie_t *variables = bc_trie_new(free); - bc_trie_insert(variables, "DATE_FORMAT", - bc_strdup(bm_ctx_settings_lookup(ctx, "date_format"))); - bc_trie_insert(variables, "MAKE_RULE", bc_strdup("pages")); - bc_trie_insert(variables, "MAKE_TYPE", bc_strdup("page")); + sb_trie_t *variables = sb_trie_new(free); + sb_trie_insert(variables, "DATE_FORMAT", + sb_strdup(bm_ctx_settings_lookup(ctx, "date_format"))); + sb_trie_insert(variables, "MAKE_RULE", sb_strdup("pages")); + sb_trie_insert(variables, "MAKE_TYPE", sb_strdup("page")); - bc_slist_t *s, *o; + sb_slist_t *s, *o; for (s = ctx->pages_fctx, o = outputs; s != NULL && o != NULL; s = s->next, o = o->next) @@ -645,17 +646,17 @@ pages_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) if (bm_rule_need_rebuild(s, ctx->settings_fctx, NULL, ctx->main_template_fctx, o_fctx, true)) { - bc_trie_t *local = bc_trie_new(NULL); - bc_trie_insert(local, "MAKE_SLUG", s_fctx->slug); // no need to copy + sb_trie_t *local = sb_trie_new(NULL); + sb_trie_insert(local, "MAKE_SLUG", s_fctx->slug); // no need to copy rv = bm_exec_blogc(ctx, variables, local, false, NULL, ctx->main_template_fctx, o_fctx, s, true); - bc_trie_free(local); + sb_trie_free(local); if (rv != 0) break; } } - bc_trie_free(variables); + sb_trie_free(variables); return rv; } @@ -663,20 +664,20 @@ pages_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) // COPY FILES RULE -static bc_slist_t* +static sb_slist_t* copy_outputlist(bm_ctx_t *ctx) { if (ctx == NULL || ctx->settings->copy == NULL) return NULL; - bc_slist_t *rv = NULL; + sb_slist_t *rv = NULL; // we iterate over ctx->copy_fctx list instead of ctx->settings->copy, // because bm_ctx_new() expands directories into its files, recursively. - for (bc_slist_t *s = ctx->copy_fctx; s != NULL; s = s->next) { - char *f = bc_strdup_printf("%s/%s", ctx->short_output_dir, + for (sb_slist_t *s = ctx->copy_fctx; s != NULL; s = s->next) { + char *f = sb_strdup_printf("%s/%s", ctx->short_output_dir, ((bm_filectx_t*) s->data)->short_path); - rv = bc_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); + rv = sb_slist_append(rv, bm_filectx_new(ctx, f, NULL, NULL)); free(f); } @@ -684,14 +685,14 @@ copy_outputlist(bm_ctx_t *ctx) } static int -copy_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) +copy_exec(bm_ctx_t *ctx, sb_slist_t *outputs, sb_trie_t *args) { if (ctx == NULL || ctx->settings->copy == NULL) return 0; int rv = 0; - bc_slist_t *s, *o; + sb_slist_t *s, *o; for (s = ctx->copy_fctx, o = outputs; s != NULL && o != NULL; s = s->next, o = o->next) @@ -713,18 +714,18 @@ copy_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) // CLEAN RULE -static bc_slist_t* +static sb_slist_t* clean_outputlist(bm_ctx_t *ctx) { return bm_rule_list_built_files(ctx); } static int -clean_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) +clean_exec(bm_ctx_t *ctx, sb_slist_t *outputs, sb_trie_t *args) { int rv = 0; - for (bc_slist_t *l = outputs; l != NULL; l = l->next) { + for (sb_slist_t *l = outputs; l != NULL; l = l->next) { bm_filectx_t *fctx = l->data; if (fctx == NULL) continue; @@ -744,13 +745,13 @@ clean_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) } -static int all_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args); +static int all_exec(bm_ctx_t *ctx, sb_slist_t *outputs, sb_trie_t *args); // RUNSERVER RULE static int -runserver_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) +runserver_exec(bm_ctx_t *ctx, sb_slist_t *outputs, sb_trie_t *args) { return bm_httpd_run(&ctx, all_exec, outputs, args); } @@ -759,7 +760,7 @@ runserver_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) // WATCH RULE static int -watch_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) +watch_exec(bm_ctx_t *ctx, sb_slist_t *outputs, sb_trie_t *args) { return bm_reloader_run(&ctx, all_exec, outputs, args); } @@ -768,7 +769,7 @@ watch_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) // ATOM DUMP RULE static int -atom_dump_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) +atom_dump_exec(bm_ctx_t *ctx, sb_slist_t *outputs, sb_trie_t *args) { char *content = bm_atom_generate(ctx->settings); if (content == NULL) @@ -887,7 +888,7 @@ const bm_rule_t rules[] = { // ALL RULE static int -all_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) +all_exec(bm_ctx_t *ctx, sb_slist_t *outputs, sb_trie_t *args) { for (size_t i = 0; rules[i].name != NULL; i++) { if (!rules[i].generate_files) { @@ -904,30 +905,30 @@ all_exec(bm_ctx_t *ctx, bc_slist_t *outputs, bc_trie_t *args) } -bc_trie_t* +sb_trie_t* bm_rule_parse_args(const char *sep) { if (sep == NULL || *sep == '\0' || *sep != ':') return NULL; - bc_trie_t *rv = bc_trie_new(free); + sb_trie_t *rv = sb_trie_new(free); char *end = (char*) sep + 1; char *kv_sep; while (NULL != (kv_sep = strchr(end, '='))) { - char *key = bc_strndup(end, kv_sep - end); + char *key = sb_strndup(end, kv_sep - end); end = kv_sep + 1; kv_sep = strchr(end, ','); if (kv_sep == NULL) kv_sep = strchr(end, '\0'); - char *value = bc_strndup(end, kv_sep - end); - bc_trie_insert(rv, key, value); + char *value = sb_strndup(end, kv_sep - end); + sb_trie_insert(rv, key, value); free(key); if (*kv_sep == '\0') break; end = kv_sep + 1; } if (kv_sep == NULL) { - bc_trie_free(rv); + sb_trie_free(rv); return NULL; } @@ -936,7 +937,7 @@ bm_rule_parse_args(const char *sep) int -bm_rule_executor(bm_ctx_t *ctx, bc_slist_t *rule_list) +bm_rule_executor(bm_ctx_t *ctx, sb_slist_t *rule_list) { if (ctx == NULL) return 1; @@ -944,12 +945,12 @@ bm_rule_executor(bm_ctx_t *ctx, bc_slist_t *rule_list) const bm_rule_t *rule = NULL; int rv = 0; - for (bc_slist_t *l = rule_list; l != NULL; l = l->next) { + for (sb_slist_t *l = rule_list; l != NULL; l = l->next) { char *rule_str = l->data; char *sep = strchr(rule_str, ':'); - bc_trie_t *args = NULL; + sb_trie_t *args = NULL; if (sep == NULL) { sep = strchr(rule_str, '\0'); } @@ -985,26 +986,26 @@ bm_rule_executor(bm_ctx_t *ctx, bc_slist_t *rule_list) int -bm_rule_execute(bm_ctx_t *ctx, const bm_rule_t *rule, bc_trie_t *args) +bm_rule_execute(bm_ctx_t *ctx, const bm_rule_t *rule, sb_trie_t *args) { if (ctx == NULL || rule == NULL) return 1; - bc_slist_t *outputs = NULL; + sb_slist_t *outputs = NULL; if (rule->outputlist_func != NULL) { outputs = rule->outputlist_func(ctx); } int rv = rule->exec_func(ctx, outputs, args); - bc_slist_free_full(outputs, (bc_free_func_t) bm_filectx_free); + sb_slist_free_full(outputs, (sb_free_func_t) bm_filectx_free); return rv; } bool -bm_rule_need_rebuild(bc_slist_t *sources, bm_filectx_t *settings, +bm_rule_need_rebuild(sb_slist_t *sources, bm_filectx_t *settings, bm_filectx_t *listing_entry, bm_filectx_t *template, bm_filectx_t *output, bool only_first_source) { @@ -1013,21 +1014,21 @@ bm_rule_need_rebuild(bc_slist_t *sources, bm_filectx_t *settings, bool rv = false; - bc_slist_t *s = NULL; + sb_slist_t *s = NULL; if (settings != NULL) - s = bc_slist_append(s, settings); + s = sb_slist_append(s, settings); if (template != NULL) - s = bc_slist_append(s, template); + s = sb_slist_append(s, template); if (listing_entry != NULL) - s = bc_slist_append(s, listing_entry); + s = sb_slist_append(s, listing_entry); - for (bc_slist_t *l = sources; l != NULL; l = l->next) { - s = bc_slist_append(s, l->data); + for (sb_slist_t *l = sources; l != NULL; l = l->next) { + s = sb_slist_append(s, l->data); if (only_first_source) break; } - for (bc_slist_t *l = s; l != NULL; l = l->next) { + for (sb_slist_t *l = s; l != NULL; l = l->next) { bm_filectx_t *source = l->data; if (source == NULL || !source->readable) { // this is unlikely to happen, but lets just say that we need @@ -1047,29 +1048,29 @@ bm_rule_need_rebuild(bc_slist_t *sources, bm_filectx_t *settings, } } - bc_slist_free(s); + sb_slist_free(s); return rv; } -bc_slist_t* +sb_slist_t* bm_rule_list_built_files(bm_ctx_t *ctx) { if (ctx == NULL) return NULL; - bc_slist_t *rv = NULL; + sb_slist_t *rv = NULL; for (size_t i = 0; rules[i].name != NULL; i++) { if (!rules[i].generate_files) { continue; } - bc_slist_t *o = rules[i].outputlist_func(ctx); - for (bc_slist_t *l = o; l != NULL; l = l->next) { - rv = bc_slist_append(rv, l->data); + sb_slist_t *o = rules[i].outputlist_func(ctx); + for (sb_slist_t *l = o; l != NULL; l = l->next) { + rv = sb_slist_append(rv, l->data); } - bc_slist_free(o); + sb_slist_free(o); } return rv; diff --git a/src/blogc-make/rules.h b/src/blogc-make/rules.h index 29ba27e..d532084 100644 --- a/src/blogc-make/rules.h +++ b/src/blogc-make/rules.h @@ -10,12 +10,13 @@ #define _MAKE_RULES_H #include <stdbool.h> +#include <squareball.h> + #include "ctx.h" -#include "../common/utils.h" -typedef bc_slist_t* (*bm_rule_outputlist_func_t) (bm_ctx_t *ctx); -typedef int (*bm_rule_exec_func_t) (bm_ctx_t *ctx, bc_slist_t *outputs, - bc_trie_t *args); +typedef sb_slist_t* (*bm_rule_outputlist_func_t) (bm_ctx_t *ctx); +typedef int (*bm_rule_exec_func_t) (bm_ctx_t *ctx, sb_slist_t *outputs, + sb_trie_t *args); typedef struct { const char *name; @@ -25,13 +26,13 @@ typedef struct { bool generate_files; } bm_rule_t; -bc_trie_t* bm_rule_parse_args(const char *sep); -int bm_rule_executor(bm_ctx_t *ctx, bc_slist_t *rule_list); -int bm_rule_execute(bm_ctx_t *ctx, const bm_rule_t *rule, bc_trie_t *args); -bool bm_rule_need_rebuild(bc_slist_t *sources, bm_filectx_t *settings, +sb_trie_t* bm_rule_parse_args(const char *sep); +int bm_rule_executor(bm_ctx_t *ctx, sb_slist_t *rule_list); +int bm_rule_execute(bm_ctx_t *ctx, const bm_rule_t *rule, sb_trie_t *args); +bool bm_rule_need_rebuild(sb_slist_t *sources, bm_filectx_t *settings, bm_filectx_t *listing_entry, bm_filectx_t *template, bm_filectx_t *output, bool only_first_source); -bc_slist_t* bm_rule_list_built_files(bm_ctx_t *ctx); +sb_slist_t* bm_rule_list_built_files(bm_ctx_t *ctx); void bm_rule_print_help(void); #endif /* _MAKE_RULES_H */ diff --git a/src/blogc-make/settings.c b/src/blogc-make/settings.c index be976e3..796f1b4 100644 --- a/src/blogc-make/settings.c +++ b/src/blogc-make/settings.c @@ -9,10 +9,8 @@ #include <libgen.h> #include <stdbool.h> #include <stdlib.h> -#include "../common/config-parser.h" -#include "../common/error.h" -#include "../common/file.h" -#include "../common/utils.h" +#include <squareball.h> + #include "settings.h" @@ -77,7 +75,7 @@ static const char* list_sections[] = { bm_settings_t* -bm_settings_parse(const char *content, size_t content_len, bc_error_t **err) +bm_settings_parse(const char *content, size_t content_len, sb_error_t **err) { if (err == NULL || *err != NULL) return NULL; @@ -85,14 +83,14 @@ bm_settings_parse(const char *content, size_t content_len, bc_error_t **err) if (content == NULL) return NULL; - bc_config_t *config = bc_config_parse(content, content_len, list_sections, + sb_config_t *config = sb_config_parse(content, content_len, list_sections, err); if (config == NULL || (err != NULL && *err != NULL)) return NULL; - bm_settings_t *rv = bc_malloc(sizeof(bm_settings_t)); - rv->global = bc_trie_new(free); - rv->settings = bc_trie_new(free); + bm_settings_t *rv = sb_malloc(sizeof(bm_settings_t)); + rv->global = sb_trie_new(free); + rv->settings = sb_trie_new(free); rv->posts = NULL; rv->pages = NULL; rv->copy = NULL; @@ -102,12 +100,12 @@ bm_settings_parse(const char *content, size_t content_len, bc_error_t **err) // even if I never released a version with it, but some people is using // it already. const char *section = NULL; - char **global = bc_config_list_keys(config, "global"); + char **global = sb_config_list_keys(config, "global"); if (global != NULL) { section = "global"; } else { - global = bc_config_list_keys(config, "environment"); + global = sb_config_list_keys(config, "environment"); if (global != NULL) { section = "environment"; } @@ -120,25 +118,25 @@ bm_settings_parse(const char *content, size_t content_len, bc_error_t **err) for (size_t i = 0; global[i] != NULL; i++) { for (size_t j = 0; global[i][j] != '\0'; j++) { if (!((global[i][j] >= 'A' && global[i][j] <= 'Z') || global[i][j] == '_')) { - *err = bc_error_new_printf(BLOGC_MAKE_ERROR_SETTINGS, - "Invalid [%s] key: %s", section, global[i]); - bc_strv_free(global); + *err = sb_strerror_new_printf( + "settings: Invalid [%s] key: %s", section, global[i]); + sb_strv_free(global); bm_settings_free(rv); rv = NULL; goto cleanup; } } - bc_trie_insert(rv->global, global[i], - bc_strdup(bc_config_get(config, section, global[i]))); + sb_trie_insert(rv->global, global[i], + sb_strdup(sb_config_get(config, section, global[i]))); } } - bc_strv_free(global); + sb_strv_free(global); for (size_t i = 0; required_global[i] != NULL; i++) { - const char *value = bc_trie_lookup(rv->global, required_global[i]); + const char *value = sb_trie_lookup(rv->global, required_global[i]); if (value == NULL || value[0] == '\0') { - *err = bc_error_new_printf(BLOGC_MAKE_ERROR_SETTINGS, - "[%s] key required but not found or empty: %s", section, + *err = sb_strerror_new_printf( + "settings: [%s] key required but not found or empty: %s", section, required_global[i]); bm_settings_free(rv); rv = NULL; @@ -147,27 +145,27 @@ bm_settings_parse(const char *content, size_t content_len, bc_error_t **err) } for (size_t i = 0; default_settings[i].key != NULL; i++) { - const char *value = bc_config_get_with_default( + const char *value = sb_config_get_with_default( config, "settings", default_settings[i].key, default_settings[i].default_value); if (value != NULL) { - bc_trie_insert(rv->settings, default_settings[i].key, - bc_strdup(value)); + sb_trie_insert(rv->settings, default_settings[i].key, + sb_strdup(value)); } } - rv->posts = bc_config_get_list(config, "posts"); - rv->pages = bc_config_get_list(config, "pages"); - rv->tags = bc_config_get_list(config, "tags"); + rv->posts = sb_config_get_list(config, "posts"); + rv->pages = sb_config_get_list(config, "pages"); + rv->tags = sb_config_get_list(config, "tags"); // this is for backward compatibility too. - rv->copy = bc_config_get_list(config, "copy"); + rv->copy = sb_config_get_list(config, "copy"); if (rv->copy == NULL) - rv->copy = bc_config_get_list(config, "copy_files"); + rv->copy = sb_config_get_list(config, "copy_files"); cleanup: - bc_config_free(config); + sb_config_free(config); return rv; } @@ -178,11 +176,11 @@ bm_settings_free(bm_settings_t *settings) { if (settings == NULL) return; - bc_trie_free(settings->global); - bc_trie_free(settings->settings); - bc_strv_free(settings->posts); - bc_strv_free(settings->pages); - bc_strv_free(settings->copy); - bc_strv_free(settings->tags); + sb_trie_free(settings->global); + sb_trie_free(settings->settings); + sb_strv_free(settings->posts); + sb_strv_free(settings->pages); + sb_strv_free(settings->copy); + sb_strv_free(settings->tags); free(settings); } diff --git a/src/blogc-make/settings.h b/src/blogc-make/settings.h index 69fdbb6..a147df6 100644 --- a/src/blogc-make/settings.h +++ b/src/blogc-make/settings.h @@ -10,12 +10,11 @@ #define _MAKE_SETTINGS_H #include <stddef.h> -#include "../common/error.h" -#include "../common/utils.h" +#include <squareball.h> typedef struct { - bc_trie_t *global; - bc_trie_t *settings; + sb_trie_t *global; + sb_trie_t *settings; char **posts; char **pages; char **copy; @@ -23,7 +22,7 @@ typedef struct { } bm_settings_t; bm_settings_t* bm_settings_parse(const char *content, size_t content_len, - bc_error_t **err); + sb_error_t **err); void bm_settings_free(bm_settings_t *settings); #endif /* _MAKE_SETTINGS_H */ diff --git a/src/blogc-make/utils.c b/src/blogc-make/utils.c index 8f69e44..f2bd777 100644 --- a/src/blogc-make/utils.c +++ b/src/blogc-make/utils.c @@ -11,8 +11,9 @@ #include <stdbool.h> #include <string.h> #include <unistd.h> -#include "../common/error.h" -#include "../common/utils.h" +#include <squareball.h> + +#include "utils.h" #ifndef PATH_MAX #define PATH_MAX 4096 @@ -30,42 +31,42 @@ bm_generate_filename(const char *dir, const char *prefix, const char *fname, bool is_index = have_fname && have_ext && ( (0 == strcmp(fname, "index")) && ext[0] == '/') && !have_prefix; - bc_string_t *rv = bc_string_new(); + sb_string_t *rv = sb_string_new(); if (dir != NULL && (have_prefix || have_fname || have_ext)) - bc_string_append(rv, dir); + sb_string_append(rv, dir); if ((have_prefix || have_fname || have_ext_noslash) && !is_index) - bc_string_append_c(rv, '/'); + sb_string_append_c(rv, '/'); if (have_prefix) - bc_string_append(rv, prefix); + sb_string_append(rv, prefix); // with fname we have posts, pages and tags if (have_fname) { if (have_prefix && have_fname && fname[0] != '/') - bc_string_append_c(rv, '/'); + sb_string_append_c(rv, '/'); if (!is_index) - bc_string_append(rv, fname); + sb_string_append(rv, fname); } // no fname means index else if (have_ext_noslash) { if (have_fname) - bc_string_append_c(rv, '/'); + sb_string_append_c(rv, '/'); if (!have_prefix) - bc_string_append(rv, "index"); + sb_string_append(rv, "index"); } if (have_ext) - bc_string_append(rv, ext); + sb_string_append(rv, ext); if (rv->len == 0) { - bc_string_free(rv, true); + sb_string_free(rv, true); return NULL; } - return bc_string_free(rv, false); + return sb_string_free(rv, false); } @@ -77,52 +78,52 @@ bm_generate_filename2(const char *dir, const char *prefix, const char *fname, bool have_fname = fname != NULL && fname[0] != '\0'; bool have_prefix2 = prefix2 != NULL && prefix2[0] != '\0'; - bc_string_t *p = bc_string_new(); + sb_string_t *p = sb_string_new(); if (have_prefix) - bc_string_append(p, prefix); + sb_string_append(p, prefix); if (have_prefix && (have_fname || have_prefix2)) - bc_string_append_c(p, '/'); + sb_string_append_c(p, '/'); if (have_fname) - bc_string_append(p, fname); + sb_string_append(p, fname); if (have_fname && have_prefix2) - bc_string_append_c(p, '/'); + sb_string_append_c(p, '/'); if (have_prefix2) - bc_string_append(p, prefix2); + sb_string_append(p, prefix2); char *rv = bm_generate_filename(dir, p->str, fname2, ext); - bc_string_free(p, true); + sb_string_free(p, true); return rv; } char* -bm_abspath(const char *path, bc_error_t **err) +bm_abspath(const char *path, sb_error_t **err) { if (err == NULL || *err != NULL) return NULL; if (path[0] == '/') { - return bc_strdup(path); + return sb_strdup(path); } char cwd[PATH_MAX]; if (NULL == getcwd(cwd, sizeof(cwd))) { - *err = bc_error_new_printf(BLOGC_MAKE_ERROR_UTILS, - "Failed to detect absolute path (%s): %s", path, strerror(errno)); + *err = sb_strerror_new_printf( + "utils: Failed to detect absolute path (%s): %s", path, strerror(errno)); return NULL; } if (cwd[0] != '/') { - *err = bc_error_new_printf(BLOGC_MAKE_ERROR_UTILS, - "Failed to get current working directory: %s", cwd); + *err = sb_strerror_new_printf( + "utils: Failed to get current working directory: %s", cwd); return NULL; } - return bc_strdup_printf("%s/%s", cwd, path); + return sb_strdup_printf("%s/%s", cwd, path); } diff --git a/src/blogc-make/utils.h b/src/blogc-make/utils.h index cbcfc0e..f17d6fe 100644 --- a/src/blogc-make/utils.h +++ b/src/blogc-make/utils.h @@ -9,12 +9,12 @@ #ifndef _MAKE_UTILS_H #define _MAKE_UTILS_H -#include "../common/error.h" +#include <squareball.h> char* bm_generate_filename(const char *dir, const char *prefix, const char *fname, const char *ext); char* bm_generate_filename2(const char *dir, const char *prefix, const char *fname, const char *prefix2, const char *fname2, const char *ext); -char* bm_abspath(const char *path, bc_error_t **err); +char* bm_abspath(const char *path, sb_error_t **err); #endif /* _MAKE_UTILS_H */ diff --git a/src/blogc-runserver/httpd-utils.c b/src/blogc-runserver/httpd-utils.c index 9d374ae..a920556 100644 --- a/src/blogc-runserver/httpd-utils.c +++ b/src/blogc-runserver/httpd-utils.c @@ -9,14 +9,15 @@ #include <stdbool.h> #include <string.h> #include <unistd.h> -#include "../common/utils.h" +#include <squareball.h> + #include "httpd-utils.h" char* br_readline(int socket) { - bc_string_t *rv = bc_string_new(); + sb_string_t *rv = sb_string_new(); char buffer[READLINE_BUFFER_SIZE]; ssize_t len; bool end = false; @@ -30,7 +31,7 @@ br_readline(int socket) end = true; break; } - bc_string_append_c(rv, buffer[i]); + sb_string_append_c(rv, buffer[i]); } } if (len < READLINE_BUFFER_SIZE) { @@ -38,7 +39,7 @@ br_readline(int socket) } } - return bc_string_free(rv, false); + return sb_string_free(rv, false); } @@ -58,7 +59,7 @@ br_hextoi(const char c) char* br_urldecode(const char *str) { - bc_string_t *rv = bc_string_new(); + sb_string_t *rv = sb_string_new(); for (size_t i = 0; i < strlen(str); i++) { switch (str[i]) { @@ -67,22 +68,22 @@ br_urldecode(const char *str) int p1 = br_hextoi(str[i + 1]) * 16; int p2 = br_hextoi(str[i + 2]); if (p1 >= 0 && p2 >= 0) { - bc_string_append_c(rv, p1 + p2); + sb_string_append_c(rv, p1 + p2); i += 2; continue; } } - bc_string_append_c(rv, '%'); + sb_string_append_c(rv, '%'); break; case '+': - bc_string_append_c(rv, ' '); + sb_string_append_c(rv, ' '); break; default: - bc_string_append_c(rv, str[i]); + sb_string_append_c(rv, str[i]); } } - return bc_string_free(rv, false); + return sb_string_free(rv, false); } diff --git a/src/blogc-runserver/httpd.c b/src/blogc-runserver/httpd.c index 513c4b0..a78b888 100644 --- a/src/blogc-runserver/httpd.c +++ b/src/blogc-runserver/httpd.c @@ -19,11 +19,11 @@ #include <netinet/in.h> #include <arpa/inet.h> #include <pthread.h> -#include "../common/error.h" -#include "../common/file.h" -#include "../common/utils.h" +#include <squareball.h> + #include "mime.h" #include "httpd-utils.h" +#include "httpd.h" #define LISTEN_BACKLOG 100 @@ -43,7 +43,7 @@ typedef struct { static void error(int socket, int status_code, const char *error) { - char *str = bc_strdup_printf( + char *str = sb_strdup_printf( "HTTP/1.0 %d %s\r\n" "Content-Type: text/html\r\n" "Content-Length: %zu\r\n" @@ -74,8 +74,8 @@ handle_request(void *arg) unsigned short status_code = 200; - char **pieces = bc_str_split(conn_line, ' ', 3); - if (bc_strv_length(pieces) != 3) { + char **pieces = sb_str_split(conn_line, ' ', 3); + if (sb_strv_length(pieces) != 3) { status_code = 400; error(client_socket, 400, "Bad Request"); goto point1; @@ -87,9 +87,9 @@ handle_request(void *arg) goto point1; } - char **pieces2 = bc_str_split(pieces[1], '?', 2); + char **pieces2 = sb_str_split(pieces[1], '?', 2); char *path = br_urldecode(pieces2[0]); - bc_strv_free(pieces2); + sb_strv_free(pieces2); if (path == NULL) { status_code = 400; @@ -97,7 +97,7 @@ handle_request(void *arg) goto point2; } - char *abs_path = bc_strdup_printf("%s/%s", docroot, path); + char *abs_path = sb_strdup_printf("%s/%s", docroot, path); char *real_path = realpath(abs_path, NULL); free(abs_path); @@ -161,7 +161,7 @@ handle_request(void *arg) if (add_slash) { // production webservers usually returns 301 in such cases, but 302 is // better for development/testing. - char *tmp = bc_strdup_printf( + char *tmp = sb_strdup_printf( "HTTP/1.0 302 Found\r\n" "Location: %s/\r\n" "Content-Length: 0\r\n" @@ -177,16 +177,16 @@ handle_request(void *arg) } size_t len; - bc_error_t *err = NULL; - char* contents = bc_file_get_contents(real_path, false, &len, &err); + sb_error_t *err = NULL; + char* contents = sb_file_get_contents(real_path, &len, &err); if (err != NULL) { status_code = 500; error(client_socket, 500, "Internal Server Error"); - bc_error_free(err); + sb_error_free(err); goto point4; } - char *out = bc_strdup_printf( + char *out = sb_strdup_printf( "HTTP/1.0 200 OK\r\n" "Content-Type: %s\r\n" "Content-Length: %zu\r\n" @@ -213,7 +213,7 @@ point1: fprintf(stderr, "[Thread-%zu] %s - - \"%s\" %d\n", thread_id + 1, ip, conn_line, status_code); free(conn_line); - bc_strv_free(pieces); + sb_strv_free(pieces); point0: free(ip); close(client_socket); @@ -233,7 +233,7 @@ br_httpd_get_ip(int af, const struct sockaddr *addr) struct sockaddr_in *a = (struct sockaddr_in*) addr; inet_ntop(af, &(a->sin_addr), host, INET6_ADDRSTRLEN); } - return bc_strdup(host); + return sb_strdup(host); } diff --git a/src/blogc-runserver/main.c b/src/blogc-runserver/main.c index 1c5be29..b108137 100644 --- a/src/blogc-runserver/main.c +++ b/src/blogc-runserver/main.c @@ -13,7 +13,8 @@ #include <signal.h> #include <stdio.h> #include <stdlib.h> -#include "../common/utils.h" +#include <squareball.h> + #include "httpd.h" @@ -63,9 +64,9 @@ main(int argc, char **argv) char *endptr; char *tmp_host = getenv("BLOGC_RUNSERVER_DEFAULT_HOST"); - char *default_host = bc_strdup(tmp_host != NULL ? tmp_host : "127.0.0.1"); + char *default_host = sb_strdup(tmp_host != NULL ? tmp_host : "127.0.0.1"); char *tmp_port = getenv("BLOGC_RUNSERVER_DEFAULT_PORT"); - char *default_port = bc_strdup(tmp_port != NULL ? tmp_port : "8080"); + char *default_port = sb_strdup(tmp_port != NULL ? tmp_port : "8080"); size_t args = 0; @@ -80,15 +81,15 @@ main(int argc, char **argv) goto cleanup; case 't': if (argv[i][2] != '\0') - host = bc_strdup(argv[i] + 2); + host = sb_strdup(argv[i] + 2); else - host = bc_strdup(argv[++i]); + host = sb_strdup(argv[++i]); break; case 'p': if (argv[i][2] != '\0') - port = bc_strdup(argv[i] + 2); + port = sb_strdup(argv[i] + 2); else - port = bc_strdup(argv[++i]); + port = sb_strdup(argv[++i]); break; case 'm': if (argv[i][2] != '\0') @@ -117,7 +118,7 @@ main(int argc, char **argv) goto cleanup; } args++; - docroot = bc_strdup(argv[i]); + docroot = sb_strdup(argv[i]); } } diff --git a/src/blogc-runserver/mime.c b/src/blogc-runserver/mime.c index 636c496..a6228cf 100644 --- a/src/blogc-runserver/mime.c +++ b/src/blogc-runserver/mime.c @@ -9,8 +9,10 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> -#include "../common/utils.h" +#include <squareball.h> + #include "httpd-utils.h" +#include "mime.h" // mime types with index should be in the begin of the list. first NULL @@ -153,7 +155,7 @@ br_mime_guess_index(const char *path) { char *found = NULL; for (size_t i = 0; content_types[i].index != NULL; i++) { - char *f = bc_strdup_printf("%s/%s", path, content_types[i].index); + char *f = sb_strdup_printf("%s/%s", path, content_types[i].index); if (0 == access(f, F_OK)) { found = f; break; diff --git a/src/blogc/content-parser.c b/src/blogc/content-parser.c index 047af4b..829638e 100644 --- a/src/blogc/content-parser.c +++ b/src/blogc/content-parser.c @@ -9,9 +9,9 @@ #include <stdbool.h> #include <stdlib.h> #include <string.h> +#include <squareball.h> #include "content-parser.h" -#include "../common/utils.h" // this is a half ass implementation of a markdown-like syntax. bugs are // expected. feel free to improve the parser and add new features. @@ -22,7 +22,7 @@ blogc_slugify(const char *str) { if (str == NULL) return NULL; - char *new_str = bc_strdup(str); + char *new_str = sb_strdup(str); int diff = 'a' - 'A'; // just to avoid magic numbers for (size_t i = 0; new_str[i] != '\0'; i++) { if (new_str[i] >= 'a' && new_str[i] <= 'z') @@ -60,13 +60,13 @@ htmlentities(char c) static void -htmlentities_append(bc_string_t *str, char c) +htmlentities_append(sb_string_t *str, char c) { const char *e = htmlentities(c); if (e == NULL) - bc_string_append_c(str, c); + sb_string_append_c(str, c); else - bc_string_append(str, e); + sb_string_append(str, e); } @@ -75,10 +75,10 @@ blogc_htmlentities(const char *str) { if (str == NULL) return NULL; - bc_string_t *rv = bc_string_new(); + sb_string_t *rv = sb_string_new(); for (size_t i = 0; str[i] != '\0'; i++) htmlentities_append(rv, str[i]); - return bc_string_free(rv, false); + return sb_string_free(rv, false); } @@ -87,7 +87,7 @@ blogc_fix_description(const char *paragraph) { if (paragraph == NULL) return NULL; - bc_string_t *rv = bc_string_new(); + sb_string_t *rv = sb_string_new(); bool last = false; bool newline = false; char *tmp = NULL; @@ -101,12 +101,12 @@ blogc_fix_description(const char *paragraph) case '\n': if (newline) break; - tmp = bc_strndup(paragraph + start, current - start); - bc_string_append(rv, bc_str_strip(tmp)); + tmp = sb_strndup(paragraph + start, current - start); + sb_string_append(rv, sb_str_strip(tmp)); free(tmp); tmp = NULL; if (!last) - bc_string_append_c(rv, ' '); + sb_string_append_c(rv, ' '); start = current + 1; newline = true; break; @@ -117,8 +117,8 @@ blogc_fix_description(const char *paragraph) break; current++; } - tmp = blogc_htmlentities(bc_str_strip(rv->str)); - bc_string_free(rv, true); + tmp = blogc_htmlentities(sb_str_strip(rv->str)); + sb_string_free(rv, true); return tmp; } @@ -190,7 +190,7 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) size_t start_link = 0; char *link1 = NULL; - bc_string_t *rv = bc_string_new(); + sb_string_t *rv = sb_string_new(); blogc_content_parser_inline_state_t state = CONTENT_INLINE_START; @@ -244,15 +244,15 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) state = CONTENT_INLINE_ASTERISK_DOUBLE; break; } - tmp = bc_str_find(src + current, '*'); + tmp = sb_str_find(src + current, '*'); if (tmp == NULL || ((tmp - src) >= src_len)) { - bc_string_append_c(rv, '*'); + sb_string_append_c(rv, '*'); state = CONTENT_INLINE_START; continue; } tmp2 = blogc_content_parse_inline_internal( src + current, (tmp - src) - current); - bc_string_append_printf(rv, "<em>%s</em>", tmp2); + sb_string_append_printf(rv, "<em>%s</em>", tmp2); current = tmp - src; tmp = NULL; free(tmp2); @@ -263,21 +263,21 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) case CONTENT_INLINE_ASTERISK_DOUBLE: tmp = src + current; do { - tmp = bc_str_find(tmp, '*'); + tmp = sb_str_find(tmp, '*'); if (((tmp - src) < src_len) && *(tmp + 1) == '*') { break; } tmp++; } while (tmp != NULL && (tmp - src) < src_len); if (tmp == NULL || ((tmp - src) >= src_len)) { - bc_string_append_c(rv, '*'); - bc_string_append_c(rv, '*'); + sb_string_append_c(rv, '*'); + sb_string_append_c(rv, '*'); state = CONTENT_INLINE_START; continue; } tmp2 = blogc_content_parse_inline_internal( src + current, (tmp - src) - current); - bc_string_append_printf(rv, "<strong>%s</strong>", tmp2); + sb_string_append_printf(rv, "<strong>%s</strong>", tmp2); current = tmp - src + 1; tmp = NULL; free(tmp2); @@ -290,15 +290,15 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) state = CONTENT_INLINE_UNDERSCORE_DOUBLE; break; } - tmp = bc_str_find(src + current, '_'); + tmp = sb_str_find(src + current, '_'); if (tmp == NULL || ((tmp - src) >= src_len)) { - bc_string_append_c(rv, '_'); + sb_string_append_c(rv, '_'); state = CONTENT_INLINE_START; continue; } tmp2 = blogc_content_parse_inline_internal( src + current, (tmp - src) - current); - bc_string_append_printf(rv, "<em>%s</em>", tmp2); + sb_string_append_printf(rv, "<em>%s</em>", tmp2); current = tmp - src; tmp = NULL; free(tmp2); @@ -309,21 +309,21 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) case CONTENT_INLINE_UNDERSCORE_DOUBLE: tmp = src + current; do { - tmp = bc_str_find(tmp, '_'); + tmp = sb_str_find(tmp, '_'); if (((tmp - src) < src_len) && *(tmp + 1) == '_') { break; } tmp++; } while (tmp != NULL && (tmp - src) < src_len); if (tmp == NULL || ((tmp - src) >= src_len)) { - bc_string_append_c(rv, '_'); - bc_string_append_c(rv, '_'); + sb_string_append_c(rv, '_'); + sb_string_append_c(rv, '_'); state = CONTENT_INLINE_START; continue; } tmp2 = blogc_content_parse_inline_internal( src + current, (tmp - src) - current); - bc_string_append_printf(rv, "<strong>%s</strong>", tmp2); + sb_string_append_printf(rv, "<strong>%s</strong>", tmp2); current = tmp - src + 1; tmp = NULL; free(tmp2); @@ -336,19 +336,19 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) state = CONTENT_INLINE_BACKTICKS_DOUBLE; break; } - tmp = bc_str_find(src + current, '`'); + tmp = sb_str_find(src + current, '`'); if (tmp == NULL || ((tmp - src) >= src_len)) { - bc_string_append_c(rv, '`'); + sb_string_append_c(rv, '`'); state = CONTENT_INLINE_START; continue; } - tmp3 = bc_strndup(src + current, (tmp - src) - current); + tmp3 = sb_strndup(src + current, (tmp - src) - current); tmp2 = blogc_htmlentities(tmp3); free(tmp3); tmp3 = NULL; - bc_string_append(rv, "<code>"); - bc_string_append(rv, tmp2); - bc_string_append(rv, "</code>"); + sb_string_append(rv, "<code>"); + sb_string_append(rv, tmp2); + sb_string_append(rv, "</code>"); current = tmp - src; tmp = NULL; free(tmp2); @@ -359,25 +359,25 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) case CONTENT_INLINE_BACKTICKS_DOUBLE: tmp = src + current; do { - tmp = bc_str_find(tmp, '`'); + tmp = sb_str_find(tmp, '`'); if (((tmp - src) < src_len) && *(tmp + 1) == '`') { break; } tmp++; } while (tmp != NULL && (tmp - src) < src_len); if (tmp == NULL || ((tmp - src) >= src_len)) { - bc_string_append_c(rv, '`'); - bc_string_append_c(rv, '`'); + sb_string_append_c(rv, '`'); + sb_string_append_c(rv, '`'); state = CONTENT_INLINE_START; continue; } - tmp3 = bc_strndup(src + current, (tmp - src) - current); + tmp3 = sb_strndup(src + current, (tmp - src) - current); tmp2 = blogc_htmlentities(tmp3); free(tmp3); tmp3 = NULL; - bc_string_append(rv, "<code>"); - bc_string_append(rv, tmp2); - bc_string_append(rv, "</code>"); + sb_string_append(rv, "<code>"); + sb_string_append(rv, tmp2); + sb_string_append(rv, "</code>"); current = tmp - src + 1; tmp = NULL; free(tmp2); @@ -398,24 +398,24 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) case CONTENT_INLINE_LINK_AUTO: tmp = src + current; do { - tmp = bc_str_find(tmp, ']'); + tmp = sb_str_find(tmp, ']'); if (((tmp - src) < src_len) && *(tmp + 1) == ']') { break; } tmp++; } while (tmp != NULL && (tmp - src) < src_len); if (tmp == NULL || ((tmp - src) >= src_len)) { - bc_string_append_c(rv, '['); - bc_string_append_c(rv, '['); + sb_string_append_c(rv, '['); + sb_string_append_c(rv, '['); state = CONTENT_INLINE_START; continue; } - tmp2 = bc_strndup(src + current, (tmp - src) - current); - bc_string_append(rv, "<a href=\""); - bc_string_append_escaped(rv, tmp2); - bc_string_append(rv, "\">"); - bc_string_append_escaped(rv, tmp2); - bc_string_append(rv, "</a>"); + tmp2 = sb_strndup(src + current, (tmp - src) - current); + sb_string_append(rv, "<a href=\""); + sb_string_append_escaped(rv, tmp2); + sb_string_append(rv, "\">"); + sb_string_append_escaped(rv, tmp2); + sb_string_append(rv, "</a>"); current = tmp - src + 1; tmp = NULL; free(tmp2); @@ -434,7 +434,7 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) } if (c == ']') { if (--count == 0) { - link1 = bc_strndup(src + start_link, current - start_link); + link1 = sb_strndup(src + start_link, current - start_link); state = CONTENT_INLINE_LINK_URL_START; } } @@ -448,7 +448,7 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) start = current + 1; break; } - bc_string_append_c(rv, '['); + sb_string_append_c(rv, '['); state = CONTENT_INLINE_START; current = start_link; start_link = 0; @@ -460,13 +460,13 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) break; } if (c == ')') { - tmp2 = bc_strndup(src + start, current - start); + tmp2 = sb_strndup(src + start, current - start); tmp3 = blogc_content_parse_inline(link1); free(link1); link1 = NULL; - bc_string_append(rv, "<a href=\""); - bc_string_append_escaped(rv, tmp2); - bc_string_append_printf(rv, "\">%s</a>", tmp3); + sb_string_append(rv, "<a href=\""); + sb_string_append_escaped(rv, tmp2); + sb_string_append_printf(rv, "\">%s</a>", tmp3); free(tmp2); tmp2 = NULL; free(tmp3); @@ -483,7 +483,7 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) start_link = current + 1; break; } - bc_string_append_c(rv, '!'); + sb_string_append_c(rv, '!'); state = CONTENT_INLINE_START; continue; @@ -493,7 +493,7 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) break; } if (c == ']') { - link1 = bc_strndup(src + start_link, current - start_link); + link1 = sb_strndup(src + start_link, current - start_link); state = CONTENT_INLINE_IMAGE_URL_START; } break; @@ -506,8 +506,8 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) start = current + 1; break; } - bc_string_append_c(rv, '!'); - bc_string_append_c(rv, '['); + sb_string_append_c(rv, '!'); + sb_string_append_c(rv, '['); state = CONTENT_INLINE_START; current = start_link; start_link = 0; @@ -519,12 +519,12 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) break; } if (c == ')') { - tmp2 = bc_strndup(src + start, current - start); - bc_string_append(rv, "<img src=\""); - bc_string_append_escaped(rv, tmp2); - bc_string_append(rv, "\" alt=\""); - bc_string_append_escaped(rv, link1); - bc_string_append(rv, "\">"); + tmp2 = sb_strndup(src + start, current - start); + sb_string_append(rv, "<img src=\""); + sb_string_append_escaped(rv, tmp2); + sb_string_append(rv, "\" alt=\""); + sb_string_append_escaped(rv, link1); + sb_string_append(rv, "\">"); free(tmp2); tmp2 = NULL; free(link1); @@ -537,31 +537,31 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) case CONTENT_INLINE_ENDASH: if (c == '-') { if (is_last) { - bc_string_append(rv, "–"); + sb_string_append(rv, "–"); state = CONTENT_INLINE_START; // wat break; } state = CONTENT_INLINE_EMDASH; break; } - bc_string_append_c(rv, '-'); + sb_string_append_c(rv, '-'); state = CONTENT_INLINE_START; continue; case CONTENT_INLINE_EMDASH: if (c == '-') { - bc_string_append(rv, "—"); + sb_string_append(rv, "—"); state = CONTENT_INLINE_START; break; } - bc_string_append(rv, "–"); + sb_string_append(rv, "–"); state = CONTENT_INLINE_START; continue; case CONTENT_INLINE_LINE_BREAK_START: if (c == ' ') { if (is_last) { - bc_string_append(rv, "<br />"); + sb_string_append(rv, "<br />"); state = CONTENT_INLINE_START; // wat break; } @@ -569,14 +569,14 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) state = CONTENT_INLINE_LINE_BREAK; break; } - bc_string_append_c(rv, ' '); + sb_string_append_c(rv, ' '); state = CONTENT_INLINE_START; continue; case CONTENT_INLINE_LINE_BREAK: if (c == ' ') { if (is_last) { - bc_string_append(rv, "<br />"); + sb_string_append(rv, "<br />"); state = CONTENT_INLINE_START; // wat break; } @@ -584,12 +584,12 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) break; } if (c == '\n' || c == '\r') { - bc_string_append_printf(rv, "<br />%c", c); + sb_string_append_printf(rv, "<br />%c", c); state = CONTENT_INLINE_START; break; } for (size_t i = 0; i < count; i++) - bc_string_append_c(rv, ' '); + sb_string_append_c(rv, ' '); state = CONTENT_INLINE_START; continue; } @@ -604,14 +604,14 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) case CONTENT_INLINE_IMAGE_ALT: case CONTENT_INLINE_IMAGE_URL_START: case CONTENT_INLINE_IMAGE_URL: - bc_string_append_c(rv, '!'); + sb_string_append_c(rv, '!'); case CONTENT_INLINE_LINK_CONTENT: case CONTENT_INLINE_LINK_URL_START: case CONTENT_INLINE_LINK_URL: tmp2 = blogc_content_parse_inline(src + start_link); - bc_string_append_c(rv, '['); - bc_string_append_escaped(rv, tmp2); // no need to free, as it wil be done below. + sb_string_append_c(rv, '['); + sb_string_append_escaped(rv, tmp2); // no need to free, as it wil be done below. break; // add all the other states here explicitly, so the compiler helps us @@ -636,7 +636,7 @@ blogc_content_parse_inline_internal(const char *src, size_t src_len) free(tmp3); free(link1); - return bc_string_free(rv, false); + return sb_string_free(rv, false); } @@ -704,11 +704,11 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, char d = '\0'; - bc_slist_t *lines = NULL; - bc_slist_t *lines2 = NULL; + sb_slist_t *lines = NULL; + sb_slist_t *lines2 = NULL; - bc_string_t *rv = bc_string_new(); - bc_string_t *tmp_str = NULL; + sb_string_t *rv = sb_string_new(); + sb_string_t *tmp_str = NULL; blogc_content_parser_state_t state = CONTENT_START_LINE; @@ -835,16 +835,16 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, if (c == '\n' || c == '\r' || is_last) { end = is_last && c != '\n' && c != '\r' ? src_len : (real_end != 0 ? real_end : current); - tmp = bc_strndup(src + start, end - start); + tmp = sb_strndup(src + start, end - start); if (first_header != NULL && *first_header == NULL) *first_header = blogc_htmlentities(tmp); parsed = blogc_content_parse_inline(tmp); slug = blogc_slugify(tmp); if (slug == NULL) - bc_string_append_printf(rv, "<h%d>%s</h%d>%s", + sb_string_append_printf(rv, "<h%d>%s</h%d>%s", header_level, parsed, header_level, line_ending); else - bc_string_append_printf(rv, "<h%d id=\"%s\">%s</h%d>%s", + sb_string_append_printf(rv, "<h%d id=\"%s\">%s</h%d>%s", header_level, slug, parsed, header_level, line_ending); free(slug); @@ -868,8 +868,8 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, case CONTENT_HTML_END: if (c == '\n' || c == '\r' || is_last) { - tmp = bc_strndup(src + start, end - start); - bc_string_append_printf(rv, "%s%s", tmp, line_ending); + tmp = sb_strndup(src + start, end - start); + sb_string_append_printf(rv, "%s%s", tmp, line_ending); free(tmp); tmp = NULL; state = CONTENT_START_LINE; @@ -882,7 +882,7 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, case CONTENT_BLOCKQUOTE: if (c == ' ' || c == '\t') break; - prefix = bc_strndup(src + start, current - start); + prefix = sb_strndup(src + start, current - start); state = CONTENT_BLOCKQUOTE_START; break; @@ -890,16 +890,16 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, if (c == '\n' || c == '\r' || is_last) { end = is_last && c != '\n' && c != '\r' ? src_len : (real_end != 0 ? real_end : current); - tmp = bc_strndup(src + start2, end - start2); - if (bc_str_starts_with(tmp, prefix)) { - lines = bc_slist_append(lines, bc_strdup(tmp + strlen(prefix))); + tmp = sb_strndup(src + start2, end - start2); + if (sb_str_starts_with(tmp, prefix)) { + lines = sb_slist_append(lines, sb_strdup(tmp + strlen(prefix))); state = CONTENT_BLOCKQUOTE_END; } else { state = CONTENT_PARAGRAPH; free(prefix); prefix = NULL; - bc_slist_free_full(lines, free); + sb_slist_free_full(lines, free); lines = NULL; if (is_last) { free(tmp); @@ -915,21 +915,21 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, case CONTENT_BLOCKQUOTE_END: if (c == '\n' || c == '\r' || is_last) { - tmp_str = bc_string_new(); - for (bc_slist_t *l = lines; l != NULL; l = l->next) - bc_string_append_printf(tmp_str, "%s%s", l->data, + tmp_str = sb_string_new(); + for (sb_slist_t *l = lines; l != NULL; l = l->next) + sb_string_append_printf(tmp_str, "%s%s", l->data, line_ending); // do not propagate title and description to blockquote parsing, // because we just want paragraphs from first level of // content. tmp = blogc_content_parse(tmp_str->str, NULL, NULL, NULL); - bc_string_append_printf(rv, "<blockquote>%s</blockquote>%s", + sb_string_append_printf(rv, "<blockquote>%s</blockquote>%s", tmp, line_ending); free(tmp); tmp = NULL; - bc_string_free(tmp_str, true); + sb_string_free(tmp_str, true); tmp_str = NULL; - bc_slist_free_full(lines, free); + sb_slist_free_full(lines, free); lines = NULL; free(prefix); prefix = NULL; @@ -945,7 +945,7 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, case CONTENT_CODE: if (c == ' ' || c == '\t') break; - prefix = bc_strndup(src + start, current - start); + prefix = sb_strndup(src + start, current - start); state = CONTENT_CODE_START; break; @@ -953,16 +953,16 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, if (c == '\n' || c == '\r' || is_last) { end = is_last && c != '\n' && c != '\r' ? src_len : (real_end != 0 ? real_end : current); - tmp = bc_strndup(src + start2, end - start2); - if (bc_str_starts_with(tmp, prefix)) { - lines = bc_slist_append(lines, bc_strdup(tmp + strlen(prefix))); + tmp = sb_strndup(src + start2, end - start2); + if (sb_str_starts_with(tmp, prefix)) { + lines = sb_slist_append(lines, sb_strdup(tmp + strlen(prefix))); state = CONTENT_CODE_END; } else { state = CONTENT_PARAGRAPH; free(prefix); prefix = NULL; - bc_slist_free_full(lines, free); + sb_slist_free_full(lines, free); lines = NULL; free(tmp); tmp = NULL; @@ -978,18 +978,18 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, case CONTENT_CODE_END: if (c == '\n' || c == '\r' || is_last) { - bc_string_append(rv, "<pre><code>"); - for (bc_slist_t *l = lines; l != NULL; l = l->next) { + sb_string_append(rv, "<pre><code>"); + for (sb_slist_t *l = lines; l != NULL; l = l->next) { char *tmp_line = blogc_htmlentities(l->data); if (l->next == NULL) - bc_string_append_printf(rv, "%s", tmp_line); + sb_string_append_printf(rv, "%s", tmp_line); else - bc_string_append_printf(rv, "%s%s", tmp_line, + sb_string_append_printf(rv, "%s%s", tmp_line, line_ending); free(tmp_line); } - bc_string_append_printf(rv, "</code></pre>%s", line_ending); - bc_slist_free_full(lines, free); + sb_string_append_printf(rv, "</code></pre>%s", line_ending); + sb_slist_free_full(lines, free); lines = NULL; free(prefix); prefix = NULL; @@ -1015,7 +1015,7 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, } if (c == ' ' || c == '\t') break; - prefix = bc_strndup(src + start, current - start); + prefix = sb_strndup(src + start, current - start); state = CONTENT_UNORDERED_LIST_START; break; @@ -1036,7 +1036,7 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, break; } if (c == '\n' || c == '\r' || is_last) { - bc_string_append_printf(rv, "<hr />%s", line_ending); + sb_string_append_printf(rv, "<hr />%s", line_ending); state = CONTENT_START_LINE; start = current; d = '\0'; @@ -1049,30 +1049,30 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, if (c == '\n' || c == '\r' || is_last) { end = is_last && c != '\n' && c != '\r' ? src_len : (real_end != 0 ? real_end : current); - tmp = bc_strndup(src + start2, end - start2); - tmp2 = bc_strdup_printf("%-*s", strlen(prefix), ""); - if (bc_str_starts_with(tmp, prefix)) { + tmp = sb_strndup(src + start2, end - start2); + tmp2 = sb_strdup_printf("%-*s", strlen(prefix), ""); + if (sb_str_starts_with(tmp, prefix)) { if (lines2 != NULL) { - tmp_str = bc_string_new(); - for (bc_slist_t *l = lines2; l != NULL; l = l->next) { + tmp_str = sb_string_new(); + for (sb_slist_t *l = lines2; l != NULL; l = l->next) { if (l->next == NULL) - bc_string_append_printf(tmp_str, "%s", l->data); + sb_string_append_printf(tmp_str, "%s", l->data); else - bc_string_append_printf(tmp_str, "%s%s", l->data, + sb_string_append_printf(tmp_str, "%s%s", l->data, line_ending); } - bc_slist_free_full(lines2, free); + sb_slist_free_full(lines2, free); lines2 = NULL; parsed = blogc_content_parse_inline(tmp_str->str); - bc_string_free(tmp_str, true); - lines = bc_slist_append(lines, bc_strdup(parsed)); + sb_string_free(tmp_str, true); + lines = sb_slist_append(lines, sb_strdup(parsed)); free(parsed); parsed = NULL; } - lines2 = bc_slist_append(lines2, bc_strdup(tmp + strlen(prefix))); + lines2 = sb_slist_append(lines2, sb_strdup(tmp + strlen(prefix))); } - else if (bc_str_starts_with(tmp, tmp2)) { - lines2 = bc_slist_append(lines2, bc_strdup(tmp + strlen(prefix))); + else if (sb_str_starts_with(tmp, tmp2)) { + lines2 = sb_slist_append(lines2, sb_strdup(tmp + strlen(prefix))); } else { state = CONTENT_PARAGRAPH_END; @@ -1082,8 +1082,8 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, tmp2 = NULL; free(prefix); prefix = NULL; - bc_slist_free_full(lines, free); - bc_slist_free_full(lines2, free); + sb_slist_free_full(lines, free); + sb_slist_free_full(lines2, free); lines = NULL; if (is_last) continue; @@ -1102,28 +1102,28 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, if (c == '\n' || c == '\r' || is_last) { if (lines2 != NULL) { // FIXME: avoid repeting the code below - tmp_str = bc_string_new(); - for (bc_slist_t *l = lines2; l != NULL; l = l->next) { + tmp_str = sb_string_new(); + for (sb_slist_t *l = lines2; l != NULL; l = l->next) { if (l->next == NULL) - bc_string_append_printf(tmp_str, "%s", l->data); + sb_string_append_printf(tmp_str, "%s", l->data); else - bc_string_append_printf(tmp_str, "%s%s", l->data, + sb_string_append_printf(tmp_str, "%s%s", l->data, line_ending); } - bc_slist_free_full(lines2, free); + sb_slist_free_full(lines2, free); lines2 = NULL; parsed = blogc_content_parse_inline(tmp_str->str); - bc_string_free(tmp_str, true); - lines = bc_slist_append(lines, bc_strdup(parsed)); + sb_string_free(tmp_str, true); + lines = sb_slist_append(lines, sb_strdup(parsed)); free(parsed); parsed = NULL; } - bc_string_append_printf(rv, "<ul>%s", line_ending); - for (bc_slist_t *l = lines; l != NULL; l = l->next) - bc_string_append_printf(rv, "<li>%s</li>%s", l->data, + sb_string_append_printf(rv, "<ul>%s", line_ending); + for (sb_slist_t *l = lines; l != NULL; l = l->next) + sb_string_append_printf(rv, "<li>%s</li>%s", l->data, line_ending); - bc_string_append_printf(rv, "</ul>%s", line_ending); - bc_slist_free_full(lines, free); + sb_string_append_printf(rv, "</ul>%s", line_ending); + sb_slist_free_full(lines, free); lines = NULL; free(prefix); prefix = NULL; @@ -1160,30 +1160,30 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, if (c == '\n' || c == '\r' || is_last) { end = is_last && c != '\n' && c != '\r' ? src_len : (real_end != 0 ? real_end : current); - tmp = bc_strndup(src + start2, end - start2); - tmp2 = bc_strdup_printf("%-*s", prefix_len, ""); + tmp = sb_strndup(src + start2, end - start2); + tmp2 = sb_strdup_printf("%-*s", prefix_len, ""); if (blogc_is_ordered_list_item(tmp, prefix_len)) { if (lines2 != NULL) { - tmp_str = bc_string_new(); - for (bc_slist_t *l = lines2; l != NULL; l = l->next) { + tmp_str = sb_string_new(); + for (sb_slist_t *l = lines2; l != NULL; l = l->next) { if (l->next == NULL) - bc_string_append_printf(tmp_str, "%s", l->data); + sb_string_append_printf(tmp_str, "%s", l->data); else - bc_string_append_printf(tmp_str, "%s%s", l->data, + sb_string_append_printf(tmp_str, "%s%s", l->data, line_ending); } - bc_slist_free_full(lines2, free); + sb_slist_free_full(lines2, free); lines2 = NULL; parsed = blogc_content_parse_inline(tmp_str->str); - bc_string_free(tmp_str, true); - lines = bc_slist_append(lines, bc_strdup(parsed)); + sb_string_free(tmp_str, true); + lines = sb_slist_append(lines, sb_strdup(parsed)); free(parsed); parsed = NULL; } - lines2 = bc_slist_append(lines2, bc_strdup(tmp + prefix_len)); + lines2 = sb_slist_append(lines2, sb_strdup(tmp + prefix_len)); } - else if (bc_str_starts_with(tmp, tmp2)) { - lines2 = bc_slist_append(lines2, bc_strdup(tmp + prefix_len)); + else if (sb_str_starts_with(tmp, tmp2)) { + lines2 = sb_slist_append(lines2, sb_strdup(tmp + prefix_len)); } else { state = CONTENT_PARAGRAPH_END; @@ -1193,8 +1193,8 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, tmp2 = NULL; free(parsed); parsed = NULL; - bc_slist_free_full(lines, free); - bc_slist_free_full(lines2, free); + sb_slist_free_full(lines, free); + sb_slist_free_full(lines2, free); lines = NULL; if (is_last) continue; @@ -1213,28 +1213,28 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, if (c == '\n' || c == '\r' || is_last) { if (lines2 != NULL) { // FIXME: avoid repeting the code below - tmp_str = bc_string_new(); - for (bc_slist_t *l = lines2; l != NULL; l = l->next) { + tmp_str = sb_string_new(); + for (sb_slist_t *l = lines2; l != NULL; l = l->next) { if (l->next == NULL) - bc_string_append_printf(tmp_str, "%s", l->data); + sb_string_append_printf(tmp_str, "%s", l->data); else - bc_string_append_printf(tmp_str, "%s%s", l->data, + sb_string_append_printf(tmp_str, "%s%s", l->data, line_ending); } - bc_slist_free_full(lines2, free); + sb_slist_free_full(lines2, free); lines2 = NULL; parsed = blogc_content_parse_inline(tmp_str->str); - bc_string_free(tmp_str, true); - lines = bc_slist_append(lines, bc_strdup(parsed)); + sb_string_free(tmp_str, true); + lines = sb_slist_append(lines, sb_strdup(parsed)); free(parsed); parsed = NULL; } - bc_string_append_printf(rv, "<ol>%s", line_ending); - for (bc_slist_t *l = lines; l != NULL; l = l->next) - bc_string_append_printf(rv, "<li>%s</li>%s", l->data, + sb_string_append_printf(rv, "<ol>%s", line_ending); + for (sb_slist_t *l = lines; l != NULL; l = l->next) + sb_string_append_printf(rv, "<li>%s</li>%s", l->data, line_ending); - bc_string_append_printf(rv, "</ol>%s", line_ending); - bc_slist_free_full(lines, free); + sb_string_append_printf(rv, "</ol>%s", line_ending); + sb_slist_free_full(lines, free); lines = NULL; free(prefix); prefix = NULL; @@ -1258,11 +1258,11 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, case CONTENT_PARAGRAPH_END: if (c == '\n' || c == '\r' || is_last) { - tmp = bc_strndup(src + start, end - start); + tmp = sb_strndup(src + start, end - start); if (description != NULL && *description == NULL) *description = blogc_fix_description(tmp); parsed = blogc_content_parse_inline(tmp); - bc_string_append_printf(rv, "<p>%s</p>%s", parsed, + sb_string_append_printf(rv, "<p>%s</p>%s", parsed, line_ending); free(parsed); parsed = NULL; @@ -1280,5 +1280,5 @@ blogc_content_parse(const char *src, size_t *end_excerpt, char **first_header, current++; } - return bc_string_free(rv, false); + return sb_string_free(rv, false); } diff --git a/src/blogc/datetime-parser.c b/src/blogc/datetime-parser.c index ddaf6ef..5cb6520 100644 --- a/src/blogc/datetime-parser.c +++ b/src/blogc/datetime-parser.c @@ -15,10 +15,9 @@ #endif /* HAVE_TIME_H */ #include <string.h> +#include <squareball.h> #include "datetime-parser.h" -#include "../common/error.h" -#include "../common/utils.h" typedef enum { @@ -47,16 +46,16 @@ typedef enum { char* blogc_convert_datetime(const char *orig, const char *format, - bc_error_t **err) + sb_error_t **err) { if (err == NULL || *err != NULL) return NULL; #ifndef HAVE_TIME_H - *err = bc_error_new(BLOGC_WARNING_DATETIME_PARSER, - "Your operating system does not supports the datetime functionalities " - "used by blogc. Sorry."); + *err = sb_strerror_new( + "datetime: Your operating system does not supports the datetime " + "functionalities used by blogc. Sorry."); return NULL; #else @@ -80,8 +79,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_SECOND_YEAR; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid first digit of year. " + *err = sb_strerror_new_printf( + "datetime: Invalid first digit of year. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -91,8 +90,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_THIRD_YEAR; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid second digit of year. " + *err = sb_strerror_new_printf( + "datetime: Invalid second digit of year. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -102,8 +101,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_FOURTH_YEAR; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid third digit of year. " + *err = sb_strerror_new_printf( + "datetime: Invalid third digit of year. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -111,8 +110,8 @@ blogc_convert_datetime(const char *orig, const char *format, if (c >= '0' && c <= '9') { tmp += c - diff - 1900; if (tmp < 0) { - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid year. Found %d, must be >= 1900.", + *err = sb_strerror_new_printf( + "datetime: Invalid year. Found %d, must be >= 1900.", tmp + 1900); break; } @@ -120,8 +119,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_FIRST_HYPHEN; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid fourth digit of year. " + *err = sb_strerror_new_printf( + "datetime: Invalid fourth digit of year. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -131,8 +130,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_FIRST_MONTH; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid separator between year and month. " + *err = sb_strerror_new_printf( + "datetime: Invalid separator between year and month. " "Found '%c', must be '-'.", c); break; @@ -142,8 +141,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_SECOND_MONTH; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid first digit of month. " + *err = sb_strerror_new_printf( + "datetime: Invalid first digit of month. " "Found '%c', must be integer >= 0 and <= 1.", c); break; @@ -151,17 +150,17 @@ blogc_convert_datetime(const char *orig, const char *format, if (c >= '0' && c <= '9') { tmp += c - diff - 1; if (tmp < 0 || tmp > 11) { - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid month. Found %d, must be >= 1 and <= 12.", - tmp + 1); + *err = sb_strerror_new_printf( + "datetime: Invalid month. " + "Found %d, must be >= 1 and <= 12.", tmp + 1); break; } t.tm_mon = tmp; state = DATETIME_SECOND_HYPHEN; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid second digit of month. " + *err = sb_strerror_new_printf( + "datetime: Invalid second digit of month. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -171,8 +170,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_FIRST_DAY; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid separator between month and day. " + *err = sb_strerror_new_printf( + "datetime: Invalid separator between month and day. " "Found '%c', must be '-'.", c); break; @@ -182,8 +181,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_SECOND_DAY; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid first digit of day. " + *err = sb_strerror_new_printf( + "datetime: Invalid first digit of day. " "Found '%c', must be integer >= 0 and <= 3.", c); break; @@ -191,17 +190,17 @@ blogc_convert_datetime(const char *orig, const char *format, if (c >= '0' && c <= '9') { tmp += c - diff; if (tmp < 1 || tmp > 31) { - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid day. Found %d, must be >= 1 and <= 31.", - tmp); + *err = sb_strerror_new_printf( + "datetime: Invalid day. " + "Found %d, must be >= 1 and <= 31.", tmp); break; } t.tm_mday = tmp; state = DATETIME_SPACE; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid second digit of day. " + *err = sb_strerror_new_printf( + "datetime: Invalid second digit of day. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -211,8 +210,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_FIRST_HOUR; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid separator between date and time. " + *err = sb_strerror_new_printf( + "datetime: Invalid separator between date and time. " "Found '%c', must be ' ' (empty space).", c); break; @@ -222,8 +221,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_SECOND_HOUR; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid first digit of hours. " + *err = sb_strerror_new_printf( + "datetime: Invalid first digit of hours. " "Found '%c', must be integer >= 0 and <= 2.", c); break; @@ -231,17 +230,17 @@ blogc_convert_datetime(const char *orig, const char *format, if (c >= '0' && c <= '9') { tmp += c - diff; if (tmp < 0 || tmp > 23) { - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid hours. Found %d, must be >= 0 and <= 23.", - tmp); + *err = sb_strerror_new_printf( + "datetime: Invalid hours. " + "Found %d, must be >= 0 and <= 23.", tmp); break; } t.tm_hour = tmp; state = DATETIME_FIRST_COLON; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid second digit of hours. " + *err = sb_strerror_new_printf( + "datetime: Invalid second digit of hours. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -251,8 +250,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_FIRST_MINUTE; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid separator between hours and minutes. " + *err = sb_strerror_new_printf( + "datetime: Invalid separator between hours and minutes. " "Found '%c', must be ':'.", c); break; @@ -262,8 +261,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_SECOND_MINUTE; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid first digit of minutes. " + *err = sb_strerror_new_printf( + "datetime: Invalid first digit of minutes. " "Found '%c', must be integer >= 0 and <= 5.", c); break; @@ -274,17 +273,17 @@ blogc_convert_datetime(const char *orig, const char *format, // this won't happen because we are restricting the digits // to 00-59 already, but lets keep the code here for // reference. - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid minutes. Found %d, must be >= 0 and <= 59.", - tmp); + *err = sb_strerror_new_printf( + "datetime: Invalid minutes. " + "Found %d, must be >= 0 and <= 59.", tmp); break; } t.tm_min = tmp; state = DATETIME_SECOND_COLON; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid second digit of minutes. " + *err = sb_strerror_new_printf( + "datetime: Invalid second digit of minutes. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -294,8 +293,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_FIRST_SECOND; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid separator between minutes and seconds. " + *err = sb_strerror_new_printf( + "datetime: Invalid separator between minutes and seconds. " "Found '%c', must be ':'.", c); break; @@ -305,8 +304,8 @@ blogc_convert_datetime(const char *orig, const char *format, state = DATETIME_SECOND_SECOND; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid first digit of seconds. " + *err = sb_strerror_new_printf( + "datetime: Invalid first digit of seconds. " "Found '%c', must be integer >= 0 and <= 6.", c); break; @@ -314,17 +313,17 @@ blogc_convert_datetime(const char *orig, const char *format, if (c >= '0' && c <= '9') { tmp += c - diff; if (tmp < 0 || tmp > 60) { - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid seconds. Found %d, must be >= 0 and <= 60.", - tmp); + *err = sb_strerror_new_printf( + "datetime: Invalid seconds. " + "Found %d, must be >= 0 and <= 60.", tmp); break; } t.tm_sec = tmp; state = DATETIME_DONE; break; } - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid second digit of seconds. " + *err = sb_strerror_new_printf( + "datetime: Invalid second digit of seconds. " "Found '%c', must be integer >= 0 and <= 9.", c); break; @@ -355,8 +354,8 @@ blogc_convert_datetime(const char *orig, const char *format, case DATETIME_SECOND_MINUTE: case DATETIME_FIRST_SECOND: case DATETIME_SECOND_SECOND: - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Invalid datetime string. " + *err = sb_strerror_new_printf( + "datetime: Invalid datetime string. " "Found '%s', formats allowed are: 'yyyy-mm-dd hh:mm:ss', " "'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and 'yyyy-mm-dd'.", orig); @@ -374,13 +373,13 @@ blogc_convert_datetime(const char *orig, const char *format, char buf[1024]; if (0 == strftime(buf, sizeof(buf), format, &t)) { - *err = bc_error_new_printf(BLOGC_WARNING_DATETIME_PARSER, - "Failed to format DATE variable, FORMAT is too long: %s", + *err = sb_strerror_new_printf( + "datetime: Failed to format DATE variable, FORMAT is too long: %s", format); return NULL; } - return bc_strdup(buf); + return sb_strdup(buf); #endif } diff --git a/src/blogc/datetime-parser.h b/src/blogc/datetime-parser.h index 8617ad0..25d03f2 100644 --- a/src/blogc/datetime-parser.h +++ b/src/blogc/datetime-parser.h @@ -9,9 +9,9 @@ #ifndef _DATETIME_H #define _DATETIME_H -#include "../common/error.h" +#include <squareball.h> char* blogc_convert_datetime(const char *orig, const char *format, - bc_error_t **err); + sb_error_t **err); #endif /* _DATETIME_H */ diff --git a/src/blogc/debug.c b/src/blogc/debug.c index 11e7973..851d4cb 100644 --- a/src/blogc/debug.c +++ b/src/blogc/debug.c @@ -7,9 +7,9 @@ */ #include <stdio.h> +#include <squareball.h> #include "template-parser.h" -#include "../common/utils.h" #include "debug.h" @@ -34,9 +34,9 @@ get_operator(blogc_template_operator_t op) void -blogc_debug_template(bc_slist_t *ast) +blogc_debug_template(sb_slist_t *ast) { - for (bc_slist_t *tmp = ast; tmp != NULL; tmp = tmp->next) { + for (sb_slist_t *tmp = ast; tmp != NULL; tmp = tmp->next) { blogc_template_node_t *data = tmp->data; fprintf(stderr, "DEBUG: <TEMPLATE "); switch (data->type) { diff --git a/src/blogc/debug.h b/src/blogc/debug.h index 6138a91..8bff4cf 100644 --- a/src/blogc/debug.h +++ b/src/blogc/debug.h @@ -9,8 +9,8 @@ #ifndef ___DEBUG_H #define ___DEBUG_H -#include "../common/utils.h" +#include <squareball.h> -void blogc_debug_template(bc_slist_t *ast); +void blogc_debug_template(sb_slist_t *ast); #endif /* ___DEBUG_H */ diff --git a/src/blogc/funcvars.c b/src/blogc/funcvars.c index 6f0700b..358e3b4 100644 --- a/src/blogc/funcvars.c +++ b/src/blogc/funcvars.c @@ -9,11 +9,11 @@ #include <stdbool.h> #include <stdlib.h> #include <string.h> +#include <squareball.h> -#include "funcvars.h" #include "rusage.h" #include "sysinfo.h" -#include "../common/utils.h" +#include "funcvars.h" static const struct func_map { @@ -41,14 +41,14 @@ static const struct func_map { void -blogc_funcvars_eval(bc_trie_t *global, const char *name) +blogc_funcvars_eval(sb_trie_t *global, const char *name) { if (global == NULL || name == NULL) return; // protect against evaluating the same function twice in the same global // context - if (NULL != bc_trie_lookup(global, name)) + if (NULL != sb_trie_lookup(global, name)) return; for (size_t i = 0; funcs[i].variable != NULL; i++) { diff --git a/src/blogc/funcvars.h b/src/blogc/funcvars.h index aae1bc3..3768f81 100644 --- a/src/blogc/funcvars.h +++ b/src/blogc/funcvars.h @@ -10,10 +10,10 @@ #define ___FUNCVARS_H #include <stdbool.h> -#include "../common/utils.h" +#include <squareball.h> -typedef void (*blogc_funcvars_func_t) (bc_trie_t*); +typedef void (*blogc_funcvars_func_t) (sb_trie_t*); -void blogc_funcvars_eval(bc_trie_t *global, const char *name); +void blogc_funcvars_eval(sb_trie_t *global, const char *name); #endif /* ___FUNCVARS_H */ diff --git a/src/blogc/loader.c b/src/blogc/loader.c index d620988..3a1b8fc 100644 --- a/src/blogc/loader.c +++ b/src/blogc/loader.c @@ -12,14 +12,12 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <squareball.h> + #include "datetime-parser.h" #include "source-parser.h" #include "template-parser.h" #include "loader.h" -#include "../common/error.h" -#include "../common/file.h" -#include "../common/utils.h" -#include "../common/sort.h" char* @@ -31,7 +29,7 @@ blogc_get_filename(const char *f) if (strlen(f) == 0) return NULL; - char *filename = bc_strdup(f); + char *filename = sb_strdup(f); // keep a pointer to original string char *tmp = filename; @@ -52,46 +50,46 @@ blogc_get_filename(const char *f) } } - char *final_filename = bc_strdup(tmp); + char *final_filename = sb_strdup(tmp); free(filename); return final_filename; } -bc_slist_t* -blogc_template_parse_from_file(const char *f, bc_error_t **err) +sb_slist_t* +blogc_template_parse_from_file(const char *f, sb_error_t **err) { if (err == NULL || *err != NULL) return NULL; size_t len; - char *s = bc_file_get_contents(f, true, &len, err); + char *s = sb_file_get_contents_utf8(f, &len, err); if (s == NULL) return NULL; - bc_slist_t *rv = blogc_template_parse(s, len, err); + sb_slist_t *rv = blogc_template_parse(s, len, err); free(s); return rv; } -bc_trie_t* -blogc_source_parse_from_file(const char *f, bc_error_t **err) +sb_trie_t* +blogc_source_parse_from_file(const char *f, sb_error_t **err) { if (err == NULL || *err != NULL) return NULL; size_t len; - char *s = bc_file_get_contents(f, true, &len, err); + char *s = sb_file_get_contents_utf8(f, &len, err); if (s == NULL) return NULL; - bc_trie_t *rv = blogc_source_parse(s, len, err); + sb_trie_t *rv = blogc_source_parse(s, len, err); // set FILENAME variable if (rv != NULL) { char *filename = blogc_get_filename(f); if (filename != NULL) - bc_trie_insert(rv, "FILENAME", filename); + sb_trie_insert(rv, "FILENAME", filename); } free(s); @@ -102,8 +100,8 @@ blogc_source_parse_from_file(const char *f, bc_error_t **err) static int sort_source(const void *a, const void *b) { - const char *ca = bc_trie_lookup((bc_trie_t*) a, "c"); - const char *cb = bc_trie_lookup((bc_trie_t*) b, "c"); + const char *ca = sb_trie_lookup((sb_trie_t*) a, "c"); + const char *cb = sb_trie_lookup((sb_trie_t*) b, "c"); if (ca == NULL || cb == NULL) { return 0; // wat @@ -120,88 +118,88 @@ sort_source_reverse(const void *a, const void *b) } -bc_slist_t* -blogc_source_parse_from_files(bc_trie_t *conf, bc_slist_t *l, bc_error_t **err) +sb_slist_t* +blogc_source_parse_from_files(sb_trie_t *conf, sb_slist_t *l, sb_error_t **err) { if (err == NULL || *err != NULL) return NULL; - bool sort = bc_str_to_bool(bc_trie_lookup(conf, "FILTER_SORT")); + bool sort = sb_str_to_bool(sb_trie_lookup(conf, "FILTER_SORT")); - bc_slist_t* sources = NULL; - bc_error_t *tmp_err = NULL; + sb_slist_t* sources = NULL; + sb_error_t *tmp_err = NULL; size_t with_date = 0; - for (bc_slist_t *tmp = l; tmp != NULL; tmp = tmp->next) { + for (sb_slist_t *tmp = l; tmp != NULL; tmp = tmp->next) { char *f = tmp->data; - bc_trie_t *s = blogc_source_parse_from_file(f, &tmp_err); + sb_trie_t *s = blogc_source_parse_from_file(f, &tmp_err); if (s == NULL) { - *err = bc_error_new_printf(BLOGC_ERROR_LOADER, - "An error occurred while parsing source file: %s\n\n%s", - f, tmp_err->msg); - bc_error_free(tmp_err); - bc_slist_free_full(sources, (bc_free_func_t) bc_trie_free); + *err = sb_strerror_new_printf( + "loader: An error occurred while parsing source file: %s\n> %s", + f, sb_error_to_string(tmp_err)); + sb_error_free(tmp_err); + sb_slist_free_full(sources, (sb_free_func_t) sb_trie_free); return NULL; } - const char *date = bc_trie_lookup(s, "DATE"); + const char *date = sb_trie_lookup(s, "DATE"); if (date != NULL) { with_date++; } if (sort) { if (date == NULL) { - *err = bc_error_new_printf(BLOGC_ERROR_LOADER, - "'FILTER_SORT' requires that 'DATE' variable is set for " - "every source file: %s", f); - bc_trie_free(s); - bc_slist_free_full(sources, (bc_free_func_t) bc_trie_free); + *err = sb_strerror_new_printf( + "loader: 'FILTER_SORT' requires that 'DATE' variable is " + "set for every source file: %s", f); + sb_trie_free(s); + sb_slist_free_full(sources, (sb_free_func_t) sb_trie_free); return NULL; } char *timestamp = blogc_convert_datetime(date, "%s", &tmp_err); if (timestamp == NULL) { - *err = bc_error_new_printf(BLOGC_ERROR_LOADER, - "An error occurred while parsing 'DATE' variable: %s" - "\n\n%s", f, tmp_err->msg); - bc_error_free(tmp_err); - bc_trie_free(s); - bc_slist_free_full(sources, (bc_free_func_t) bc_trie_free); + *err = sb_strerror_new_printf( + "loader: An error occurred while parsing 'DATE' variable: " + "%s\n> %s", f, sb_error_to_string(tmp_err)); + sb_error_free(tmp_err); + sb_trie_free(s); + sb_slist_free_full(sources, (sb_free_func_t) sb_trie_free); return NULL; } - bc_trie_insert(s, "c", timestamp); + sb_trie_insert(s, "c", timestamp); } - sources = bc_slist_append(sources, s); + sources = sb_slist_append(sources, s); } - if (with_date > 0 && with_date < bc_slist_length(l)) { - *err = bc_error_new_printf(BLOGC_ERROR_LOADER, - "'DATE' variable provided for at least one source file, but not " - "for all source files. It must be provided for all files."); - bc_slist_free_full(sources, (bc_free_func_t) bc_trie_free); + if (with_date > 0 && with_date < sb_slist_length(l)) { + *err = sb_strerror_new( + "loader: 'DATE' variable provided for at least one source file, " + "but not for all source files. It must be provided for all files."); + sb_slist_free_full(sources, (sb_free_func_t) sb_trie_free); return NULL; } - bool reverse = bc_str_to_bool(bc_trie_lookup(conf, "FILTER_REVERSE")); + bool reverse = sb_str_to_bool(sb_trie_lookup(conf, "FILTER_REVERSE")); if (sort) { - sources = bc_slist_sort(sources, - (bc_sort_func_t) (reverse ? sort_source_reverse : sort_source)); + sources = sb_slist_sort(sources, + (sb_sort_func_t) (reverse ? sort_source_reverse : sort_source)); } else if (reverse) { - bc_slist_t *tmp_sources = NULL; - for (bc_slist_t *tmp = sources; tmp != NULL; tmp = tmp->next) { - tmp_sources = bc_slist_prepend(tmp_sources, tmp->data); + sb_slist_t *tmp_sources = NULL; + for (sb_slist_t *tmp = sources; tmp != NULL; tmp = tmp->next) { + tmp_sources = sb_slist_prepend(tmp_sources, tmp->data); } - bc_slist_t *tmp = sources; + sb_slist_t *tmp = sources; sources = tmp_sources; - bc_slist_free(tmp); + sb_slist_free(tmp); } - const char *filter_tag = bc_trie_lookup(conf, "FILTER_TAG"); - const char *filter_page = bc_trie_lookup(conf, "FILTER_PAGE"); - const char *filter_per_page = bc_trie_lookup(conf, "FILTER_PER_PAGE"); + const char *filter_tag = sb_trie_lookup(conf, "FILTER_TAG"); + const char *filter_page = sb_trie_lookup(conf, "FILTER_PAGE"); + const char *filter_per_page = sb_trie_lookup(conf, "FILTER_PER_PAGE"); const char *ptr; char *endptr; @@ -227,17 +225,17 @@ blogc_source_parse_from_files(bc_trie_t *conf, bc_slist_t *l, bc_error_t **err) size_t end = start + per_page; size_t counter = 0; - bc_slist_t *rv = NULL; - for (bc_slist_t *tmp = sources; tmp != NULL; tmp = tmp->next) { - bc_trie_t *s = tmp->data; + sb_slist_t *rv = NULL; + for (sb_slist_t *tmp = sources; tmp != NULL; tmp = tmp->next) { + sb_trie_t *s = tmp->data; if (filter_tag != NULL) { - const char *tags_str = bc_trie_lookup(s, "TAGS"); + const char *tags_str = sb_trie_lookup(s, "TAGS"); // if user wants to filter by tag and no tag is provided, skip it if (tags_str == NULL) { - bc_trie_free(s); + sb_trie_free(s); continue; } - char **tags = bc_str_split(tags_str, ' ', 0); + char **tags = sb_str_split(tags_str, ' ', 0); bool found = false; for (size_t i = 0; tags[i] != NULL; i++) { if (tags[i][0] == '\0') @@ -245,58 +243,58 @@ blogc_source_parse_from_files(bc_trie_t *conf, bc_slist_t *l, bc_error_t **err) if (0 == strcmp(tags[i], filter_tag)) found = true; } - bc_strv_free(tags); + sb_strv_free(tags); if (!found) { - bc_trie_free(s); + sb_trie_free(s); continue; } } if (filter_page != NULL) { if (counter < start || counter >= end) { counter++; - bc_trie_free(s); + sb_trie_free(s); continue; } counter++; } - rv = bc_slist_append(rv, s); + rv = sb_slist_append(rv, s); } - bc_slist_free(sources); + sb_slist_free(sources); bool first = true; - for (bc_slist_t *tmp = rv; tmp != NULL; tmp = tmp->next) { - bc_trie_t *s = tmp->data; + for (sb_slist_t *tmp = rv; tmp != NULL; tmp = tmp->next) { + sb_trie_t *s = tmp->data; if (first) { - const char *val = bc_trie_lookup(s, "DATE"); + const char *val = sb_trie_lookup(s, "DATE"); if (val != NULL) - bc_trie_insert(conf, "DATE_FIRST", bc_strdup(val)); - val = bc_trie_lookup(s, "FILENAME"); + sb_trie_insert(conf, "DATE_FIRST", sb_strdup(val)); + val = sb_trie_lookup(s, "FILENAME"); if (val != NULL) - bc_trie_insert(conf, "FILENAME_FIRST", bc_strdup(val)); + sb_trie_insert(conf, "FILENAME_FIRST", sb_strdup(val)); first = false; } if (tmp->next == NULL) { // last - const char *val = bc_trie_lookup(s, "DATE"); + const char *val = sb_trie_lookup(s, "DATE"); if (val != NULL) - bc_trie_insert(conf, "DATE_LAST", bc_strdup(val)); - val = bc_trie_lookup(s, "FILENAME"); + sb_trie_insert(conf, "DATE_LAST", sb_strdup(val)); + val = sb_trie_lookup(s, "FILENAME"); if (val != NULL) - bc_trie_insert(conf, "FILENAME_LAST", bc_strdup(val)); + sb_trie_insert(conf, "FILENAME_LAST", sb_strdup(val)); } } if (filter_page != NULL) { size_t last_page = ceilf(((float) counter) / per_page); - bc_trie_insert(conf, "CURRENT_PAGE", bc_strdup_printf("%ld", page)); + sb_trie_insert(conf, "CURRENT_PAGE", sb_strdup_printf("%ld", page)); if (page > 1) - bc_trie_insert(conf, "PREVIOUS_PAGE", bc_strdup_printf("%ld", page - 1)); + sb_trie_insert(conf, "PREVIOUS_PAGE", sb_strdup_printf("%ld", page - 1)); if (page < last_page) - bc_trie_insert(conf, "NEXT_PAGE", bc_strdup_printf("%ld", page + 1)); - if (bc_slist_length(rv) > 0) - bc_trie_insert(conf, "FIRST_PAGE", bc_strdup("1")); + sb_trie_insert(conf, "NEXT_PAGE", sb_strdup_printf("%ld", page + 1)); + if (sb_slist_length(rv) > 0) + sb_trie_insert(conf, "FIRST_PAGE", sb_strdup("1")); if (last_page > 0) - bc_trie_insert(conf, "LAST_PAGE", bc_strdup_printf("%d", last_page)); + sb_trie_insert(conf, "LAST_PAGE", sb_strdup_printf("%d", last_page)); } return rv; diff --git a/src/blogc/loader.h b/src/blogc/loader.h index 66da7d0..89de4db 100644 --- a/src/blogc/loader.h +++ b/src/blogc/loader.h @@ -9,13 +9,12 @@ #ifndef _LOADER_H #define _LOADER_H -#include "../common/error.h" -#include "../common/utils.h" +#include <squareball.h> char* blogc_get_filename(const char *f); -bc_slist_t* blogc_template_parse_from_file(const char *f, bc_error_t **err); -bc_trie_t* blogc_source_parse_from_file(const char *f, bc_error_t **err); -bc_slist_t* blogc_source_parse_from_files(bc_trie_t *conf, bc_slist_t *l, - bc_error_t **err); +sb_slist_t* blogc_template_parse_from_file(const char *f, sb_error_t **err); +sb_trie_t* blogc_source_parse_from_file(const char *f, sb_error_t **err); +sb_slist_t* blogc_source_parse_from_files(sb_trie_t *conf, sb_slist_t *l, + sb_error_t **err); #endif /* _LOADER_H */ diff --git a/src/blogc/main.c b/src/blogc/main.c index 2f93d18..a12fa90 100644 --- a/src/blogc/main.c +++ b/src/blogc/main.c @@ -27,14 +27,12 @@ #include <stdint.h> #include <stdlib.h> #include <string.h> +#include <squareball.h> #include "debug.h" #include "template-parser.h" #include "loader.h" #include "renderer.h" -#include "../common/error.h" -#include "../common/utf8.h" -#include "../common/utils.h" #ifdef MAKE_EMBEDDED extern int bm_main(int argc, char **argv); @@ -94,7 +92,7 @@ blogc_print_usage(void) static void blogc_mkdir_recursive(const char *filename) { - char *fname = bc_strdup(filename); + char *fname = sb_strdup(filename); for (char *tmp = fname; *tmp != '\0'; tmp++) { if (*tmp != '/' && *tmp != '\\') continue; @@ -126,8 +124,8 @@ blogc_mkdir_recursive(const char *filename) } -static bc_slist_t* -blogc_read_stdin_to_list(bc_slist_t *l) +static sb_slist_t* +blogc_read_stdin_to_list(sb_slist_t *l) { char buffer[4096]; while (NULL != fgets(buffer, 4096, stdin)) { @@ -142,7 +140,7 @@ blogc_read_stdin_to_list(bc_slist_t *l) buffer[len - 1] = '\0'; if (strlen(buffer) == 0) continue; - l = bc_slist_append(l, bc_strdup(buffer)); + l = sb_slist_append(l, sb_strdup(buffer)); } return l; } @@ -168,10 +166,10 @@ main(int argc, char **argv) char *tmp = NULL; char **pieces = NULL; - bc_slist_t *sources = NULL; - bc_trie_t *listing_entry_source = NULL; - bc_trie_t *config = bc_trie_new(free); - bc_trie_insert(config, "BLOGC_VERSION", bc_strdup(PACKAGE_VERSION)); + sb_slist_t *sources = NULL; + sb_trie_t *listing_entry_source = NULL; + sb_trie_t *config = sb_trie_new(free); + sb_trie_insert(config, "BLOGC_VERSION", sb_strdup(PACKAGE_VERSION)); for (size_t i = 1; i < argc; i++) { tmp = NULL; @@ -194,27 +192,27 @@ main(int argc, char **argv) break; case 'e': if (argv[i][2] != '\0') - listing_entry = bc_strdup(argv[i] + 2); + listing_entry = sb_strdup(argv[i] + 2); else if (i + 1 < argc) - listing_entry = bc_strdup(argv[++i]); + listing_entry = sb_strdup(argv[++i]); break; case 't': if (argv[i][2] != '\0') - template = bc_strdup(argv[i] + 2); + template = sb_strdup(argv[i] + 2); else if (i + 1 < argc) - template = bc_strdup(argv[++i]); + template = sb_strdup(argv[++i]); break; case 'o': if (argv[i][2] != '\0') - output = bc_strdup(argv[i] + 2); + output = sb_strdup(argv[i] + 2); else if (i + 1 < argc) - output = bc_strdup(argv[++i]); + output = sb_strdup(argv[++i]); break; case 'p': if (argv[i][2] != '\0') - print = bc_strdup(argv[i] + 2); + print = sb_strdup(argv[i] + 2); else if (i + 1 < argc) - print = bc_strdup(argv[++i]); + print = sb_strdup(argv[++i]); break; case 'D': if (argv[i][2] != '\0') @@ -222,16 +220,16 @@ main(int argc, char **argv) else if (i + 1 < argc) tmp = argv[++i]; if (tmp != NULL) { - if (!bc_utf8_validate((uint8_t*) tmp, strlen(tmp))) { + if (!sb_utf8_validate((uint8_t*) tmp, strlen(tmp))) { fprintf(stderr, "blogc: error: invalid value for " "-D (must be valid UTF-8 string): %s\n", tmp); goto cleanup; } - pieces = bc_str_split(tmp, '=', 2); - if (bc_strv_length(pieces) != 2) { + pieces = sb_str_split(tmp, '=', 2); + if (sb_strv_length(pieces) != 2) { fprintf(stderr, "blogc: error: invalid value for " "-D (must have an '='): %s\n", tmp); - bc_strv_free(pieces); + sb_strv_free(pieces); rv = 1; goto cleanup; } @@ -242,13 +240,13 @@ main(int argc, char **argv) fprintf(stderr, "blogc: error: invalid value " "for -D (configuration key must be uppercase " "with '_'): %s\n", pieces[0]); - bc_strv_free(pieces); + sb_strv_free(pieces); rv = 1; goto cleanup; } } - bc_trie_insert(config, pieces[0], bc_strdup(pieces[1])); - bc_strv_free(pieces); + sb_trie_insert(config, pieces[0], sb_strdup(pieces[1])); + sb_strv_free(pieces); pieces = NULL; } break; @@ -266,7 +264,7 @@ main(int argc, char **argv) } } else { - sources = bc_slist_append(sources, bc_strdup(argv[i])); + sources = sb_slist_append(sources, sb_strdup(argv[i])); } #ifdef MAKE_EMBEDDED @@ -281,14 +279,14 @@ main(int argc, char **argv) if (input_stdin) sources = blogc_read_stdin_to_list(sources); - if (!listing && bc_slist_length(sources) == 0) { + if (!listing && sb_slist_length(sources) == 0) { blogc_print_usage(); fprintf(stderr, "blogc: error: one source file is required\n"); rv = 1; goto cleanup; } - if (!listing && bc_slist_length(sources) > 1) { + if (!listing && sb_slist_length(sources) > 1) { blogc_print_usage(); fprintf(stderr, "blogc: error: only one source file should be provided, " "if running without '-l'\n"); @@ -296,11 +294,11 @@ main(int argc, char **argv) goto cleanup; } - bc_error_t *err = NULL; + sb_error_t *err = NULL; - bc_slist_t *s = blogc_source_parse_from_files(config, sources, &err); + sb_slist_t *s = blogc_source_parse_from_files(config, sources, &err); if (err != NULL) { - bc_error_print(err, "blogc"); + fprintf(stderr, "blogc: error: %s\n", sb_error_to_string(err)); rv = 1; goto cleanup2; } @@ -308,14 +306,14 @@ main(int argc, char **argv) if (listing && listing_entry != NULL) { listing_entry_source = blogc_source_parse_from_file(listing_entry, &err); if (err != NULL) { - bc_error_print(err, "blogc"); + fprintf(stderr, "blogc: error: %s\n", sb_error_to_string(err)); rv = 1; goto cleanup2; } } if (print != NULL) { - bc_trie_t *local = NULL; + sb_trie_t *local = NULL; if (!listing && s != NULL) { local = s->data; } @@ -339,9 +337,9 @@ main(int argc, char **argv) goto cleanup2; } - bc_slist_t* l = blogc_template_parse_from_file(template, &err); + sb_slist_t* l = blogc_template_parse_from_file(template, &err); if (err != NULL) { - bc_error_print(err, "blogc"); + fprintf(stderr, "blogc: error: %s\n", sb_error_to_string(err)); rv = 1; goto cleanup3; } @@ -376,15 +374,15 @@ cleanup4: cleanup3: blogc_template_free_ast(l); cleanup2: - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); - bc_error_free(err); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); + sb_error_free(err); cleanup: - bc_trie_free(config); + sb_trie_free(config); free(template); free(output); free(print); free(listing_entry); - bc_trie_free(listing_entry_source); - bc_slist_free_full(sources, free); + sb_trie_free(listing_entry_source); + sb_slist_free_full(sources, free); return rv; } diff --git a/src/blogc/renderer.c b/src/blogc/renderer.c index 87b3f5a..42e4d29 100644 --- a/src/blogc/renderer.c +++ b/src/blogc/renderer.c @@ -11,67 +11,68 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <squareball.h> + #include "datetime-parser.h" #include "funcvars.h" #include "template-parser.h" #include "renderer.h" -#include "../common/error.h" -#include "../common/utils.h" const char* -blogc_get_variable(const char *name, bc_trie_t *global, bc_trie_t *local) +blogc_get_variable(const char *name, sb_trie_t *global, sb_trie_t *local) { const char *rv = NULL; if (local != NULL) { - rv = bc_trie_lookup(local, name); + rv = sb_trie_lookup(local, name); if (rv != NULL) return rv; } if (global != NULL) - rv = bc_trie_lookup(global, name); + rv = sb_trie_lookup(global, name); return rv; } char* -blogc_format_date(const char *date, bc_trie_t *global, bc_trie_t *local) +blogc_format_date(const char *date, sb_trie_t *global, sb_trie_t *local) { const char *date_format = blogc_get_variable("DATE_FORMAT", global, local); if (date == NULL) return NULL; if (date_format == NULL) - return bc_strdup(date); + return sb_strdup(date); - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *rv = blogc_convert_datetime(date, date_format, &err); if (err != NULL) { - bc_error_print(err, "blogc"); - bc_error_free(err); - return bc_strdup(date); + fprintf(stderr, "blogc: warning: An error occurred while formatting " + "date:\n> %s\n", sb_error_to_string(err)); + sb_error_free(err); + return sb_strdup(date); } return rv; } char* -blogc_format_variable(const char *name, bc_trie_t *global, bc_trie_t *local, - bc_slist_t *foreach_var) +blogc_format_variable(const char *name, sb_trie_t *global, sb_trie_t *local, + sb_slist_t *foreach_var) { // if used asked for a variable that exists, just return it right away const char *value = blogc_get_variable(name, global, local); if (value != NULL) - return bc_strdup(value); + return sb_strdup(value); // do the same for special variable 'FOREACH_ITEM' if (0 == strcmp(name, "FOREACH_ITEM")) { if (foreach_var != NULL && foreach_var->data != NULL) { - return bc_strdup(foreach_var->data); + return sb_strdup(foreach_var->data); } return NULL; } - char *var = bc_strdup(name); + char *var = sb_strdup(name); size_t i; size_t last = strlen(var); @@ -96,7 +97,7 @@ blogc_format_variable(const char *name, bc_trie_t *global, bc_trie_t *local, bool must_format = false; - if (bc_str_ends_with(var, "_FORMATTED")) { + if (sb_str_ends_with(var, "_FORMATTED")) { var[strlen(var) - 10] = '\0'; must_format = true; } @@ -118,23 +119,23 @@ blogc_format_variable(const char *name, bc_trie_t *global, bc_trie_t *local, char *rv = NULL; if (must_format) { - if (bc_str_starts_with(name, "DATE_")) { + if (sb_str_starts_with(name, "DATE_")) { rv = blogc_format_date(value, global, local); } else { fprintf(stderr, "warning: no formatter found for '%s', " "ignoring.\n", var); - rv = bc_strdup(value); + rv = sb_strdup(value); } } else { - rv = bc_strdup(value); + rv = sb_strdup(value); } free(var); if (len > 0) { - char *tmp = bc_strndup(rv, len); + char *tmp = sb_strndup(rv, len); free(rv); rv = tmp; } @@ -143,19 +144,19 @@ blogc_format_variable(const char *name, bc_trie_t *global, bc_trie_t *local, } -bc_slist_t* -blogc_split_list_variable(const char *name, bc_trie_t *global, bc_trie_t *local) +sb_slist_t* +blogc_split_list_variable(const char *name, sb_trie_t *global, sb_trie_t *local) { const char *value = blogc_get_variable(name, global, local); if (value == NULL) return NULL; - bc_slist_t *rv = NULL; + sb_slist_t *rv = NULL; - char **tmp = bc_str_split(value, ' ', 0); + char **tmp = sb_str_split(value, ' ', 0); for (size_t i = 0; tmp[i] != NULL; i++) { if (tmp[i][0] != '\0') // ignore empty strings - rv = bc_slist_append(rv, tmp[i]); + rv = sb_slist_append(rv, tmp[i]); else free(tmp[i]); } @@ -166,25 +167,25 @@ blogc_split_list_variable(const char *name, bc_trie_t *global, bc_trie_t *local) char* -blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_trie_t *listing_entry, bc_trie_t *config, bool listing) +blogc_render(sb_slist_t *tmpl, sb_slist_t *sources, sb_trie_t *listing_entry, sb_trie_t *config, bool listing) { if (tmpl == NULL) return NULL; - bc_slist_t *current_source = NULL; - bc_slist_t *listing_start = NULL; + sb_slist_t *current_source = NULL; + sb_slist_t *listing_start = NULL; - bc_string_t *str = bc_string_new(); + sb_string_t *str = sb_string_new(); - bc_trie_t *tmp_source = NULL; + sb_trie_t *tmp_source = NULL; char *config_value = NULL; char *defined = NULL; size_t if_count = 0; - bc_slist_t *foreach_var = NULL; - bc_slist_t *foreach_var_start = NULL; - bc_slist_t *foreach_start = NULL; + sb_slist_t *foreach_var = NULL; + sb_slist_t *foreach_var_start = NULL; + sb_slist_t *foreach_start = NULL; bool if_not = false; bool inside_block = false; @@ -193,7 +194,7 @@ blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_trie_t *listing_entry, bc int cmp = 0; - bc_slist_t *tmp = tmpl; + sb_slist_t *tmp = tmpl; while (tmp != NULL) { blogc_template_node_t *node = tmp->data; @@ -201,7 +202,7 @@ blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_trie_t *listing_entry, bc case BLOGC_TEMPLATE_NODE_CONTENT: if (node->data[0] != NULL) - bc_string_append(str, node->data[0]); + sb_string_append(str, node->data[0]); break; case BLOGC_TEMPLATE_NODE_BLOCK: @@ -272,7 +273,7 @@ blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_trie_t *listing_entry, bc config_value = blogc_format_variable(node->data[0], config, inside_block ? tmp_source : NULL, foreach_var); if (config_value != NULL) { - bc_string_append(str, config_value); + sb_string_append(str, config_value); free(config_value); config_value = NULL; break; @@ -314,7 +315,7 @@ blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_trie_t *listing_entry, bc (node->data[1][0] == '"') && (node->data[1][strlen(node->data[1]) - 1] == '"')) { - defined2 = bc_strndup(node->data[1] + 1, + defined2 = sb_strndup(node->data[1] + 1, strlen(node->data[1]) - 2); } else { @@ -463,7 +464,7 @@ blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_trie_t *listing_entry, bc } } foreach_start = NULL; - bc_slist_free_full(foreach_var_start, free); + sb_slist_free_full(foreach_var_start, free); foreach_var_start = NULL; break; } @@ -473,5 +474,5 @@ blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_trie_t *listing_entry, bc // no need to free temporary variables here. the template parser makes sure // that templates are sane and statements are closed. - return bc_string_free(str, false); + return sb_string_free(str, false); } diff --git a/src/blogc/renderer.h b/src/blogc/renderer.h index 8f2516a..c0bf289 100644 --- a/src/blogc/renderer.h +++ b/src/blogc/renderer.h @@ -10,15 +10,15 @@ #define _RENDERER_H #include <stdbool.h> -#include "../common/utils.h" +#include <squareball.h> -const char* blogc_get_variable(const char *name, bc_trie_t *global, bc_trie_t *local); -char* blogc_format_date(const char *date, bc_trie_t *global, bc_trie_t *local); -char* blogc_format_variable(const char *name, bc_trie_t *global, bc_trie_t *local, - bc_slist_t *foreach_var); -bc_slist_t* blogc_split_list_variable(const char *name, bc_trie_t *global, - bc_trie_t *local); -char* blogc_render(bc_slist_t *tmpl, bc_slist_t *sources, bc_trie_t *listing_entr, - bc_trie_t *config, bool listing); +const char* blogc_get_variable(const char *name, sb_trie_t *global, sb_trie_t *local); +char* blogc_format_date(const char *date, sb_trie_t *global, sb_trie_t *local); +char* blogc_format_variable(const char *name, sb_trie_t *global, sb_trie_t *local, + sb_slist_t *foreach_var); +sb_slist_t* blogc_split_list_variable(const char *name, sb_trie_t *global, + sb_trie_t *local); +char* blogc_render(sb_slist_t *tmpl, sb_slist_t *sources, sb_trie_t *listing_entr, + sb_trie_t *config, bool listing); #endif /* _RENDERER_H */ diff --git a/src/blogc/rusage.c b/src/blogc/rusage.c index a38848d..8753506 100644 --- a/src/blogc/rusage.c +++ b/src/blogc/rusage.c @@ -19,7 +19,8 @@ #endif /* HAVE_SYS_RESOURCE_H */ #include <stdlib.h> -#include "../common/utils.h" +#include <squareball.h> + #include "rusage.h" @@ -33,7 +34,7 @@ blogc_rusage_get(void) if (0 != getrusage(RUSAGE_SELF, &usage)) return NULL; - blogc_rusage_t *rv = bc_malloc(sizeof(blogc_rusage_t)); + blogc_rusage_t *rv = sb_malloc(sizeof(blogc_rusage_t)); rv->cpu_time = ( (usage.ru_utime.tv_sec * 1000000) + usage.ru_utime.tv_usec + (usage.ru_stime.tv_sec * 1000000) + usage.ru_stime.tv_usec); @@ -48,14 +49,14 @@ char* blogc_rusage_format_cpu_time(long long time) { if (time >= 1000000) - return bc_strdup_printf("%.3fs", ((float) time) / 1000000.0); + return sb_strdup_printf("%.3fs", ((float) time) / 1000000.0); // this is a special case: some systems may report the cpu time rounded up to the // milisecond. it is useless to show ".000" in this case. if (time >= 1000) - return bc_strdup_printf("%.*fms", time % 1000 ? 3 : 0, ((float) time) / 1000.0); + return sb_strdup_printf("%.*fms", time % 1000 ? 3 : 0, ((float) time) / 1000.0); - return bc_strdup_printf("%dus", time); + return sb_strdup_printf("%dus", time); } @@ -63,23 +64,23 @@ char* blogc_rusage_format_memory(long mem) { if (mem >= 1048576) - return bc_strdup_printf("%.3fGB", ((float) mem) / 1048576.0); + return sb_strdup_printf("%.3fGB", ((float) mem) / 1048576.0); if (mem >= 1024) - return bc_strdup_printf("%.3fMB", ((float) mem) / 1024.0); - return bc_strdup_printf("%dKB", mem); + return sb_strdup_printf("%.3fMB", ((float) mem) / 1024.0); + return sb_strdup_printf("%dKB", mem); } void -blogc_rusage_inject(bc_trie_t *global) +blogc_rusage_inject(sb_trie_t *global) { blogc_rusage_t *usage = blogc_rusage_get(); if (usage == NULL) return; - bc_trie_insert(global, "BLOGC_RUSAGE_CPU_TIME", + sb_trie_insert(global, "BLOGC_RUSAGE_CPU_TIME", blogc_rusage_format_cpu_time(usage->cpu_time)); - bc_trie_insert(global, "BLOGC_RUSAGE_MEMORY", + sb_trie_insert(global, "BLOGC_RUSAGE_MEMORY", blogc_rusage_format_memory(usage->memory)); free(usage); diff --git a/src/blogc/rusage.h b/src/blogc/rusage.h index 6344066..725a3b6 100644 --- a/src/blogc/rusage.h +++ b/src/blogc/rusage.h @@ -19,7 +19,7 @@ #endif #endif -#include "../common/utils.h" +#include <squareball.h> typedef struct { long long cpu_time; // in microseconds @@ -31,6 +31,6 @@ blogc_rusage_t* blogc_rusage_get(void); char* blogc_rusage_format_cpu_time(long long time); char* blogc_rusage_format_memory(long mem); -void blogc_rusage_inject(bc_trie_t *global); +void blogc_rusage_inject(sb_trie_t *global); #endif /* ___RUSAGE_H */ diff --git a/src/blogc/source-parser.c b/src/blogc/source-parser.c index 18cf95a..fb181de 100644 --- a/src/blogc/source-parser.c +++ b/src/blogc/source-parser.c @@ -8,11 +8,10 @@ #include <stdlib.h> #include <string.h> +#include <squareball.h> #include "content-parser.h" #include "source-parser.h" -#include "../common/error.h" -#include "../common/utils.h" typedef enum { @@ -26,8 +25,8 @@ typedef enum { } blogc_source_parser_state_t; -bc_trie_t* -blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) +sb_trie_t* +blogc_source_parse(const char *src, size_t src_len, sb_error_t **err) { if (err == NULL || *err != NULL) return NULL; @@ -39,7 +38,7 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) char *key = NULL; char *tmp = NULL; char *content = NULL; - bc_trie_t *rv = bc_trie_new(free); + sb_trie_t *rv = sb_trie_new(free); blogc_source_parser_state_t state = SOURCE_START; @@ -60,16 +59,16 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) state = SOURCE_SEPARATOR; break; } - *err = bc_error_parser(BLOGC_ERROR_SOURCE_PARSER, src, src_len, - current, - "Can't find a configuration key or the content separator."); + *err = sb_parser_error_new(src, src_len, current, + "source: Can't find a configuration key or the content " + "separator."); break; case SOURCE_CONFIG_KEY: if ((c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_') break; if (c == ':') { - key = bc_strndup(src + start, current - start); + key = sb_strndup(src + start, current - start); if (((current - start == 8) && (0 == strncmp("FILENAME", src + start, 8))) || ((current - start == 7) && @@ -93,16 +92,16 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) ((current - start == 13) && (0 == strncmp("BLOGC_VERSION", src + start, 13)))) { - *err = bc_error_new_printf(BLOGC_ERROR_SOURCE_PARSER, - "'%s' variable is forbidden in source files. It will " - "be set for you by the compiler.", key); + *err = sb_strerror_new_printf( + "source: '%s' variable is forbidden in source files. " + "It will be set for you by the compiler.", key); break; } state = SOURCE_CONFIG_VALUE_START; break; } - *err = bc_error_parser(BLOGC_ERROR_SOURCE_PARSER, src, src_len, - current, "Invalid configuration key."); + *err = sb_parser_error_new(src, src_len, current, + "source: Invalid configuration key."); break; case SOURCE_CONFIG_VALUE_START: @@ -111,7 +110,7 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) start = current; break; } - bc_trie_insert(rv, key, bc_strdup("")); + sb_trie_insert(rv, key, sb_strdup("")); free(key); key = NULL; state = SOURCE_START; @@ -119,8 +118,8 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) case SOURCE_CONFIG_VALUE: if (c == '\n' || c == '\r') { - tmp = bc_strndup(src + start, current - start); - bc_trie_insert(rv, key, bc_strdup(bc_str_strip(tmp))); + tmp = sb_strndup(src + start, current - start); + sb_trie_insert(rv, key, sb_strdup(sb_str_strip(tmp))); free(tmp); free(key); key = NULL; @@ -135,9 +134,9 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) state = SOURCE_CONTENT_START; break; } - *err = bc_error_parser(BLOGC_ERROR_SOURCE_PARSER, src, src_len, - current, - "Invalid content separator. Must be more than one '-' characters."); + *err = sb_parser_error_new(src, src_len, current, + "source: Invalid content separator. Must be more than one " + "'-' characters."); break; case SOURCE_CONTENT_START: @@ -149,18 +148,18 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) case SOURCE_CONTENT: if (current == (src_len - 1)) { - tmp = bc_strndup(src + start, src_len - start); - bc_trie_insert(rv, "RAW_CONTENT", tmp); + tmp = sb_strndup(src + start, src_len - start); + sb_trie_insert(rv, "RAW_CONTENT", tmp); char *first_header = NULL; char *description = NULL; content = blogc_content_parse(tmp, &end_excerpt, &first_header, &description); if (first_header != NULL) { // do not override source-provided first_header. - if (NULL == bc_trie_lookup(rv, "FIRST_HEADER")) { + if (NULL == sb_trie_lookup(rv, "FIRST_HEADER")) { // no need to free, because we are transfering memory // ownership to the trie. - bc_trie_insert(rv, "FIRST_HEADER", first_header); + sb_trie_insert(rv, "FIRST_HEADER", first_header); } else { free(first_header); @@ -168,18 +167,18 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) } if (description != NULL) { // do not override source-provided description. - if (NULL == bc_trie_lookup(rv, "DESCRIPTION")) { + if (NULL == sb_trie_lookup(rv, "DESCRIPTION")) { // no need to free, because we are transfering memory // ownership to the trie. - bc_trie_insert(rv, "DESCRIPTION", description); + sb_trie_insert(rv, "DESCRIPTION", description); } else { free(description); } } - bc_trie_insert(rv, "CONTENT", content); - bc_trie_insert(rv, "EXCERPT", end_excerpt == 0 ? - bc_strdup(content) : bc_strndup(content, end_excerpt)); + sb_trie_insert(rv, "CONTENT", content); + sb_trie_insert(rv, "EXCERPT", end_excerpt == 0 ? + sb_strdup(content) : sb_strndup(content, end_excerpt)); } break; } @@ -190,29 +189,28 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) current++; } - if (*err == NULL && bc_trie_size(rv) == 0) { + if (*err == NULL && sb_trie_size(rv) == 0) { // ok, nothing found in the config trie, but no error set either. // let's try to be nice with the users and provide some reasonable // output. :) switch (state) { case SOURCE_START: - *err = bc_error_parser(BLOGC_ERROR_SOURCE_PARSER, src, src_len, - current, "Your source file is empty."); + *err = sb_parser_error_new(src, src_len, current, + "source: Your source file is empty."); break; case SOURCE_CONFIG_KEY: - *err = bc_error_parser(BLOGC_ERROR_SOURCE_PARSER, src, src_len, - current, "Your last configuration key is missing ':' and " + *err = sb_parser_error_new(src, src_len, current, + "source: Your last configuration key is missing ':' and " "the value"); break; case SOURCE_CONFIG_VALUE_START: - *err = bc_error_parser(BLOGC_ERROR_SOURCE_PARSER, src, src_len, - current, "Configuration value not provided for '%s'.", - key); + *err = sb_parser_error_new_printf(src, src_len, current, + "source: Configuration value not provided for '%s'.", key); break; case SOURCE_CONFIG_VALUE: - *err = bc_error_parser(BLOGC_ERROR_SOURCE_PARSER, src, src_len, - current, "No line ending after the configuration value for " + *err = sb_parser_error_new_printf(src, src_len, current, + "source: No line ending after the configuration value for " "'%s'.", key); break; case SOURCE_SEPARATOR: @@ -224,7 +222,7 @@ blogc_source_parse(const char *src, size_t src_len, bc_error_t **err) if (*err != NULL) { free(key); - bc_trie_free(rv); + sb_trie_free(rv); return NULL; } diff --git a/src/blogc/source-parser.h b/src/blogc/source-parser.h index 8672fb0..b90f30b 100644 --- a/src/blogc/source-parser.h +++ b/src/blogc/source-parser.h @@ -10,10 +10,9 @@ #define _SOURCE_PARSER_H #include <stddef.h> -#include "../common/error.h" -#include "../common/utils.h" +#include <squareball.h> -bc_trie_t* blogc_source_parse(const char *src, size_t src_len, - bc_error_t **err); +sb_trie_t* blogc_source_parse(const char *src, size_t src_len, + sb_error_t **err); #endif /* _SOURCE_PARSER_H */ diff --git a/src/blogc/sysinfo.c b/src/blogc/sysinfo.c index cdb860e..9e0ab1b 100644 --- a/src/blogc/sysinfo.c +++ b/src/blogc/sysinfo.c @@ -21,9 +21,8 @@ #include <stdbool.h> #include <stdlib.h> #include <string.h> -#include "../common/error.h" -#include "../common/file.h" -#include "../common/utils.h" +#include <squareball.h> + #include "sysinfo.h" @@ -39,37 +38,37 @@ blogc_sysinfo_get_hostname(void) return NULL; // FIXME: return FQDN instead of local host name - return bc_strdup(buf); + return sb_strdup(buf); #endif } void -blogc_sysinfo_inject_hostname(bc_trie_t *global) +blogc_sysinfo_inject_hostname(sb_trie_t *global) { char *hostname = blogc_sysinfo_get_hostname(); if (hostname == NULL) return; - bc_trie_insert(global, "BLOGC_SYSINFO_HOSTNAME", hostname); + sb_trie_insert(global, "BLOGC_SYSINFO_HOSTNAME", hostname); } char* blogc_sysinfo_get_username(void) { - return bc_strdup(getenv("LOGNAME")); + return sb_strdup(getenv("LOGNAME")); } void -blogc_sysinfo_inject_username(bc_trie_t *global) +blogc_sysinfo_inject_username(sb_trie_t *global) { char *username = blogc_sysinfo_get_username(); if (username == NULL) return; - bc_trie_insert(global, "BLOGC_SYSINFO_USERNAME", username); + sb_trie_insert(global, "BLOGC_SYSINFO_USERNAME", username); } @@ -91,19 +90,19 @@ blogc_sysinfo_get_datetime(void) if (0 == strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", t)) return NULL; - return bc_strdup(buf); + return sb_strdup(buf); #endif } void -blogc_sysinfo_inject_datetime(bc_trie_t *global) +blogc_sysinfo_inject_datetime(sb_trie_t *global) { char *t = blogc_sysinfo_get_datetime(); if (t == NULL) return; - bc_trie_insert(global, "BLOGC_SYSINFO_DATETIME", t); + sb_trie_insert(global, "BLOGC_SYSINFO_DATETIME", t); } @@ -121,10 +120,10 @@ blogc_sysinfo_get_inside_docker(void) inside_docker_evaluated = true; size_t len; - bc_error_t *err = NULL; - char *contents = bc_file_get_contents("/proc/1/cgroup", false, &len, &err); + sb_error_t *err = NULL; + char *contents = sb_file_get_contents("/proc/1/cgroup", &len, &err); if (err != NULL) { - bc_error_free(err); + sb_error_free(err); inside_docker = false; return inside_docker; } @@ -136,8 +135,8 @@ blogc_sysinfo_get_inside_docker(void) void -blogc_sysinfo_inject_inside_docker(bc_trie_t *global) +blogc_sysinfo_inject_inside_docker(sb_trie_t *global) { if (blogc_sysinfo_get_inside_docker()) - bc_trie_insert(global, "BLOGC_SYSINFO_INSIDE_DOCKER", bc_strdup("1")); + sb_trie_insert(global, "BLOGC_SYSINFO_INSIDE_DOCKER", sb_strdup("1")); } diff --git a/src/blogc/sysinfo.h b/src/blogc/sysinfo.h index b249661..23b7ba6 100644 --- a/src/blogc/sysinfo.h +++ b/src/blogc/sysinfo.h @@ -24,15 +24,15 @@ #endif /* HAVE_TIME_H */ #include <stdbool.h> -#include "../common/utils.h" +#include <squareball.h> char* blogc_sysinfo_get_hostname(void); -void blogc_sysinfo_inject_hostname(bc_trie_t *global); +void blogc_sysinfo_inject_hostname(sb_trie_t *global); char* blogc_sysinfo_get_username(void); -void blogc_sysinfo_inject_username(bc_trie_t *global); +void blogc_sysinfo_inject_username(sb_trie_t *global); char* blogc_sysinfo_get_datetime(void); -void blogc_sysinfo_inject_datetime(bc_trie_t *global); +void blogc_sysinfo_inject_datetime(sb_trie_t *global); bool blogc_sysinfo_get_inside_docker(void); -void blogc_sysinfo_inject_inside_docker(bc_trie_t *global); +void blogc_sysinfo_inject_inside_docker(sb_trie_t *global); #endif /* ___SYSINFO_H */ diff --git a/src/blogc/template-parser.c b/src/blogc/template-parser.c index 0b4eb55..1ce0c51 100644 --- a/src/blogc/template-parser.c +++ b/src/blogc/template-parser.c @@ -9,10 +9,12 @@ #include <stdbool.h> #include <stdlib.h> #include <string.h> +#include <squareball.h> #include "template-parser.h" -#include "../common/error.h" -#include "../common/utils.h" + +#define is_space(c) (c == ' ' || c == '\f' || c == '\n' || c == '\r' || \ + c == '\t' || c == '\v') typedef enum { @@ -41,8 +43,8 @@ typedef enum { } blogc_template_parser_state_t; -bc_slist_t* -blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) +sb_slist_t* +blogc_template_parse(const char *src, size_t src_len, sb_error_t **err) { if (err == NULL || *err != NULL) return NULL; @@ -63,7 +65,7 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) bool foreach_open = false; bool block_foreach_open = false; - bc_slist_t *ast = NULL; + sb_slist_t *ast = NULL; blogc_template_node_t *node = NULL; /* @@ -94,21 +96,21 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) case TEMPLATE_START: if (last) { - node = bc_malloc(sizeof(blogc_template_node_t)); + node = sb_malloc(sizeof(blogc_template_node_t)); node->type = type; if (lstrip_next) { - tmp = bc_strndup(src + start, src_len - start); - node->data[0] = bc_strdup(bc_str_lstrip(tmp)); + tmp = sb_strndup(src + start, src_len - start); + node->data[0] = sb_strdup(sb_str_lstrip(tmp)); free(tmp); tmp = NULL; lstrip_next = false; } else { - node->data[0] = bc_strndup(src + start, src_len - start); + node->data[0] = sb_strndup(src + start, src_len - start); } node->op = 0; node->data[1] = NULL; - ast = bc_slist_append(ast, node); + ast = sb_slist_append(ast, node); previous = node; node = NULL; } @@ -125,21 +127,21 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) else state = TEMPLATE_VARIABLE_START; if (end > start) { - node = bc_malloc(sizeof(blogc_template_node_t)); + node = sb_malloc(sizeof(blogc_template_node_t)); node->type = type; if (lstrip_next) { - tmp = bc_strndup(src + start, end - start); - node->data[0] = bc_strdup(bc_str_lstrip(tmp)); + tmp = sb_strndup(src + start, end - start); + node->data[0] = sb_strdup(sb_str_lstrip(tmp)); free(tmp); tmp = NULL; lstrip_next = false; } else { - node->data[0] = bc_strndup(src + start, end - start); + node->data[0] = sb_strndup(src + start, end - start); } node->op = 0; node->data[1] = NULL; - ast = bc_slist_append(ast, node); + ast = sb_slist_append(ast, node); previous = node; node = NULL; } @@ -153,7 +155,7 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) if ((previous != NULL) && (previous->type == BLOGC_TEMPLATE_NODE_CONTENT)) { - previous->data[0] = bc_str_rstrip(previous->data[0]); // does not need copy + previous->data[0] = sb_str_rstrip(previous->data[0]); // does not need copy } state = TEMPLATE_BLOCK_START; break; @@ -161,7 +163,7 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) state = TEMPLATE_BLOCK_START; case TEMPLATE_BLOCK_START: - if (bc_isspace(c)) + if (is_space(c)) break; if (c >= 'a' && c <= 'z') { state = TEMPLATE_BLOCK_TYPE; @@ -169,21 +171,20 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) break; } if (c == '-') { - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid statement syntax. Duplicated whitespace " - "cleaner before statement."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid statement syntax. Duplicated " + "whitespace cleaner before statement."); break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid statement syntax. Must begin with lowercase letter."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid statement syntax. Must begin with " + "lowercase letter."); break; case TEMPLATE_BLOCK_TYPE: if (c >= 'a' && c <= 'z') break; - if (bc_isspace(c)) { + if (is_space(c)) { if ((current - start == 5) && (0 == strncmp("block", src + start, 5))) { @@ -195,8 +196,8 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) block_foreach_open = foreach_open; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, - src, src_len, current, "Blocks can't be nested."); + *err = sb_parser_error_new(src, src_len, current, + "template: Blocks can't be nested."); break; } else if ((current - start == 8) && @@ -204,16 +205,18 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) { if (block_open) { if (if_count != block_if_count) { - *err = bc_error_new_printf(BLOGC_ERROR_TEMPLATE_PARSER, - "%d open 'if', 'ifdef' and/or 'ifndef' statements " - "were not closed inside a '%s' block!", + *err = sb_strerror_new_printf( + "template: %d open 'if', 'ifdef' and/or " + "'ifndef' statements were not closed " + "inside a '%s' block!", if_count - block_if_count, block_type); break; } if (!block_foreach_open && foreach_open) { - *err = bc_error_new_printf(BLOGC_ERROR_TEMPLATE_PARSER, - "An open 'foreach' statement was not closed " - "inside a '%s' block!", block_type); + *err = sb_strerror_new_printf( + "template: An open 'foreach' statement was " + "not closed inside a '%s' block!", + block_type); break; } state = TEMPLATE_BLOCK_END_WHITESPACE_CLEANER; @@ -221,9 +224,9 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) block_open = false; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, - src, src_len, current, - "'endblock' statement without an open 'block' statement."); + *err = sb_parser_error_new(src, src_len, current, + "template: 'endblock' statement without an open " + "'block' statement."); break; } else if ((current - start == 5) && @@ -268,16 +271,14 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) else_open = true; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, - src, src_len, current, - "More than one 'else' statement for an open 'if', " - "'ifdef' or 'ifndef' statement."); + *err = sb_parser_error_new(src, src_len, current, + "template: More than one 'else' statement for " + "an open 'if', 'ifdef' or 'ifndef' statement."); break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, - src, src_len, current, - "'else' statement without an open 'if', 'ifdef' or " - "'ifndef' statement."); + *err = sb_parser_error_new(src, src_len, current, + "template: 'else' statement without an open 'if', " + "'ifdef' or 'ifndef' statement."); break; } else if ((current - start == 5) && @@ -292,10 +293,9 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) else_open = false; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, - src, src_len, current, - "'endif' statement without an open 'if', 'ifdef' or " - "'ifndef' statement."); + *err = sb_parser_error_new(src, src_len, current, + "template: 'endif' statement without an open 'if', " + "'ifdef' or 'ifndef' statement."); break; } else if ((current - start == 7) && @@ -308,9 +308,8 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) foreach_open = true; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, - src, src_len, current, "'foreach' statements can't " - "be nested."); + *err = sb_parser_error_new(src, src_len, current, + "template: 'foreach' statements can't be nested."); break; } else if ((current - start == 10) && @@ -324,37 +323,35 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) foreach_open = false; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, - src, src_len, current, - "'endforeach' statement without an open 'foreach' " - "statement."); + *err = sb_parser_error_new(src, src_len, current, + "template: 'endforeach' statement without an open " + "'foreach' statement."); break; } } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid statement type: Allowed types are: 'block', " + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid statement type: Allowed types are: 'block', " "'endblock', 'if', 'ifdef', 'ifndef', 'else', 'endif', " "'foreach' and 'endforeach'."); break; case TEMPLATE_BLOCK_BLOCK_TYPE_START: - if (bc_isspace(c)) + if (is_space(c)) break; if (c >= 'a' && c <= 'z') { state = TEMPLATE_BLOCK_BLOCK_TYPE; start = current; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid block syntax. Must begin with lowercase letter."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid block syntax. Must begin with lowercase " + "letter."); break; case TEMPLATE_BLOCK_BLOCK_TYPE: if ((c >= 'a' && c <= 'z') || c == '_') break; - if (bc_isspace(c)) { + if (is_space(c)) { if ((current - start == 5) && (0 == strncmp("entry", src + start, 5))) { @@ -388,29 +385,28 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) break; } } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid block type. Allowed types are: 'entry', 'listing', " - "'listing_once' and 'listing_entry'."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid block type. Allowed types are: 'entry', " + "'listing', 'listing_once' and 'listing_entry'."); break; case TEMPLATE_BLOCK_IF_START: - if (bc_isspace(c)) + if (is_space(c)) break; if (c >= 'A' && c <= 'Z') { state = TEMPLATE_BLOCK_IF_VARIABLE; start = current; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid variable name. Must begin with uppercase letter."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid variable name. Must begin with uppercase " + "letter."); break; case TEMPLATE_BLOCK_IF_VARIABLE: if ((c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_') break; - if (bc_isspace(c)) { + if (is_space(c)) { end = current; if (type == BLOGC_TEMPLATE_NODE_IF) state = TEMPLATE_BLOCK_IF_OPERATOR_START; @@ -418,28 +414,27 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) state = TEMPLATE_BLOCK_END_WHITESPACE_CLEANER; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid variable name. Must be uppercase letter, number " - "or '_'."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid variable name. Must be uppercase letter, " + "number or '_'."); break; case TEMPLATE_BLOCK_IF_OPERATOR_START: - if (bc_isspace(c)) + if (is_space(c)) break; state = TEMPLATE_BLOCK_IF_OPERATOR; op_start = current; break; case TEMPLATE_BLOCK_IF_OPERATOR: - if (!bc_isspace(c)) + if (!is_space(c)) break; state = TEMPLATE_BLOCK_IF_OPERAND_START; op_end = current; break; case TEMPLATE_BLOCK_IF_OPERAND_START: - if (bc_isspace(c)) + if (is_space(c)) break; if (c >= 'A' && c <= 'Z') { state = TEMPLATE_BLOCK_IF_VARIABLE_OPERAND; @@ -453,9 +448,8 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) } op_start = 0; op_end = 0; - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid 'if' operand. Must be double-quoted static " + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid 'if' operand. Must be double-quoted static " "string or variable."); break; @@ -476,35 +470,33 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) break; case TEMPLATE_BLOCK_FOREACH_START: - if (bc_isspace(c)) + if (is_space(c)) break; if (c >= 'A' && c <= 'Z') { state = TEMPLATE_BLOCK_FOREACH_VARIABLE; start = current; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid foreach variable name. Must begin with uppercase " - "letter."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid foreach variable name. Must begin with " + "uppercase letter."); break; case TEMPLATE_BLOCK_FOREACH_VARIABLE: if ((c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_') break; - if (bc_isspace(c)) { + if (is_space(c)) { end = current; state = TEMPLATE_BLOCK_END_WHITESPACE_CLEANER; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid foreach variable name. Must be uppercase letter, " - "number or '_'."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid foreach variable name. Must be uppercase " + "letter, number or '_'."); break; case TEMPLATE_BLOCK_END_WHITESPACE_CLEANER: - if (bc_isspace(c)) + if (is_space(c)) break; if (c == '-') { lstrip_next = true; @@ -519,19 +511,17 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) break; } if (c == '-') { - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid statement syntax. Duplicated whitespace " + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid statement syntax. Duplicated whitespace " "cleaner after statement."); break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid statement syntax. Must end with '%%}'."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid statement syntax. Must end with '%}'."); break; case TEMPLATE_VARIABLE_START: - if (bc_isspace(c)) + if (is_space(c)) break; if (c >= 'A' && c <= 'Z') { state = TEMPLATE_VARIABLE; @@ -539,15 +529,15 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) start = current; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid variable name. Must begin with uppercase letter."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid variable name. Must begin with uppercase " + "letter."); break; case TEMPLATE_VARIABLE: if ((c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_') break; - if (bc_isspace(c)) { + if (is_space(c)) { end = current; state = TEMPLATE_VARIABLE_END; break; @@ -557,22 +547,20 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) state = TEMPLATE_CLOSE_BRACKET; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid variable name. Must be uppercase letter, number " - "or '_'."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid variable name. Must be uppercase letter, " + "number or '_'."); break; case TEMPLATE_VARIABLE_END: - if (bc_isspace(c)) + if (is_space(c)) break; if (c == '}') { state = TEMPLATE_CLOSE_BRACKET; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid statement syntax. Must end with '}}'."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid statement syntax. Must end with '}}'."); break; case TEMPLATE_CLOSE_BRACKET: @@ -596,9 +584,8 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) tmp_op = BLOGC_TEMPLATE_OP_NEQ; } if (tmp_op == 0) { - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, - src, src_len, op_start, - "Invalid 'if' operator. Must be '<', '>', " + *err = sb_parser_error_new(src, src_len, op_start, + "template: Invalid 'if' operator. Must be '<', '>', " "'<=', '>=', '==' or '!='."); op_start = 0; op_end = 0; @@ -607,21 +594,21 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) op_start = 0; op_end = 0; } - node = bc_malloc(sizeof(blogc_template_node_t)); + node = sb_malloc(sizeof(blogc_template_node_t)); node->type = type; node->op = tmp_op; node->data[0] = NULL; node->data[1] = NULL; if (end > start) - node->data[0] = bc_strndup(src + start, end - start); + node->data[0] = sb_strndup(src + start, end - start); if (end2 > start2) { - node->data[1] = bc_strndup(src + start2, end2 - start2); + node->data[1] = sb_strndup(src + start2, end2 - start2); start2 = 0; end2 = 0; } if (type == BLOGC_TEMPLATE_NODE_BLOCK) block_type = node->data[0]; - ast = bc_slist_append(ast, node); + ast = sb_slist_append(ast, node); previous = node; node = NULL; state = TEMPLATE_START; @@ -629,9 +616,8 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) start = current + 1; break; } - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, - src_len, current, - "Invalid statement syntax. Must end with '}'."); + *err = sb_parser_error_new(src, src_len, current, + "template: Invalid statement syntax. Must end with '}'."); break; } @@ -644,18 +630,17 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) if (*err == NULL) { if (state == TEMPLATE_BLOCK_IF_STRING_OPERAND) - *err = bc_error_parser(BLOGC_ERROR_TEMPLATE_PARSER, src, src_len, - start2, "Found an open double-quoted string."); + *err = sb_parser_error_new(src, src_len, start2, + "template: Found an open double-quoted string."); else if (if_count != 0) - *err = bc_error_new_printf(BLOGC_ERROR_TEMPLATE_PARSER, - "%d open 'if', 'ifdef' and/or 'ifndef' statements were not closed!", - if_count); + *err = sb_strerror_new_printf( + "template: %d open 'if', 'ifdef' and/or 'ifndef' statements " + "were not closed!", if_count); else if (block_open) - *err = bc_error_new(BLOGC_ERROR_TEMPLATE_PARSER, - "An open block was not closed!"); + *err = sb_strerror_new("template: An open block was not closed!"); else if (foreach_open) - *err = bc_error_new(BLOGC_ERROR_TEMPLATE_PARSER, - "An open 'foreach' statement was not closed!"); + *err = sb_strerror_new( + "template: An open 'foreach' statement was not closed!"); } if (*err != NULL) { @@ -672,9 +657,9 @@ blogc_template_parse(const char *src, size_t src_len, bc_error_t **err) void -blogc_template_free_ast(bc_slist_t *ast) +blogc_template_free_ast(sb_slist_t *ast) { - for (bc_slist_t *tmp = ast; tmp != NULL; tmp = tmp->next) { + for (sb_slist_t *tmp = ast; tmp != NULL; tmp = tmp->next) { blogc_template_node_t *data = tmp->data; if (data == NULL) continue; @@ -682,5 +667,5 @@ blogc_template_free_ast(bc_slist_t *ast) free(data->data[1]); free(data); } - bc_slist_free(ast); + sb_slist_free(ast); } diff --git a/src/blogc/template-parser.h b/src/blogc/template-parser.h index 6183016..d21d6d8 100644 --- a/src/blogc/template-parser.h +++ b/src/blogc/template-parser.h @@ -10,8 +10,7 @@ #define _TEMPLATE_PARSER_H #include <stddef.h> -#include "../common/error.h" -#include "../common/utils.h" +#include <squareball.h> /* * note: whitespace cleaners are NOT added to AST. we fix strings right during @@ -48,11 +47,11 @@ typedef struct { // 2 slots to store node data. char *data[2]; - bc_slist_t *childs; + sb_slist_t *childs; } blogc_template_node_t; -bc_slist_t* blogc_template_parse(const char *src, size_t src_len, - bc_error_t **err); -void blogc_template_free_ast(bc_slist_t *ast); +sb_slist_t* blogc_template_parse(const char *src, size_t src_len, + sb_error_t **err); +void blogc_template_free_ast(sb_slist_t *ast); #endif /* _TEMPLATE_PARSER_H */ diff --git a/src/common/compat.c b/src/common/compat.c deleted file mode 100644 index f7394c8..0000000 --- a/src/common/compat.c +++ /dev/null @@ -1,39 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif /* HAVE_CONFIG_H */ - -#ifdef HAVE_SYS_WAIT_H -#include <sys/wait.h> -#endif /* HAVE_SYS_WAIT_H */ - -#include <signal.h> -#include "compat.h" - - -int -bc_compat_status_code(int waitstatus) -{ - int rv = waitstatus; -#if defined(WIFEXITED) && defined(WEXITSTATUS) && defined(WIFSIGNALED) && defined(WTERMSIG) - if (WIFEXITED(waitstatus)) { - rv = WEXITSTATUS(waitstatus); - } - else if (WIFSIGNALED(waitstatus)) { - rv = WTERMSIG(waitstatus); - rv += 128; - } -#elif defined(WIN32) || defined(_WIN32) - if (waitstatus == 3) { - rv = SIGTERM + 128; // can't get signal on windows. - } -#endif - return rv; -} diff --git a/src/common/compat.h b/src/common/compat.h deleted file mode 100644 index 1e743db..0000000 --- a/src/common/compat.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#ifndef _COMPAT_H -#define _COMPAT_H - -int bc_compat_status_code(int waitstatus); - -#endif /* _COMPAT_H */ diff --git a/src/common/config-parser.c b/src/common/config-parser.c deleted file mode 100644 index bc4831b..0000000 --- a/src/common/config-parser.c +++ /dev/null @@ -1,442 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#include <stdbool.h> -#include <stdlib.h> -#include <string.h> -#include "error.h" -#include "utils.h" -#include "config-parser.h" - - -typedef enum { - CONFIG_START = 1, - CONFIG_SECTION_START, - CONFIG_SECTION, - CONFIG_SECTION_KEY, - CONFIG_SECTION_VALUE_START, - CONFIG_SECTION_VALUE_QUOTE, - CONFIG_SECTION_VALUE_POST_QUOTED, - CONFIG_SECTION_VALUE, - CONFIG_SECTION_LIST_START, - CONFIG_SECTION_LIST_QUOTE, - CONFIG_SECTION_LIST_POST_QUOTED, - CONFIG_SECTION_LIST, -} bc_configparser_state_t; - -typedef enum { - CONFIG_SECTION_TYPE_MAP = 1, - CONFIG_SECTION_TYPE_LIST, -} bc_configparser_section_type_t; - -typedef struct { - bc_configparser_section_type_t type; - void *data; -} bc_configparser_section_t; - - -static void -free_section(bc_configparser_section_t *section) -{ - if (section == NULL) - return; - - switch (section->type) { - case CONFIG_SECTION_TYPE_MAP: - bc_trie_free(section->data); - break; - case CONFIG_SECTION_TYPE_LIST: - bc_slist_free_full(section->data, free); - break; - } - free(section); -} - - -bc_config_t* -bc_config_parse(const char *src, size_t src_len, const char *list_sections[], - bc_error_t **err) -{ - if (err == NULL || *err != NULL) - return NULL; - - size_t current = 0; - size_t start = 0; - - bc_configparser_section_t *section = NULL; - - char *section_name = NULL; - char *key = NULL; - bc_string_t *value = NULL; - bool escaped = false; - - bc_config_t *rv = bc_malloc(sizeof(bc_config_t)); - rv->root = bc_trie_new((bc_free_func_t) free_section); - - bc_configparser_state_t state = CONFIG_START; - - while (current < src_len) { - char c = src[current]; - bool is_last = current == src_len - 1; - - if (escaped) { - bc_string_append_c(value, c); - escaped = false; - current++; - continue; - } - - if (value != NULL && c == '\\') { - escaped = true; - current++; - continue; - } - - switch (state) { - - case CONFIG_START: - if (c == '#' || c == ';') { - while (current < src_len) { - if (src[current] == '\r' || src[current] == '\n') - break; - current++; - } - break; - } - if (c == ' ' || c == '\t' || c == '\r' || c == '\n') - break; - if (c == '[') { - state = CONFIG_SECTION_START; - break; - } - if (section != NULL) { - start = current; - switch (section->type) { - case CONFIG_SECTION_TYPE_MAP: - state = CONFIG_SECTION_KEY; - break; - case CONFIG_SECTION_TYPE_LIST: - state = CONFIG_SECTION_LIST_START; - if (value == NULL) - value = bc_string_new(); - break; - } - continue; - } - *err = bc_error_parser(BC_ERROR_CONFIG_PARSER, src, src_len, - current, "File must start with section."); - break; - - case CONFIG_SECTION_START: - start = current; - state = CONFIG_SECTION; - break; - - case CONFIG_SECTION: - if (c == ']') { - section_name = bc_strndup(src + start, current - start); - section = bc_malloc(sizeof(bc_configparser_section_t)); - section->type = CONFIG_SECTION_TYPE_MAP; - if (list_sections != NULL) { - for (size_t i = 0; list_sections[i] != NULL; i++) { - if (0 == strcmp(section_name, list_sections[i])) { - section->type = CONFIG_SECTION_TYPE_LIST; - break; - } - } - } - switch (section->type) { - case CONFIG_SECTION_TYPE_MAP: - section->data = bc_trie_new(free); - break; - case CONFIG_SECTION_TYPE_LIST: - section->data = NULL; - break; - } - bc_trie_insert(rv->root, section_name, section); - free(section_name); - section_name = NULL; - state = CONFIG_START; - break; - } - if (c != '\r' && c != '\n') - break; - *err = bc_error_parser(BC_ERROR_CONFIG_PARSER, src, src_len, - current, "Section names can't have new lines."); - break; - - case CONFIG_SECTION_KEY: - if (c == '=') { - key = bc_strndup(src + start, current - start); - state = CONFIG_SECTION_VALUE_START; - if (is_last) { - bc_trie_insert(section->data, bc_str_strip(key), - bc_strdup("")); - free(key); - key = NULL; - break; - } - if (value == NULL) - value = bc_string_new(); - break; - } - if (c != '\r' && c != '\n' && !is_last) - break; - // key without value, should we support it? - size_t end = is_last && c != '\n' && c != '\r' ? src_len : - current; - key = bc_strndup(src + start, end - start); - *err = bc_error_parser(BC_ERROR_CONFIG_PARSER, src, src_len, - current, "Key without value: %s.", key); - free(key); - key = NULL; - break; - - case CONFIG_SECTION_VALUE_START: - if (c == ' ' || c == '\t' || c == '\f' || c == '\v') - break; - if (c == '"') { - state = CONFIG_SECTION_VALUE_QUOTE; - break; - } - if (c == '\r' || c == '\n' || is_last) { - state = CONFIG_SECTION_VALUE; - continue; - } - bc_string_append_c(value, c); - state = CONFIG_SECTION_VALUE; - break; - - case CONFIG_SECTION_VALUE_QUOTE: - if (c == '"') { - bc_trie_insert(section->data, bc_str_strip(key), - bc_string_free(value, false)); - free(key); - key = NULL; - value = NULL; - state = CONFIG_SECTION_VALUE_POST_QUOTED; - break; - } - bc_string_append_c(value, c); - break; - - case CONFIG_SECTION_VALUE_POST_QUOTED: - if (c == ' ' || c == '\t' || c == '\f' || c == '\v') - break; - if (c == '\r' || c == '\n' || is_last) { - state = CONFIG_START; - break; - } - *err = bc_error_parser(BC_ERROR_CONFIG_PARSER, src, src_len, - current, "Invalid value for key, should not have anything " - "after quotes."); - break; - - case CONFIG_SECTION_VALUE: - if (c == '\r' || c == '\n' || is_last) { - if (is_last && c != '\r' && c != '\n') - bc_string_append_c(value, c); - bc_trie_insert(section->data, bc_str_strip(key), - bc_strdup(bc_str_rstrip(value->str))); - free(key); - key = NULL; - bc_string_free(value, true); - value = NULL; - state = CONFIG_START; - break; - } - bc_string_append_c(value, c); - break; - - case CONFIG_SECTION_LIST_START: - if (c == ' ' || c == '\t' || c == '\f' || c == '\v') - break; - if (c == '"') { - state = CONFIG_SECTION_LIST_QUOTE; - break; - } - bc_string_append_c(value, c); - state = CONFIG_SECTION_LIST; - break; - - case CONFIG_SECTION_LIST_QUOTE: - if (c == '"') { - section->data = bc_slist_append(section->data, - bc_string_free(value, false)); - value = NULL; - state = CONFIG_SECTION_LIST_POST_QUOTED; - break; - - } - bc_string_append_c(value, c); - break; - - case CONFIG_SECTION_LIST_POST_QUOTED: - if (c == ' ' || c == '\t' || c == '\f' || c == '\v') - break; - if (c == '\r' || c == '\n' || is_last) { - state = CONFIG_START; - break; - } - *err = bc_error_parser(BC_ERROR_CONFIG_PARSER, src, src_len, - current, "Invalid value for list item, should not have " - "anything after quotes."); - break; - - case CONFIG_SECTION_LIST: - if (c == '\r' || c == '\n' || is_last) { - if (is_last && c != '\r' && c != '\n') - bc_string_append_c(value, c); - section->data = bc_slist_append(section->data, - bc_strdup(bc_str_strip(value->str))); - bc_string_free(value, true); - value = NULL; - state = CONFIG_START; - break; - - } - bc_string_append_c(value, c); - break; - - } - - if (*err != NULL) { - bc_config_free(rv); - rv = NULL; - break; - } - - current++; - } - - free(section_name); - free(key); - bc_string_free(value, true); - - return rv; -} - - -static void -list_keys(const char *key, const char *value, bc_slist_t **l) -{ - *l = bc_slist_append(*l, bc_strdup(key)); -} - - -char** -bc_config_list_sections(bc_config_t *config) -{ - if (config == NULL) - return NULL; - - bc_slist_t *l = NULL; - bc_trie_foreach(config->root, (bc_trie_foreach_func_t) list_keys, &l); - - char **rv = bc_malloc(sizeof(char*) * (bc_slist_length(l) + 1)); - - size_t i = 0; - for (bc_slist_t *tmp = l; tmp != NULL; tmp = tmp->next, i++) - rv[i] = tmp->data; - rv[i] = NULL; - - bc_slist_free(l); - - return rv; -} - - -char** -bc_config_list_keys(bc_config_t *config, const char *section) -{ - if (config == NULL) - return NULL; - - bc_configparser_section_t *s = bc_trie_lookup(config->root, section); - if (s == NULL) - return NULL; - - if (s->type != CONFIG_SECTION_TYPE_MAP) - return NULL; - - bc_slist_t *l = NULL; - bc_trie_foreach(s->data, (bc_trie_foreach_func_t) list_keys, &l); - - char **rv = bc_malloc(sizeof(char*) * (bc_slist_length(l) + 1)); - - size_t i = 0; - for (bc_slist_t *tmp = l; tmp != NULL; tmp = tmp->next, i++) - rv[i] = tmp->data; - rv[i] = NULL; - - bc_slist_free(l); - - return rv; -} - - -const char* -bc_config_get(bc_config_t *config, const char *section, const char *key) -{ - if (config == NULL) - return NULL; - - bc_configparser_section_t *s = bc_trie_lookup(config->root, section); - if (s == NULL) - return NULL; - - if (s->type != CONFIG_SECTION_TYPE_MAP) - return NULL; - - return bc_trie_lookup(s->data, key); -} - - -const char* -bc_config_get_with_default(bc_config_t *config, const char *section, const char *key, - const char *default_) -{ - const char *rv = bc_config_get(config, section, key); - if (rv == NULL) - return default_; - return rv; -} - - -char** -bc_config_get_list(bc_config_t *config, const char *section) -{ - if (config == NULL) - return NULL; - - bc_configparser_section_t *s = bc_trie_lookup(config->root, section); - if (s == NULL) - return NULL; - - if (s->type != CONFIG_SECTION_TYPE_LIST) - return NULL; - - char **rv = bc_malloc(sizeof(char*) * (bc_slist_length(s->data) + 1)); - - size_t i = 0; - for (bc_slist_t *tmp = s->data; tmp != NULL; tmp = tmp->next, i++) - rv[i] = bc_strdup(tmp->data); - rv[i] = NULL; - - return rv; -} - - -void -bc_config_free(bc_config_t *config) -{ - if (config == NULL) - return; - bc_trie_free(config->root); - free(config); -} diff --git a/src/common/config-parser.h b/src/common/config-parser.h deleted file mode 100644 index 0b75ff8..0000000 --- a/src/common/config-parser.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#ifndef _CONFIG_PARSER_H -#define _CONFIG_PARSER_H - -#include <stddef.h> -#include "utils.h" -#include "error.h" - -typedef struct { - bc_trie_t *root; -} bc_config_t; - -bc_config_t* bc_config_parse(const char *src, size_t src_len, - const char *list_sections[], bc_error_t **err); -char** bc_config_list_sections(bc_config_t *config); -char** bc_config_list_keys(bc_config_t *config, const char *section); -const char* bc_config_get(bc_config_t *config, const char *section, - const char *key); -const char* bc_config_get_with_default(bc_config_t *config, const char *section, - const char *key, const char *default_); -char** bc_config_get_list(bc_config_t *config, const char *section); -void bc_config_free(bc_config_t *config); - -#endif /* _CONFIG_PARSER_H */ diff --git a/src/common/error.c b/src/common/error.c deleted file mode 100644 index 03695e7..0000000 --- a/src/common/error.c +++ /dev/null @@ -1,158 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <stdarg.h> -#include "error.h" -#include "utils.h" - - -bc_error_t* -bc_error_new(bc_error_type_t type, const char *msg) -{ - bc_error_t *err = bc_malloc(sizeof(bc_error_t)); - err->type = type; - err->msg = bc_strdup(msg); - return err; -} - - -bc_error_t* -bc_error_new_printf(bc_error_type_t type, const char *format, ...) -{ - va_list ap; - va_start(ap, format); - char *tmp = bc_strdup_vprintf(format, ap); - va_end(ap); - bc_error_t *rv = bc_error_new(type, tmp); - free(tmp); - return rv; -} - - -bc_error_t* -bc_error_parser(bc_error_type_t type, const char *src, size_t src_len, - size_t current, const char *format, ...) -{ - va_list ap; - va_start(ap, format); - char *msg = bc_strdup_vprintf(format, ap); - va_end(ap); - - size_t lineno = 1; - size_t linestart = 0; - size_t lineend = 0; - size_t pos = 1; - - for (size_t i = 0; i < src_len; i++) { - char c = src[i]; - if (i < current) { - if ((i + 1) < src_len) { - if ((c == '\n' && src[i + 1] == '\r') || - (c == '\r' && src[i + 1] == '\n')) - { - lineno++; - i++; - pos = 1; - if ((i + 1) < src_len) - linestart = i + 1; - continue; - } - } - if (c == '\n' || c == '\r') { - lineno++; - pos = 1; - if ((i + 1) < src_len) - linestart = i + 1; - continue; - } - pos++; - } - else if (c == '\n' || c == '\r') { - lineend = i; - break; - } - } - - if (lineend <= linestart && src_len >= linestart) - lineend = src_len; - - char *line = bc_strndup(src + linestart, lineend - linestart); - - bc_error_t *rv = NULL; - - if (line[0] == '\0') // "near" message isn't useful if line is empty - rv = bc_error_new(type, msg); - else - rv = bc_error_new_printf(type, - "%s\nError occurred near line %d, position %d: %s", msg, lineno, - pos, line); - - free(msg); - free(line); - - return rv; -} - - -// error handling is centralized here for the sake of simplicity :/ -void -bc_error_print(bc_error_t *err, const char *prefix) -{ - if (err == NULL) - return; - - if (prefix != NULL) - fprintf(stderr, "%s: ", prefix); - - switch(err->type) { - case BC_ERROR_CONFIG_PARSER: - fprintf(stderr, "error: config-parser: %s\n", err->msg); - break; - case BC_ERROR_FILE: - fprintf(stderr, "error: file: %s\n", err->msg); - break; - case BLOGC_ERROR_SOURCE_PARSER: - fprintf(stderr, "error: source: %s\n", err->msg); - break; - case BLOGC_ERROR_TEMPLATE_PARSER: - fprintf(stderr, "error: template: %s\n", err->msg); - break; - case BLOGC_ERROR_LOADER: - fprintf(stderr, "error: loader: %s\n", err->msg); - break; - case BLOGC_WARNING_DATETIME_PARSER: - fprintf(stderr, "warning: datetime: %s\n", err->msg); - break; - case BLOGC_MAKE_ERROR_SETTINGS: - fprintf(stderr, "error: settings: %s\n", err->msg); - break; - case BLOGC_MAKE_ERROR_EXEC: - fprintf(stderr, "error: exec: %s\n", err->msg); - break; - case BLOGC_MAKE_ERROR_ATOM: - fprintf(stderr, "error: atom: %s\n", err->msg); - break; - case BLOGC_MAKE_ERROR_UTILS: - fprintf(stderr, "error: utils: %s\n", err->msg); - break; - default: - fprintf(stderr, "error: %s\n", err->msg); - } -} - - -void -bc_error_free(bc_error_t *err) -{ - if (err == NULL) - return; - free(err->msg); - free(err); -} diff --git a/src/common/error.h b/src/common/error.h deleted file mode 100644 index b85f006..0000000 --- a/src/common/error.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#ifndef _ERROR_H -#define _ERROR_H - -#include <stddef.h> - -// error handling is centralized here for the sake of simplicity :/ -typedef enum { - - // errors for src/common - BC_ERROR_CONFIG_PARSER = 1, - BC_ERROR_FILE, - - // errors for src/blogc - BLOGC_ERROR_SOURCE_PARSER = 100, - BLOGC_ERROR_TEMPLATE_PARSER, - BLOGC_ERROR_LOADER, - BLOGC_WARNING_DATETIME_PARSER, - - // errors for src/blogc-make - BLOGC_MAKE_ERROR_SETTINGS = 300, - BLOGC_MAKE_ERROR_EXEC, - BLOGC_MAKE_ERROR_ATOM, - BLOGC_MAKE_ERROR_UTILS, - -} bc_error_type_t; - -typedef struct { - char *msg; - bc_error_type_t type; -} bc_error_t; - -bc_error_t* bc_error_new(bc_error_type_t type, const char *msg); -bc_error_t* bc_error_new_printf(bc_error_type_t type, const char *format, ...); -bc_error_t* bc_error_parser(bc_error_type_t type, const char *src, - size_t src_len, size_t current, const char *format, ...); -void bc_error_print(bc_error_t *err, const char *prefix); -void bc_error_free(bc_error_t *err); - -#endif /* _ERROR_H */ diff --git a/src/common/file.c b/src/common/file.c deleted file mode 100644 index 1e55f64..0000000 --- a/src/common/file.c +++ /dev/null @@ -1,66 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#include <errno.h> -#include <stdbool.h> -#include <stdint.h> -#include <stdio.h> -#include <string.h> -#include "file.h" -#include "error.h" -#include "utf8.h" -#include "utils.h" - - -char* -bc_file_get_contents(const char *path, bool utf8, size_t *len, bc_error_t **err) -{ - if (path == NULL || len == NULL || err == NULL || *err != NULL) - return NULL; - - *len = 0; - FILE *fp = fopen(path, "r"); - - if (fp == NULL) { - int tmp_errno = errno; - *err = bc_error_new_printf(BC_ERROR_FILE, - "Failed to open file (%s): %s", path, strerror(tmp_errno)); - return NULL; - } - - bc_string_t *str = bc_string_new(); - char buffer[BC_FILE_CHUNK_SIZE]; - char *tmp; - - while (!feof(fp)) { - size_t read_len = fread(buffer, sizeof(char), BC_FILE_CHUNK_SIZE, fp); - - tmp = buffer; - - if (utf8 && str->len == 0 && read_len > 0) { - // skipping BOM before validation, for performance. should be safe - // enough - size_t skip = bc_utf8_skip_bom((uint8_t*) buffer, read_len); - read_len -= skip; - tmp += skip; - } - - *len += read_len; - bc_string_append_len(str, tmp, read_len); - } - fclose(fp); - - if (utf8 && !bc_utf8_validate_str(str)) { - *err = bc_error_new_printf(BC_ERROR_FILE, - "File content is not valid UTF-8: %s", path); - bc_string_free(str, true); - return NULL; - } - - return bc_string_free(str, false); -} diff --git a/src/common/file.h b/src/common/file.h deleted file mode 100644 index d002bf7..0000000 --- a/src/common/file.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#ifndef _FILE_H -#define _FILE_H - -#include <stddef.h> -#include <stdbool.h> -#include "error.h" - -#define BC_FILE_CHUNK_SIZE 1024 - -char* bc_file_get_contents(const char *path, bool utf8, size_t *len, bc_error_t **err); - -#endif /* _FILE_H */ diff --git a/src/common/sort.c b/src/common/sort.c deleted file mode 100644 index 3e24706..0000000 --- a/src/common/sort.c +++ /dev/null @@ -1,44 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#include <stdbool.h> -#include "utils.h" -#include "sort.h" - - -bc_slist_t* -bc_slist_sort(bc_slist_t *l, bc_sort_func_t cmp) -{ - if (l == NULL) { - return NULL; - } - - bool swapped = false; - bc_slist_t *lptr = NULL; - bc_slist_t *rptr = NULL; - - do { - swapped = false; - lptr = l; - - while (lptr->next != rptr) { - if (0 < cmp(lptr->data, lptr->next->data)) { - void *tmp = lptr->data; - lptr->data = lptr->next->data; - lptr->next->data = tmp; - swapped = true; - } - - lptr = lptr->next; - } - - rptr = lptr; - } while(swapped); - - return l; -} diff --git a/src/common/sort.h b/src/common/sort.h deleted file mode 100644 index 9f4dda2..0000000 --- a/src/common/sort.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#ifndef _SORT_H -#define _SORT_H - -#include "utils.h" - -typedef int (*bc_sort_func_t) (const void *a, const void *b); - -bc_slist_t* bc_slist_sort(bc_slist_t *l, bc_sort_func_t cmp); - -#endif /* _SORT_H */ diff --git a/src/common/stdin.c b/src/common/stdin.c deleted file mode 100644 index a460247..0000000 --- a/src/common/stdin.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#include <stdbool.h> -#include <stdio.h> -#include "utils.h" -#include "stdin.h" - - -// splitted in single file to make it easier to test -char* -bc_stdin_read(void) -{ - int c; - bc_string_t *rv = bc_string_new(); - while (EOF != (c = fgetc(stdin))) - bc_string_append_c(rv, c); - return bc_string_free(rv, false); -} diff --git a/src/common/stdin.h b/src/common/stdin.h deleted file mode 100644 index e6bd7a0..0000000 --- a/src/common/stdin.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#ifndef _STDIN_H -#define _STDIN_H - -char* bc_stdin_read(void); - -#endif /* _STDIN_H */ diff --git a/src/common/utf8.c b/src/common/utf8.c deleted file mode 100644 index f029e5b..0000000 --- a/src/common/utf8.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (c) 2008-2010 Bjoern Hoehrmann <bjoern@hoehrmann.de> - * Copyright (c) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ - -// Based on Bjoern Hoehrmann's algorithm. -// See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details. - -#include <stdbool.h> -#include <stddef.h> -#include <stdint.h> -#include "utils.h" - -#define UTF8_ACCEPT 0 -#define UTF8_REJECT 12 - - -static const uint8_t utf8d[] = { - // The first part of the table maps bytes to character classes that - // to reduce the size of the transition table and create bitmasks. - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3, 11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8, - - // The second part is a transition table that maps a combination - // of a state of the automaton and a character class to a state. - 0,12,24,36,60,96,84,12,12,12,48,72, 12,12,12,12,12,12,12,12,12,12,12,12, - 12, 0,12,12,12,12,12, 0,12, 0,12,12, 12,24,12,12,12,12,12,24,12,24,12,12, - 12,12,12,12,12,12,12,24,12,12,12,12, 12,24,12,12,12,12,12,12,12,24,12,12, - 12,12,12,12,12,12,12,36,12,36,12,12, 12,36,12,12,12,12,12,36,12,36,12,12, - 12,36,12,12,12,12,12,12,12,12,12,12, -}; - - -static uint32_t inline -decode(uint32_t* state, uint32_t* codep, uint32_t byte) { - uint32_t type = utf8d[byte]; - - *codep = (*state != UTF8_ACCEPT) ? - (byte & 0x3fu) | (*codep << 6) : - (0xff >> type) & (byte); - - *state = utf8d[256 + *state + type]; - return *state; -} - - -bool -bc_utf8_validate(const uint8_t *str, size_t len) -{ - uint32_t codepoint; - uint32_t state = 0; - - for (size_t i = 0; i < len; i++) - decode(&state, &codepoint, str[i]); - - return state == UTF8_ACCEPT; -} - - -bool -bc_utf8_validate_str(bc_string_t *str) -{ - return bc_utf8_validate((uint8_t*) str->str, str->len); -} - - -size_t -bc_utf8_skip_bom(const uint8_t *str, size_t len) -{ - if (len < 3) - return 0; - - if (str[0] == 0xef && str[1] == 0xbb && str[2] == 0xbf) - return 3; - - return 0; -} diff --git a/src/common/utf8.h b/src/common/utf8.h deleted file mode 100644 index bf0f1ae..0000000 --- a/src/common/utf8.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#ifndef _UTF_8_H -#define _UTF_8_H - -#include <stdbool.h> -#include <stddef.h> -#include <stdint.h> -#include "utils.h" - -bool bc_utf8_validate(const uint8_t *str, size_t len); -bool bc_utf8_validate_str(bc_string_t *str); -size_t bc_utf8_skip_bom(const uint8_t *str, size_t len); - -#endif /* _UTF_8_H */ diff --git a/src/common/utils.c b/src/common/utils.c deleted file mode 100644 index 692d1ce..0000000 --- a/src/common/utils.c +++ /dev/null @@ -1,701 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#define BC_STRING_CHUNK_SIZE 128 - -#include <string.h> -#include <strings.h> -#include <stdarg.h> -#include <stdbool.h> -#include <stdlib.h> -#include <stdio.h> - -#include "utils.h" - - -void* -bc_malloc(size_t size) -{ - // simple things simple! - void *rv = malloc(size); - if (rv == NULL) { - fprintf(stderr, "fatal: Failed to allocate memory!\n"); - abort(); - } - return rv; -} - - -void* -bc_realloc(void *ptr, size_t size) -{ - // simple things even simpler :P - void *rv = realloc(ptr, size); - if (rv == NULL && size != 0) { - fprintf(stderr, "fatal: Failed to reallocate memory!\n"); - free(ptr); - abort(); - } - return rv; -} - - -bc_slist_t* -bc_slist_append(bc_slist_t *l, void *data) -{ - bc_slist_t *node = bc_malloc(sizeof(bc_slist_t)); - node->data = data; - node->next = NULL; - if (l == NULL) { - l = node; - } - else { - bc_slist_t *tmp; - for (tmp = l; tmp->next != NULL; tmp = tmp->next); - tmp->next = node; - } - return l; -} - - -bc_slist_t* -bc_slist_prepend(bc_slist_t *l, void *data) -{ - bc_slist_t *node = bc_malloc(sizeof(bc_slist_t)); - node->data = data; - node->next = l; - l = node; - return l; -} - - -void -bc_slist_free_full(bc_slist_t *l, bc_free_func_t free_func) -{ - while (l != NULL) { - bc_slist_t *tmp = l->next; - if ((free_func != NULL) && (l->data != NULL)) - free_func(l->data); - free(l); - l = tmp; - } -} - - -void -bc_slist_free(bc_slist_t *l) -{ - bc_slist_free_full(l, NULL); -} - - -size_t -bc_slist_length(bc_slist_t *l) -{ - if (l == NULL) - return 0; - size_t i; - bc_slist_t *tmp; - for (tmp = l, i = 0; tmp != NULL; tmp = tmp->next, i++); - return i; -} - - -char* -bc_strdup(const char *s) -{ - if (s == NULL) - return NULL; - size_t l = strlen(s); - char *tmp = malloc(l + 1); - if (tmp == NULL) - return NULL; - memcpy(tmp, s, l + 1); - return tmp; -} - - -char* -bc_strndup(const char *s, size_t n) -{ - if (s == NULL) - return NULL; - size_t l = strnlen(s, n); - char *tmp = malloc(l + 1); - if (tmp == NULL) - return NULL; - memcpy(tmp, s, l); - tmp[l] = '\0'; - return tmp; -} - - -char* -bc_strdup_vprintf(const char *format, va_list ap) -{ - va_list ap2; - va_copy(ap2, ap); - int l = vsnprintf(NULL, 0, format, ap2); - va_end(ap2); - if (l < 0) - return NULL; - char *tmp = malloc(l + 1); - if (!tmp) - return NULL; - int l2 = vsnprintf(tmp, l + 1, format, ap); - if (l2 < 0) { - free(tmp); - return NULL; - } - return tmp; -} - - -char* -bc_strdup_printf(const char *format, ...) -{ - va_list ap; - va_start(ap, format); - char *tmp = bc_strdup_vprintf(format, ap); - va_end(ap); - return tmp; -} - - -// locale-independent implementation of isspace -bool -bc_isspace(int c) -{ - return c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v'; -} - - -bool -bc_str_starts_with(const char *str, const char *prefix) -{ - int str_l = strlen(str); - int str_lp = strlen(prefix); - if (str_lp > str_l) - return false; - return strncmp(str, prefix, str_lp) == 0; -} - - -bool -bc_str_ends_with(const char *str, const char *suffix) -{ - int str_l = strlen(str); - int str_ls = strlen(suffix); - if (str_ls > str_l) - return false; - return strcmp(str + str_l - str_ls, suffix) == 0; -} - - -char* -bc_str_lstrip(char *str) -{ - if (str == NULL) - return NULL; - int i; - size_t str_len = strlen(str); - for (i = 0; i < str_len; i++) { - if ((str[i] != ' ') && (str[i] != '\t') && (str[i] != '\n') && - (str[i] != '\r') && (str[i] != '\t') && (str[i] != '\f') && - (str[i] != '\v')) - { - str += i; - break; - } - if (i == str_len - 1) { - str += str_len; - break; - } - } - return str; -} - - -char* -bc_str_rstrip(char *str) -{ - if (str == NULL) - return NULL; - int i; - size_t str_len = strlen(str); - for (i = str_len - 1; i >= 0; i--) { - if ((str[i] != ' ') && (str[i] != '\t') && (str[i] != '\n') && - (str[i] != '\r') && (str[i] != '\t') && (str[i] != '\f') && - (str[i] != '\v')) - { - str[i + 1] = '\0'; - break; - } - if (i == 0) { - str[0] = '\0'; - break; - } - } - return str; -} - - -char* -bc_str_strip(char *str) -{ - return bc_str_lstrip(bc_str_rstrip(str)); -} - - -char** -bc_str_split(const char *str, char c, size_t max_pieces) -{ - if (str == NULL) - return NULL; - char **rv = bc_malloc(sizeof(char*)); - size_t i, start = 0, count = 0; - for (i = 0; i < strlen(str) + 1; i++) { - if (str[0] == '\0') - break; - if ((str[i] == c && (!max_pieces || count + 1 < max_pieces)) || str[i] == '\0') { - rv = bc_realloc(rv, (count + 1) * sizeof(char*)); - rv[count] = bc_malloc(i - start + 1); - memcpy(rv[count], str + start, i - start); - rv[count++][i - start] = '\0'; - start = i + 1; - } - } - rv = bc_realloc(rv, (count + 1) * sizeof(char*)); - rv[count] = NULL; - return rv; -} - - -char* -bc_str_replace(const char *str, const char search, const char *replace) -{ - char **pieces = bc_str_split(str, search, 0); - if (pieces == NULL) - return NULL; - char* rv = bc_strv_join(pieces, replace); - bc_strv_free(pieces); - if (rv == NULL) - return bc_strdup(str); - return rv; -} - - -char* -bc_str_find(const char *str, char c) -{ - // this is somewhat similar to strchr, but respects '\' escaping. - if (str == NULL) - return NULL; - if (c == '\0') - return (char*) str + strlen(str); - for (size_t i = 0; str[i] != '\0'; i++) { - if (str[i] == '\\') { - i++; - continue; - } - if (str[i] == c) { - return (char*) str + i; - } - } - return NULL; -} - - -bool -bc_str_to_bool(const char *str) -{ - if (str == NULL) - return false; - - if (0 == strcmp(str, "1")) - return true; - - if (0 == strcasecmp(str, "y")) - return true; - - if (0 == strcasecmp(str, "yes")) - return true; - - if (0 == strcasecmp(str, "true")) - return true; - - if (0 == strcasecmp(str, "on")) - return true; - - return false; -} - - -void -bc_strv_free(char **strv) -{ - if (strv == NULL) - return; - for (size_t i = 0; strv[i] != NULL; i++) - free(strv[i]); - free(strv); -} - - -char* -bc_strv_join(char **strv, const char *separator) -{ - if (strv == NULL || separator == NULL) - return NULL; - bc_string_t *str = bc_string_new(); - for (size_t i = 0; strv[i] != NULL; i++) { - str = bc_string_append(str, strv[i]); - if (strv[i + 1] != NULL) - str = bc_string_append(str, separator); - } - return bc_string_free(str, false); -} - - -size_t -bc_strv_length(char **strv) -{ - if (strv == NULL) - return 0; - size_t i; - for (i = 0; strv[i] != NULL; i++); - return i; -} - - -bc_string_t* -bc_string_new(void) -{ - bc_string_t* rv = bc_malloc(sizeof(bc_string_t)); - rv->str = NULL; - rv->len = 0; - rv->allocated_len = 0; - - // initialize with empty string - rv = bc_string_append(rv, ""); - - return rv; -} - - -char* -bc_string_free(bc_string_t *str, bool free_str) -{ - if (str == NULL) - return NULL; - char *rv = NULL; - if (free_str) - free(str->str); - else - rv = str->str; - free(str); - return rv; -} - - -bc_string_t* -bc_string_dup(bc_string_t *str) -{ - if (str == NULL) - return NULL; - bc_string_t* new = bc_string_new(); - return bc_string_append_len(new, str->str, str->len); -} - - -bc_string_t* -bc_string_append_len(bc_string_t *str, const char *suffix, size_t len) -{ - if (str == NULL) - return NULL; - if (suffix == NULL) - return str; - size_t old_len = str->len; - str->len += len; - if (str->len + 1 > str->allocated_len) { - str->allocated_len = (((str->len + 1) / BC_STRING_CHUNK_SIZE) + 1) * BC_STRING_CHUNK_SIZE; - str->str = bc_realloc(str->str, str->allocated_len); - } - memcpy(str->str + old_len, suffix, len); - str->str[str->len] = '\0'; - return str; -} - - -bc_string_t* -bc_string_append(bc_string_t *str, const char *suffix) -{ - if (str == NULL) - return NULL; - const char *my_suffix = suffix == NULL ? "" : suffix; - return bc_string_append_len(str, my_suffix, strlen(my_suffix)); -} - - -bc_string_t* -bc_string_append_c(bc_string_t *str, char c) -{ - if (str == NULL) - return NULL; - size_t old_len = str->len; - str->len += 1; - if (str->len + 1 > str->allocated_len) { - str->allocated_len = (((str->len + 1) / BC_STRING_CHUNK_SIZE) + 1) * BC_STRING_CHUNK_SIZE; - str->str = bc_realloc(str->str, str->allocated_len); - } - str->str[old_len] = c; - str->str[str->len] = '\0'; - return str; -} - - -bc_string_t* -bc_string_append_printf(bc_string_t *str, const char *format, ...) -{ - if (str == NULL) - return NULL; - va_list ap; - va_start(ap, format); - char *tmp = bc_strdup_vprintf(format, ap); - va_end(ap); - str = bc_string_append(str, tmp); - free(tmp); - return str; -} - - -bc_string_t* -bc_string_append_escaped(bc_string_t *str, const char *suffix) -{ - if (str == NULL) - return NULL; - if (suffix == NULL) - return str; - bool escaped = false; - for (size_t i = 0; suffix[i] != '\0'; i++) { - if (suffix[i] == '\\' && !escaped) { - escaped = true; - continue; - } - escaped = false; - str = bc_string_append_c(str, suffix[i]); - } - return str; -} - - -bc_trie_t* -bc_trie_new(bc_free_func_t free_func) -{ - bc_trie_t *trie = bc_malloc(sizeof(bc_trie_t)); - trie->root = NULL; - trie->free_func = free_func; - return trie; -} - - -static void -bc_trie_free_node(bc_trie_t *trie, bc_trie_node_t *node) -{ - if (trie == NULL || node == NULL) - return; - if (node->data != NULL && trie->free_func != NULL) - trie->free_func(node->data); - bc_trie_free_node(trie, node->next); - bc_trie_free_node(trie, node->child); - free(node); -} - - -void -bc_trie_free(bc_trie_t *trie) -{ - if (trie == NULL) - return; - bc_trie_free_node(trie, trie->root); - free(trie); -} - - -void -bc_trie_insert(bc_trie_t *trie, const char *key, void *data) -{ - if (trie == NULL || key == NULL || data == NULL) - return; - - bc_trie_node_t *parent = NULL; - bc_trie_node_t *previous; - bc_trie_node_t *current; - bc_trie_node_t *tmp; - - while (1) { - - if (trie->root == NULL || (parent != NULL && parent->child == NULL)) { - current = bc_malloc(sizeof(bc_trie_node_t)); - current->key = *key; - current->data = NULL; - current->next = NULL; - current->child = NULL; - if (trie->root == NULL) - trie->root = current; - else - parent->child = current; - parent = current; - goto clean; - } - - tmp = parent == NULL ? trie->root : parent->child; - previous = NULL; - - while (tmp != NULL && tmp->key != *key) { - previous = tmp; - tmp = tmp->next; - } - - parent = tmp; - - if (previous == NULL || parent != NULL) - goto clean; - - current = bc_malloc(sizeof(bc_trie_node_t)); - current->key = *key; - current->data = NULL; - current->next = NULL; - current->child = NULL; - previous->next = current; - parent = current; - -clean: - if (*key == '\0') { - if (parent->data != NULL && trie->free_func != NULL) - trie->free_func(parent->data); - parent->data = data; - break; - } - key++; - } -} - - -void* -bc_trie_lookup(bc_trie_t *trie, const char *key) -{ - if (trie == NULL || trie->root == NULL || key == NULL) - return NULL; - - bc_trie_node_t *parent = trie->root; - bc_trie_node_t *tmp; - while (1) { - for (tmp = parent; tmp != NULL; tmp = tmp->next) { - - if (tmp->key == *key) { - if (tmp->key == '\0') - return tmp->data; - parent = tmp->child; - break; - } - } - if (tmp == NULL) - return NULL; - - if (*key == '\0') - break; - key++; - } - return NULL; -} - - -static void -bc_trie_size_node(bc_trie_node_t *node, size_t *count) -{ - if (node == NULL || count == NULL) - return; - - if (node->key == '\0') - (*count)++; - - bc_trie_size_node(node->next, count); - bc_trie_size_node(node->child, count); -} - - -size_t -bc_trie_size(bc_trie_t *trie) -{ - if (trie == NULL) - return 0; - - size_t count = 0; - bc_trie_size_node(trie->root, &count); - return count; -} - - -static void -bc_trie_foreach_node(bc_trie_node_t *node, bc_string_t *str, - bc_trie_foreach_func_t func, void *user_data) -{ - if (node == NULL || str == NULL || func == NULL) - return; - - if (node->key == '\0') - func(str->str, node->data, user_data); - - if (node->child != NULL) { - bc_string_t *child = bc_string_dup(str); - child = bc_string_append_c(child, node->key); - bc_trie_foreach_node(node->child, child, func, user_data); - bc_string_free(child, true); - } - - if (node->next != NULL) - bc_trie_foreach_node(node->next, str, func, user_data); -} - - -void -bc_trie_foreach(bc_trie_t *trie, bc_trie_foreach_func_t func, - void *user_data) -{ - if (trie == NULL || trie->root == NULL || func == NULL) - return; - - bc_string_t *str = bc_string_new(); - bc_trie_foreach_node(trie->root, str, func, user_data); - bc_string_free(str, true); -} - - -char* -bc_shell_quote(const char *command) -{ - bc_string_t *rv = bc_string_new(); - bc_string_append_c(rv, '\''); - if (command != NULL) { - for (size_t i = 0; i < strlen(command); i++) { - switch (command[i]) { - case '!': - bc_string_append(rv, "'\\!'"); - break; - case '\'': - bc_string_append(rv, "'\\''"); - break; - default: - bc_string_append_c(rv, command[i]); - } - } - } - bc_string_append_c(rv, '\''); - return bc_string_free(rv, false); -} diff --git a/src/common/utils.h b/src/common/utils.h deleted file mode 100644 index 94c3356..0000000 --- a/src/common/utils.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#ifndef _UTILS_H -#define _UTILS_H - -#include <stddef.h> -#include <stdarg.h> -#include <stdbool.h> - - -// memory - -typedef void (*bc_free_func_t) (void *ptr); - -void* bc_malloc(size_t size); -void* bc_realloc(void *ptr, size_t size); - - -// slist - -typedef struct _bc_slist_t { - struct _bc_slist_t *next; - void *data; -} bc_slist_t; - -bc_slist_t* bc_slist_append(bc_slist_t *l, void *data); -bc_slist_t* bc_slist_prepend(bc_slist_t *l, void *data); -void bc_slist_free(bc_slist_t *l); -void bc_slist_free_full(bc_slist_t *l, bc_free_func_t free_func); -size_t bc_slist_length(bc_slist_t *l); - - -// strfuncs - -char* bc_strdup(const char *s); -char* bc_strndup(const char *s, size_t n); -char* bc_strdup_vprintf(const char *format, va_list ap); -char* bc_strdup_printf(const char *format, ...); -bool bc_isspace(int c); -bool bc_str_starts_with(const char *str, const char *prefix); -bool bc_str_ends_with(const char *str, const char *suffix); -char* bc_str_lstrip(char *str); -char* bc_str_rstrip(char *str); -char* bc_str_strip(char *str); -char** bc_str_split(const char *str, char c, size_t max_pieces); -char* bc_str_replace(const char *str, const char search, const char *replace); -char* bc_str_find(const char *str, char c); -bool bc_str_to_bool(const char *str); -void bc_strv_free(char **strv); -char* bc_strv_join(char **strv, const char *separator); -size_t bc_strv_length(char **strv); - - -// string - -typedef struct { - char *str; - size_t len; - size_t allocated_len; -} bc_string_t; - -bc_string_t* bc_string_new(void); -char* bc_string_free(bc_string_t *str, bool free_str); -bc_string_t* bc_string_dup(bc_string_t *str); -bc_string_t* bc_string_append_len(bc_string_t *str, const char *suffix, size_t len); -bc_string_t* bc_string_append(bc_string_t *str, const char *suffix); -bc_string_t* bc_string_append_c(bc_string_t *str, char c); -bc_string_t* bc_string_append_printf(bc_string_t *str, const char *format, ...); -bc_string_t* bc_string_append_escaped(bc_string_t *str, const char *suffix); - - -// trie - -typedef struct _bc_trie_node_t { - char key; - void *data; - struct _bc_trie_node_t *next, *child; -} bc_trie_node_t; - -struct _bc_trie_t { - bc_trie_node_t *root; - bc_free_func_t free_func; -}; - -typedef struct _bc_trie_t bc_trie_t; - -typedef void (*bc_trie_foreach_func_t)(const char *key, void *data, - void *user_data); - -bc_trie_t* bc_trie_new(bc_free_func_t free_func); -void bc_trie_free(bc_trie_t *trie); -void bc_trie_insert(bc_trie_t *trie, const char *key, void *data); -void* bc_trie_lookup(bc_trie_t *trie, const char *key); -size_t bc_trie_size(bc_trie_t *trie); -void bc_trie_foreach(bc_trie_t *trie, bc_trie_foreach_func_t func, - void *user_data); - - -// shell - -char* bc_shell_quote(const char *command); - -#endif /* _UTILS_H */ diff --git a/tests/blogc-git-receiver/check_settings.c b/tests/blogc-git-receiver/check_settings.c index cb12037..6de5b32 100644 --- a/tests/blogc-git-receiver/check_settings.c +++ b/tests/blogc-git-receiver/check_settings.c @@ -12,8 +12,8 @@ #include <cmocka.h> #include <string.h> #include <stdlib.h> -#include "../../src/common/config-parser.h" -#include "../../src/common/utils.h" +#include <squareball.h> + #include "../../src/blogc-git-receiver/settings.h" @@ -24,21 +24,21 @@ __wrap_realpath(const char *path, char *resolved_path) if (real_path == NULL) return NULL; assert_string_equal(path, real_path); - return bc_strdup(real_path); + return sb_strdup(real_path); } static void test_settings_get_section(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; setenv("HOME", "/home/blogc", 1); - bc_config_t *config = bc_config_parse("", 0, NULL, &err); + sb_config_t *config = sb_config_parse("", 0, NULL, &err); assert_null(err); assert_null(bgr_settings_get_section(config, "/home/blogc/repos/foo.git")); - bc_config_free(config); + sb_config_free(config); will_return(__wrap_realpath, NULL); will_return(__wrap_realpath, "/home/blogc/repos/bar.git"); @@ -52,12 +52,12 @@ test_settings_get_section(void **state) "[repo:baz.git]\n" "mirror = baz\n" "\n"; - config = bc_config_parse(conf, strlen(conf), NULL, &err); + config = sb_config_parse(conf, strlen(conf), NULL, &err); assert_null(err); char *s = bgr_settings_get_section(config, "/home/blogc/repos/bar.git"); assert_string_equal(s, "repo:bar.git"); free(s); - bc_config_free(config); + sb_config_free(config); setenv("BLOGC_GIT_RECEIVER_BASE_DIR", "/home/bola", 1); will_return(__wrap_realpath, NULL); @@ -72,12 +72,12 @@ test_settings_get_section(void **state) "[repo:asd/baz.git]\n" "mirror = baz\n" "\n"; - config = bc_config_parse(conf, strlen(conf), NULL, &err); + config = sb_config_parse(conf, strlen(conf), NULL, &err); assert_null(err); s = bgr_settings_get_section(config, "/home/bola/repos/asd/bar.git"); assert_string_equal(s, "repo:asd/bar.git"); free(s); - bc_config_free(config); + sb_config_free(config); } diff --git a/tests/blogc-make/check_atom.c b/tests/blogc-make/check_atom.c index 94c9a37..e9e24d3 100644 --- a/tests/blogc-make/check_atom.c +++ b/tests/blogc-make/check_atom.c @@ -10,26 +10,23 @@ #include <stddef.h> #include <setjmp.h> #include <cmocka.h> - #include <stdlib.h> #include <string.h> +#include <squareball.h> #include "../../src/blogc-make/atom.h" #include "../../src/blogc-make/settings.h" -#include "../../src/common/file.h" -#include "../../src/common/error.h" -#include "../../src/common/utils.h" static void test_atom_generate_empty_file(void **state) { - bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t)); - settings->settings = bc_trie_new(free); - bc_trie_insert(settings->settings, "atom_prefix", bc_strdup("")); - bc_trie_insert(settings->settings, "atom_ext", bc_strdup(".xml")); - bc_trie_insert(settings->settings, "post_prefix", bc_strdup("")); - bc_trie_insert(settings->settings, "html_ext", bc_strdup(".html")); + bm_settings_t *settings = sb_malloc(sizeof(bm_settings_t)); + settings->settings = sb_trie_new(free); + sb_trie_insert(settings->settings, "atom_prefix", sb_strdup("")); + sb_trie_insert(settings->settings, "atom_ext", sb_strdup(".xml")); + sb_trie_insert(settings->settings, "post_prefix", sb_strdup("")); + sb_trie_insert(settings->settings, "html_ext", sb_strdup(".html")); char *cmp = bm_atom_generate(settings); @@ -68,7 +65,7 @@ test_atom_generate_empty_file(void **state) "</feed>\n"); free(cmp); - bc_trie_free(settings->settings); + sb_trie_free(settings->settings); free(settings); } @@ -76,12 +73,12 @@ test_atom_generate_empty_file(void **state) static void test_atom_generate_empty_dir(void **state) { - bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t)); - settings->settings = bc_trie_new(free); - bc_trie_insert(settings->settings, "atom_prefix", bc_strdup("")); - bc_trie_insert(settings->settings, "atom_ext", bc_strdup("/index.xml")); - bc_trie_insert(settings->settings, "post_prefix", bc_strdup("")); - bc_trie_insert(settings->settings, "html_ext", bc_strdup("/index.html")); + bm_settings_t *settings = sb_malloc(sizeof(bm_settings_t)); + settings->settings = sb_trie_new(free); + sb_trie_insert(settings->settings, "atom_prefix", sb_strdup("")); + sb_trie_insert(settings->settings, "atom_ext", sb_strdup("/index.xml")); + sb_trie_insert(settings->settings, "post_prefix", sb_strdup("")); + sb_trie_insert(settings->settings, "html_ext", sb_strdup("/index.html")); char *cmp = bm_atom_generate(settings); @@ -120,7 +117,7 @@ test_atom_generate_empty_dir(void **state) "</feed>\n"); free(cmp); - bc_trie_free(settings->settings); + sb_trie_free(settings->settings); free(settings); } @@ -128,12 +125,12 @@ test_atom_generate_empty_dir(void **state) static void test_atom_generate_file(void **state) { - bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t)); - settings->settings = bc_trie_new(free); - bc_trie_insert(settings->settings, "atom_prefix", bc_strdup("atom")); - bc_trie_insert(settings->settings, "atom_ext", bc_strdup(".xml")); - bc_trie_insert(settings->settings, "post_prefix", bc_strdup("post")); - bc_trie_insert(settings->settings, "html_ext", bc_strdup(".html")); + bm_settings_t *settings = sb_malloc(sizeof(bm_settings_t)); + settings->settings = sb_trie_new(free); + sb_trie_insert(settings->settings, "atom_prefix", sb_strdup("atom")); + sb_trie_insert(settings->settings, "atom_ext", sb_strdup(".xml")); + sb_trie_insert(settings->settings, "post_prefix", sb_strdup("post")); + sb_trie_insert(settings->settings, "html_ext", sb_strdup(".html")); char *cmp = bm_atom_generate(settings); @@ -172,7 +169,7 @@ test_atom_generate_file(void **state) "</feed>\n"); free(cmp); - bc_trie_free(settings->settings); + sb_trie_free(settings->settings); free(settings); } @@ -180,12 +177,12 @@ test_atom_generate_file(void **state) static void test_atom_generate_dir(void **state) { - bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t)); - settings->settings = bc_trie_new(free); - bc_trie_insert(settings->settings, "atom_prefix", bc_strdup("atom")); - bc_trie_insert(settings->settings, "atom_ext", bc_strdup("/index.xml")); - bc_trie_insert(settings->settings, "post_prefix", bc_strdup("post")); - bc_trie_insert(settings->settings, "html_ext", bc_strdup("/index.html")); + bm_settings_t *settings = sb_malloc(sizeof(bm_settings_t)); + settings->settings = sb_trie_new(free); + sb_trie_insert(settings->settings, "atom_prefix", sb_strdup("atom")); + sb_trie_insert(settings->settings, "atom_ext", sb_strdup("/index.xml")); + sb_trie_insert(settings->settings, "post_prefix", sb_strdup("post")); + sb_trie_insert(settings->settings, "html_ext", sb_strdup("/index.html")); char *cmp = bm_atom_generate(settings); @@ -224,7 +221,7 @@ test_atom_generate_dir(void **state) "</feed>\n"); free(cmp); - bc_trie_free(settings->settings); + sb_trie_free(settings->settings); free(settings); } @@ -232,21 +229,21 @@ test_atom_generate_dir(void **state) static void test_atom_empty_file(void **state) { - bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t)); - settings->settings = bc_trie_new(free); - bc_trie_insert(settings->settings, "atom_prefix", bc_strdup("")); - bc_trie_insert(settings->settings, "atom_ext", bc_strdup(".xml")); - bc_trie_insert(settings->settings, "post_prefix", bc_strdup("")); - bc_trie_insert(settings->settings, "html_ext", bc_strdup(".html")); - - bc_error_t *err = NULL; + bm_settings_t *settings = sb_malloc(sizeof(bm_settings_t)); + settings->settings = sb_trie_new(free); + sb_trie_insert(settings->settings, "atom_prefix", sb_strdup("")); + sb_trie_insert(settings->settings, "atom_ext", sb_strdup(".xml")); + sb_trie_insert(settings->settings, "post_prefix", sb_strdup("")); + sb_trie_insert(settings->settings, "html_ext", sb_strdup(".html")); + + sb_error_t *err = NULL; char *rv = bm_atom_deploy(settings, &err); assert_non_null(rv); assert_null(err); size_t cmp_len; - char *cmp = bc_file_get_contents(rv, true, &cmp_len, &err); + char *cmp = sb_file_get_contents_utf8(rv, &cmp_len, &err); assert_non_null(cmp); assert_null(err); @@ -286,7 +283,7 @@ test_atom_empty_file(void **state) free(cmp); bm_atom_destroy(rv); free(rv); - bc_trie_free(settings->settings); + sb_trie_free(settings->settings); free(settings); } @@ -294,21 +291,21 @@ test_atom_empty_file(void **state) static void test_atom_empty_dir(void **state) { - bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t)); - settings->settings = bc_trie_new(free); - bc_trie_insert(settings->settings, "atom_prefix", bc_strdup("")); - bc_trie_insert(settings->settings, "atom_ext", bc_strdup("/index.xml")); - bc_trie_insert(settings->settings, "post_prefix", bc_strdup("")); - bc_trie_insert(settings->settings, "html_ext", bc_strdup("/index.html")); - - bc_error_t *err = NULL; + bm_settings_t *settings = sb_malloc(sizeof(bm_settings_t)); + settings->settings = sb_trie_new(free); + sb_trie_insert(settings->settings, "atom_prefix", sb_strdup("")); + sb_trie_insert(settings->settings, "atom_ext", sb_strdup("/index.xml")); + sb_trie_insert(settings->settings, "post_prefix", sb_strdup("")); + sb_trie_insert(settings->settings, "html_ext", sb_strdup("/index.html")); + + sb_error_t *err = NULL; char *rv = bm_atom_deploy(settings, &err); assert_non_null(rv); assert_null(err); size_t cmp_len; - char *cmp = bc_file_get_contents(rv, true, &cmp_len, &err); + char *cmp = sb_file_get_contents_utf8(rv, &cmp_len, &err); assert_non_null(cmp); assert_null(err); @@ -348,7 +345,7 @@ test_atom_empty_dir(void **state) free(cmp); bm_atom_destroy(rv); free(rv); - bc_trie_free(settings->settings); + sb_trie_free(settings->settings); free(settings); } @@ -356,21 +353,21 @@ test_atom_empty_dir(void **state) static void test_atom_file(void **state) { - bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t)); - settings->settings = bc_trie_new(free); - bc_trie_insert(settings->settings, "atom_prefix", bc_strdup("atom")); - bc_trie_insert(settings->settings, "atom_ext", bc_strdup(".xml")); - bc_trie_insert(settings->settings, "post_prefix", bc_strdup("post")); - bc_trie_insert(settings->settings, "html_ext", bc_strdup(".html")); - - bc_error_t *err = NULL; + bm_settings_t *settings = sb_malloc(sizeof(bm_settings_t)); + settings->settings = sb_trie_new(free); + sb_trie_insert(settings->settings, "atom_prefix", sb_strdup("atom")); + sb_trie_insert(settings->settings, "atom_ext", sb_strdup(".xml")); + sb_trie_insert(settings->settings, "post_prefix", sb_strdup("post")); + sb_trie_insert(settings->settings, "html_ext", sb_strdup(".html")); + + sb_error_t *err = NULL; char *rv = bm_atom_deploy(settings, &err); assert_non_null(rv); assert_null(err); size_t cmp_len; - char *cmp = bc_file_get_contents(rv, true, &cmp_len, &err); + char *cmp = sb_file_get_contents_utf8(rv, &cmp_len, &err); assert_non_null(cmp); assert_null(err); @@ -410,7 +407,7 @@ test_atom_file(void **state) free(cmp); bm_atom_destroy(rv); free(rv); - bc_trie_free(settings->settings); + sb_trie_free(settings->settings); free(settings); } @@ -418,21 +415,21 @@ test_atom_file(void **state) static void test_atom_dir(void **state) { - bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t)); - settings->settings = bc_trie_new(free); - bc_trie_insert(settings->settings, "atom_prefix", bc_strdup("atom")); - bc_trie_insert(settings->settings, "atom_ext", bc_strdup("/index.xml")); - bc_trie_insert(settings->settings, "post_prefix", bc_strdup("post")); - bc_trie_insert(settings->settings, "html_ext", bc_strdup("/index.html")); - - bc_error_t *err = NULL; + bm_settings_t *settings = sb_malloc(sizeof(bm_settings_t)); + settings->settings = sb_trie_new(free); + sb_trie_insert(settings->settings, "atom_prefix", sb_strdup("atom")); + sb_trie_insert(settings->settings, "atom_ext", sb_strdup("/index.xml")); + sb_trie_insert(settings->settings, "post_prefix", sb_strdup("post")); + sb_trie_insert(settings->settings, "html_ext", sb_strdup("/index.html")); + + sb_error_t *err = NULL; char *rv = bm_atom_deploy(settings, &err); assert_non_null(rv); assert_null(err); size_t cmp_len; - char *cmp = bc_file_get_contents(rv, true, &cmp_len, &err); + char *cmp = sb_file_get_contents_utf8(rv, &cmp_len, &err); assert_non_null(cmp); assert_null(err); @@ -472,7 +469,7 @@ test_atom_dir(void **state) free(cmp); bm_atom_destroy(rv); free(rv); - bc_trie_free(settings->settings); + sb_trie_free(settings->settings); free(settings); } @@ -480,27 +477,26 @@ test_atom_dir(void **state) static void test_atom_legacy_entry_id_empty(void **state) { - bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t)); - settings->settings = bc_trie_new(free); - bc_trie_insert(settings->settings, "atom_prefix", bc_strdup("")); - bc_trie_insert(settings->settings, "atom_ext", bc_strdup(".xml")); - bc_trie_insert(settings->settings, "post_prefix", bc_strdup("")); - bc_trie_insert(settings->settings, "html_ext", bc_strdup(".html")); - bc_trie_insert(settings->settings, "atom_legacy_entry_id", bc_strdup("1")); - - bc_error_t *err = NULL; + bm_settings_t *settings = sb_malloc(sizeof(bm_settings_t)); + settings->settings = sb_trie_new(free); + sb_trie_insert(settings->settings, "atom_prefix", sb_strdup("")); + sb_trie_insert(settings->settings, "atom_ext", sb_strdup(".xml")); + sb_trie_insert(settings->settings, "post_prefix", sb_strdup("")); + sb_trie_insert(settings->settings, "html_ext", sb_strdup(".html")); + sb_trie_insert(settings->settings, "atom_legacy_entry_id", sb_strdup("1")); + + sb_error_t *err = NULL; char *rv = bm_atom_deploy(settings, &err); assert_null(rv); assert_non_null(err); - assert_int_equal(err->type, BLOGC_MAKE_ERROR_ATOM); - assert_string_equal(err->msg, - "'atom_legacy_entry_id' setting is not supported anymore. see " + assert_string_equal(sb_error_to_string(err), + "atom: 'atom_legacy_entry_id' setting is not supported anymore. see " "https://blogc.rgm.io/news/blogc-0.16.1/ for details"); - bc_error_free(err); - bc_trie_free(settings->settings); + sb_error_free(err); + sb_trie_free(settings->settings); free(settings); } @@ -508,27 +504,26 @@ test_atom_legacy_entry_id_empty(void **state) static void test_atom_legacy_entry_id(void **state) { - bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t)); - settings->settings = bc_trie_new(free); - bc_trie_insert(settings->settings, "atom_prefix", bc_strdup("atom")); - bc_trie_insert(settings->settings, "atom_ext", bc_strdup(".xml")); - bc_trie_insert(settings->settings, "post_prefix", bc_strdup("post")); - bc_trie_insert(settings->settings, "html_ext", bc_strdup(".html")); - bc_trie_insert(settings->settings, "atom_legacy_entry_id", bc_strdup("1")); - - bc_error_t *err = NULL; + bm_settings_t *settings = sb_malloc(sizeof(bm_settings_t)); + settings->settings = sb_trie_new(free); + sb_trie_insert(settings->settings, "atom_prefix", sb_strdup("atom")); + sb_trie_insert(settings->settings, "atom_ext", sb_strdup(".xml")); + sb_trie_insert(settings->settings, "post_prefix", sb_strdup("post")); + sb_trie_insert(settings->settings, "html_ext", sb_strdup(".html")); + sb_trie_insert(settings->settings, "atom_legacy_entry_id", sb_strdup("1")); + + sb_error_t *err = NULL; char *rv = bm_atom_deploy(settings, &err); assert_null(rv); assert_non_null(err); - assert_int_equal(err->type, BLOGC_MAKE_ERROR_ATOM); - assert_string_equal(err->msg, - "'atom_legacy_entry_id' setting is not supported anymore. see " + assert_string_equal(sb_error_to_string(err), + "atom: 'atom_legacy_entry_id' setting is not supported anymore. see " "https://blogc.rgm.io/news/blogc-0.16.1/ for details"); - bc_error_free(err); - bc_trie_free(settings->settings); + sb_error_free(err); + sb_trie_free(settings->settings); free(settings); } diff --git a/tests/blogc-make/check_exec.c b/tests/blogc-make/check_exec.c index 6812496..c5d1d4e 100644 --- a/tests/blogc-make/check_exec.c +++ b/tests/blogc-make/check_exec.c @@ -14,14 +14,13 @@ #include <stddef.h> #include <setjmp.h> #include <cmocka.h> - #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <squareball.h> #include "../../src/blogc-make/exec.h" #include "../../src/blogc-make/settings.h" -#include "../../src/common/utils.h" int @@ -75,16 +74,16 @@ test_find_binary(void **state) static void test_build_blogc_cmd_with_settings(void **state) { - bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t)); - settings->settings = bc_trie_new(free); - bc_trie_insert(settings->settings, "locale", bc_strdup("en_US.utf8")); - settings->global = bc_trie_new(free); - bc_trie_insert(settings->global, "FOO", bc_strdup("BAR")); - bc_trie_insert(settings->global, "BAR", bc_strdup("BAZ")); - bc_trie_t *variables = bc_trie_new(free); - bc_trie_insert(variables, "LOL", bc_strdup("HEHE")); - bc_trie_t *local = bc_trie_new(free); - bc_trie_insert(local, "ASD", bc_strdup("QWE")); + bm_settings_t *settings = sb_malloc(sizeof(bm_settings_t)); + settings->settings = sb_trie_new(free); + sb_trie_insert(settings->settings, "locale", sb_strdup("en_US.utf8")); + settings->global = sb_trie_new(free); + sb_trie_insert(settings->global, "FOO", sb_strdup("BAR")); + sb_trie_insert(settings->global, "BAR", sb_strdup("BAZ")); + sb_trie_t *variables = sb_trie_new(free); + sb_trie_insert(variables, "LOL", sb_strdup("HEHE")); + sb_trie_t *local = sb_trie_new(free); + sb_trie_insert(local, "ASD", sb_strdup("QWE")); settings->tags = NULL; char *rv = bm_exec_build_blogc_cmd("blogc", settings, variables, local, NULL, @@ -113,10 +112,10 @@ test_build_blogc_cmd_with_settings(void **state) "LC_ALL='en_US.utf8' blogc -D FOO='BAR' -D BAR='BAZ'"); free(rv); - bc_trie_free(local); - bc_trie_free(variables); - bc_trie_free(settings->settings); - bc_trie_free(settings->global); + sb_trie_free(local); + sb_trie_free(variables); + sb_trie_free(settings->settings); + sb_trie_free(settings->global); free(settings); } @@ -124,16 +123,16 @@ test_build_blogc_cmd_with_settings(void **state) static void test_build_blogc_cmd_with_settings_and_dev(void **state) { - bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t)); - settings->settings = bc_trie_new(free); - bc_trie_insert(settings->settings, "locale", bc_strdup("en_US.utf8")); - settings->global = bc_trie_new(free); - bc_trie_insert(settings->global, "FOO", bc_strdup("BAR")); - bc_trie_insert(settings->global, "BAR", bc_strdup("BAZ")); - bc_trie_t *variables = bc_trie_new(free); - bc_trie_insert(variables, "LOL", bc_strdup("HEHE")); - bc_trie_t *local = bc_trie_new(free); - bc_trie_insert(local, "ASD", bc_strdup("QWE")); + bm_settings_t *settings = sb_malloc(sizeof(bm_settings_t)); + settings->settings = sb_trie_new(free); + sb_trie_insert(settings->settings, "locale", sb_strdup("en_US.utf8")); + settings->global = sb_trie_new(free); + sb_trie_insert(settings->global, "FOO", sb_strdup("BAR")); + sb_trie_insert(settings->global, "BAR", sb_strdup("BAZ")); + sb_trie_t *variables = sb_trie_new(free); + sb_trie_insert(variables, "LOL", sb_strdup("HEHE")); + sb_trie_t *local = sb_trie_new(free); + sb_trie_insert(local, "ASD", sb_strdup("QWE")); settings->tags = NULL; char *rv = bm_exec_build_blogc_cmd("blogc", settings, variables, local, NULL, @@ -166,10 +165,10 @@ test_build_blogc_cmd_with_settings_and_dev(void **state) "-D MAKE_ENV_DEV=1 -D MAKE_ENV='dev'"); free(rv); - bc_trie_free(local); - bc_trie_free(variables); - bc_trie_free(settings->settings); - bc_trie_free(settings->global); + sb_trie_free(local); + sb_trie_free(variables); + sb_trie_free(settings->settings); + sb_trie_free(settings->global); free(settings); } @@ -177,17 +176,17 @@ test_build_blogc_cmd_with_settings_and_dev(void **state) static void test_build_blogc_cmd_with_settings_and_tags(void **state) { - bm_settings_t *settings = bc_malloc(sizeof(bm_settings_t)); - settings->settings = bc_trie_new(free); - bc_trie_insert(settings->settings, "locale", bc_strdup("en_US.utf8")); - settings->global = bc_trie_new(free); - bc_trie_insert(settings->global, "FOO", bc_strdup("BAR")); - bc_trie_insert(settings->global, "BAR", bc_strdup("BAZ")); - bc_trie_t *variables = bc_trie_new(free); - bc_trie_insert(variables, "LOL", bc_strdup("HEHE")); - bc_trie_t *local = bc_trie_new(free); - bc_trie_insert(local, "ASD", bc_strdup("QWE")); - settings->tags = bc_str_split("asd foo bar", ' ', 0); + bm_settings_t *settings = sb_malloc(sizeof(bm_settings_t)); + settings->settings = sb_trie_new(free); + sb_trie_insert(settings->settings, "locale", sb_strdup("en_US.utf8")); + settings->global = sb_trie_new(free); + sb_trie_insert(settings->global, "FOO", sb_strdup("BAR")); + sb_trie_insert(settings->global, "BAR", sb_strdup("BAZ")); + sb_trie_t *variables = sb_trie_new(free); + sb_trie_insert(variables, "LOL", sb_strdup("HEHE")); + sb_trie_t *local = sb_trie_new(free); + sb_trie_insert(local, "ASD", sb_strdup("QWE")); + settings->tags = sb_str_split("asd foo bar", ' ', 0); char *rv = bm_exec_build_blogc_cmd("blogc", settings, variables, local, NULL, true, NULL, "main.tmpl", "foo.html", true, true); @@ -219,11 +218,11 @@ test_build_blogc_cmd_with_settings_and_tags(void **state) "-D BAR='BAZ' -D MAKE_ENV_DEV=1 -D MAKE_ENV='dev'"); free(rv); - bc_trie_free(local); - bc_trie_free(variables); - bc_trie_free(settings->settings); - bc_trie_free(settings->global); - bc_strv_free(settings->tags); + sb_trie_free(local); + sb_trie_free(variables); + sb_trie_free(settings->settings); + sb_trie_free(settings->global); + sb_strv_free(settings->tags); free(settings); } @@ -231,10 +230,10 @@ test_build_blogc_cmd_with_settings_and_tags(void **state) static void test_build_blogc_cmd_without_settings(void **state) { - bc_trie_t *variables = bc_trie_new(free); - bc_trie_insert(variables, "LOL", bc_strdup("HEHE")); - bc_trie_t *local = bc_trie_new(free); - bc_trie_insert(local, "ASD", bc_strdup("QWE")); + sb_trie_t *variables = sb_trie_new(free); + sb_trie_insert(variables, "LOL", sb_strdup("HEHE")); + sb_trie_t *local = sb_trie_new(free); + sb_trie_insert(local, "ASD", sb_strdup("QWE")); char *rv = bm_exec_build_blogc_cmd("blogc", NULL, variables, local, NULL, true, NULL, "main.tmpl", "foo.html", false, true); @@ -261,18 +260,18 @@ test_build_blogc_cmd_without_settings(void **state) "blogc"); free(rv); - bc_trie_free(local); - bc_trie_free(variables); + sb_trie_free(local); + sb_trie_free(variables); } static void test_build_blogc_cmd_print(void **state) { - bc_trie_t *variables = bc_trie_new(free); - bc_trie_insert(variables, "LOL", bc_strdup("HEHE")); - bc_trie_t *local = bc_trie_new(free); - bc_trie_insert(local, "ASD", bc_strdup("QWE")); + sb_trie_t *variables = sb_trie_new(free); + sb_trie_insert(variables, "LOL", sb_strdup("HEHE")); + sb_trie_t *local = sb_trie_new(free); + sb_trie_insert(local, "ASD", sb_strdup("QWE")); char *rv = bm_exec_build_blogc_cmd("blogc", NULL, variables, local, "LOL", false, NULL, NULL, NULL, false, true); @@ -296,8 +295,8 @@ test_build_blogc_cmd_print(void **state) "blogc -p LOL"); free(rv); - bc_trie_free(local); - bc_trie_free(variables); + sb_trie_free(local); + sb_trie_free(variables); } diff --git a/tests/blogc-make/check_rules.c b/tests/blogc-make/check_rules.c index ed2e46a..25ba0e1 100644 --- a/tests/blogc-make/check_rules.c +++ b/tests/blogc-make/check_rules.c @@ -10,73 +10,72 @@ #include <stddef.h> #include <setjmp.h> #include <cmocka.h> - #include <stdlib.h> #include <string.h> +#include <squareball.h> #include "../../src/blogc-make/rules.h" -#include "../../src/common/utils.h" static void test_rule_parse_args(void **state) { - bc_trie_t *t = bm_rule_parse_args("bola:foo=" + 4); + sb_trie_t *t = bm_rule_parse_args("bola:foo=" + 4); assert_non_null(t); - assert_int_equal(bc_trie_size(t), 1); - assert_string_equal(bc_trie_lookup(t, "foo"), ""); - bc_trie_free(t); + assert_int_equal(sb_trie_size(t), 1); + assert_string_equal(sb_trie_lookup(t, "foo"), ""); + sb_trie_free(t); t = bm_rule_parse_args("bola:foo=bar" + 4); assert_non_null(t); - assert_int_equal(bc_trie_size(t), 1); - assert_string_equal(bc_trie_lookup(t, "foo"), "bar"); - bc_trie_free(t); + assert_int_equal(sb_trie_size(t), 1); + assert_string_equal(sb_trie_lookup(t, "foo"), "bar"); + sb_trie_free(t); t = bm_rule_parse_args("bola:foo=,baz=lol" + 4); assert_non_null(t); - assert_int_equal(bc_trie_size(t), 2); - assert_string_equal(bc_trie_lookup(t, "foo"), ""); - assert_string_equal(bc_trie_lookup(t, "baz"), "lol"); - bc_trie_free(t); + assert_int_equal(sb_trie_size(t), 2); + assert_string_equal(sb_trie_lookup(t, "foo"), ""); + assert_string_equal(sb_trie_lookup(t, "baz"), "lol"); + sb_trie_free(t); t = bm_rule_parse_args("bola:foo=bar,baz=" + 4); assert_non_null(t); - assert_int_equal(bc_trie_size(t), 2); - assert_string_equal(bc_trie_lookup(t, "foo"), "bar"); - assert_string_equal(bc_trie_lookup(t, "baz"), ""); - bc_trie_free(t); + assert_int_equal(sb_trie_size(t), 2); + assert_string_equal(sb_trie_lookup(t, "foo"), "bar"); + assert_string_equal(sb_trie_lookup(t, "baz"), ""); + sb_trie_free(t); t = bm_rule_parse_args("bola:foo=bar,baz=lol" + 4); assert_non_null(t); - assert_int_equal(bc_trie_size(t), 2); - assert_string_equal(bc_trie_lookup(t, "foo"), "bar"); - assert_string_equal(bc_trie_lookup(t, "baz"), "lol"); - bc_trie_free(t); + assert_int_equal(sb_trie_size(t), 2); + assert_string_equal(sb_trie_lookup(t, "foo"), "bar"); + assert_string_equal(sb_trie_lookup(t, "baz"), "lol"); + sb_trie_free(t); t = bm_rule_parse_args("bola:foo=,baz=lol,asd=qwe" + 4); assert_non_null(t); - assert_int_equal(bc_trie_size(t), 3); - assert_string_equal(bc_trie_lookup(t, "foo"), ""); - assert_string_equal(bc_trie_lookup(t, "baz"), "lol"); - assert_string_equal(bc_trie_lookup(t, "asd"), "qwe"); - bc_trie_free(t); + assert_int_equal(sb_trie_size(t), 3); + assert_string_equal(sb_trie_lookup(t, "foo"), ""); + assert_string_equal(sb_trie_lookup(t, "baz"), "lol"); + assert_string_equal(sb_trie_lookup(t, "asd"), "qwe"); + sb_trie_free(t); t = bm_rule_parse_args("bola:foo=bar,baz=,asd=qwe" + 4); assert_non_null(t); - assert_int_equal(bc_trie_size(t), 3); - assert_string_equal(bc_trie_lookup(t, "foo"), "bar"); - assert_string_equal(bc_trie_lookup(t, "baz"), ""); - assert_string_equal(bc_trie_lookup(t, "asd"), "qwe"); - bc_trie_free(t); + assert_int_equal(sb_trie_size(t), 3); + assert_string_equal(sb_trie_lookup(t, "foo"), "bar"); + assert_string_equal(sb_trie_lookup(t, "baz"), ""); + assert_string_equal(sb_trie_lookup(t, "asd"), "qwe"); + sb_trie_free(t); t = bm_rule_parse_args("bola:foo=bar,baz=lol,asd=" + 4); assert_non_null(t); - assert_int_equal(bc_trie_size(t), 3); - assert_string_equal(bc_trie_lookup(t, "foo"), "bar"); - assert_string_equal(bc_trie_lookup(t, "baz"), "lol"); - assert_string_equal(bc_trie_lookup(t, "asd"), ""); - bc_trie_free(t); + assert_int_equal(sb_trie_size(t), 3); + assert_string_equal(sb_trie_lookup(t, "foo"), "bar"); + assert_string_equal(sb_trie_lookup(t, "baz"), "lol"); + assert_string_equal(sb_trie_lookup(t, "asd"), ""); + sb_trie_free(t); t = bm_rule_parse_args("bola:foo=bar,baz=lol,asd=qwe" + 4); assert_non_null(t); - assert_int_equal(bc_trie_size(t), 3); - assert_string_equal(bc_trie_lookup(t, "foo"), "bar"); - assert_string_equal(bc_trie_lookup(t, "baz"), "lol"); - assert_string_equal(bc_trie_lookup(t, "asd"), "qwe"); - bc_trie_free(t); + assert_int_equal(sb_trie_size(t), 3); + assert_string_equal(sb_trie_lookup(t, "foo"), "bar"); + assert_string_equal(sb_trie_lookup(t, "baz"), "lol"); + assert_string_equal(sb_trie_lookup(t, "asd"), "qwe"); + sb_trie_free(t); } diff --git a/tests/blogc-make/check_settings.c b/tests/blogc-make/check_settings.c index 7cebedc..3f091dd 100644 --- a/tests/blogc-make/check_settings.c +++ b/tests/blogc-make/check_settings.c @@ -10,27 +10,24 @@ #include <stddef.h> #include <setjmp.h> #include <cmocka.h> - #include <stdlib.h> #include <string.h> +#include <squareball.h> #include "../../src/blogc-make/settings.h" -#include "../../src/common/error.h" -#include "../../src/common/utils.h" static void test_settings_empty(void **state) { const char *a = ""; - bc_error_t *err = NULL; + sb_error_t *err = NULL; bm_settings_t *s = bm_settings_parse(a, strlen(a), &err); assert_non_null(err); assert_null(s); - assert_int_equal(err->type, BLOGC_MAKE_ERROR_SETTINGS); - assert_string_equal(err->msg, - "[global] key required but not found or empty: AUTHOR_NAME"); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "settings: [global] key required but not found or empty: AUTHOR_NAME"); + sb_error_free(err); } @@ -45,14 +42,13 @@ test_settings(void **state) "[global]\n" "BOLA = asd\n" "GUDA = qwe\n"; - bc_error_t *err = NULL; + sb_error_t *err = NULL; bm_settings_t *s = bm_settings_parse(a, strlen(a), &err); assert_non_null(err); assert_null(s); - assert_int_equal(err->type, BLOGC_MAKE_ERROR_SETTINGS); - assert_string_equal(err->msg, - "[global] key required but not found or empty: AUTHOR_NAME"); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "settings: [global] key required but not found or empty: AUTHOR_NAME"); + sb_error_free(err); } @@ -67,14 +63,13 @@ test_settings_env(void **state) "[environment]\n" "BOLA = asd\n" "GUDA = qwe\n"; - bc_error_t *err = NULL; + sb_error_t *err = NULL; bm_settings_t *s = bm_settings_parse(a, strlen(a), &err); assert_non_null(err); assert_null(s); - assert_int_equal(err->type, BLOGC_MAKE_ERROR_SETTINGS); - assert_string_equal(err->msg, - "[environment] key required but not found or empty: AUTHOR_NAME"); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "settings: [environment] key required but not found or empty: AUTHOR_NAME"); + sb_error_free(err); } @@ -113,36 +108,36 @@ test_settings2(void **state) "jjjj\n" "kkkk\n" "llll\n"; - bc_error_t *err = NULL; + sb_error_t *err = NULL; bm_settings_t *s = bm_settings_parse(a, strlen(a), &err); assert_null(err); assert_non_null(s); - assert_int_equal(bc_trie_size(s->global), 7); - assert_string_equal(bc_trie_lookup(s->global, "BOLA"), "asd"); - assert_string_equal(bc_trie_lookup(s->global, "GUDA"), "qwe"); - assert_string_equal(bc_trie_lookup(s->global, "AUTHOR_NAME"), "chunda"); - assert_string_equal(bc_trie_lookup(s->global, "AUTHOR_EMAIL"), "chunda@example.com"); - assert_string_equal(bc_trie_lookup(s->global, "SITE_TITLE"), "Fuuuuuuuuu"); - assert_string_equal(bc_trie_lookup(s->global, "SITE_TAGLINE"), "My cool tagline"); - assert_string_equal(bc_trie_lookup(s->global, "BASE_DOMAIN"), "http://example.com"); - assert_int_equal(bc_trie_size(s->settings), 16); - assert_string_equal(bc_trie_lookup(s->settings, "source_ext"), ".txt"); - assert_string_equal(bc_trie_lookup(s->settings, "html_ext"), "/index.html"); - assert_string_equal(bc_trie_lookup(s->settings, "content_dir"), "guda"); - assert_string_equal(bc_trie_lookup(s->settings, "template_dir"), "templates"); - assert_string_equal(bc_trie_lookup(s->settings, "main_template"), "foo.tmpl"); - assert_string_equal(bc_trie_lookup(s->settings, "date_format"), + assert_int_equal(sb_trie_size(s->global), 7); + assert_string_equal(sb_trie_lookup(s->global, "BOLA"), "asd"); + assert_string_equal(sb_trie_lookup(s->global, "GUDA"), "qwe"); + assert_string_equal(sb_trie_lookup(s->global, "AUTHOR_NAME"), "chunda"); + assert_string_equal(sb_trie_lookup(s->global, "AUTHOR_EMAIL"), "chunda@example.com"); + assert_string_equal(sb_trie_lookup(s->global, "SITE_TITLE"), "Fuuuuuuuuu"); + assert_string_equal(sb_trie_lookup(s->global, "SITE_TAGLINE"), "My cool tagline"); + assert_string_equal(sb_trie_lookup(s->global, "BASE_DOMAIN"), "http://example.com"); + assert_int_equal(sb_trie_size(s->settings), 16); + assert_string_equal(sb_trie_lookup(s->settings, "source_ext"), ".txt"); + assert_string_equal(sb_trie_lookup(s->settings, "html_ext"), "/index.html"); + assert_string_equal(sb_trie_lookup(s->settings, "content_dir"), "guda"); + assert_string_equal(sb_trie_lookup(s->settings, "template_dir"), "templates"); + assert_string_equal(sb_trie_lookup(s->settings, "main_template"), "foo.tmpl"); + assert_string_equal(sb_trie_lookup(s->settings, "date_format"), "%b %d, %Y, %I:%M %p GMT"); - assert_string_equal(bc_trie_lookup(s->settings, "posts_per_page"), "10"); - assert_string_equal(bc_trie_lookup(s->settings, "atom_prefix"), "atom"); - assert_string_equal(bc_trie_lookup(s->settings, "atom_ext"), ".xml"); - assert_string_equal(bc_trie_lookup(s->settings, "atom_posts_per_page"), "10"); - assert_string_equal(bc_trie_lookup(s->settings, "pagination_prefix"), "page"); - assert_string_equal(bc_trie_lookup(s->settings, "post_prefix"), "post"); - assert_string_equal(bc_trie_lookup(s->settings, "tag_prefix"), "tag"); - assert_string_equal(bc_trie_lookup(s->settings, "html_order"), "DESC"); - assert_string_equal(bc_trie_lookup(s->settings, "atom_order"), "DESC"); - assert_string_equal(bc_trie_lookup(s->settings, "index_prefix"), ""); + assert_string_equal(sb_trie_lookup(s->settings, "posts_per_page"), "10"); + assert_string_equal(sb_trie_lookup(s->settings, "atom_prefix"), "atom"); + assert_string_equal(sb_trie_lookup(s->settings, "atom_ext"), ".xml"); + assert_string_equal(sb_trie_lookup(s->settings, "atom_posts_per_page"), "10"); + assert_string_equal(sb_trie_lookup(s->settings, "pagination_prefix"), "page"); + assert_string_equal(sb_trie_lookup(s->settings, "post_prefix"), "post"); + assert_string_equal(sb_trie_lookup(s->settings, "tag_prefix"), "tag"); + assert_string_equal(sb_trie_lookup(s->settings, "html_order"), "DESC"); + assert_string_equal(sb_trie_lookup(s->settings, "atom_order"), "DESC"); + assert_string_equal(sb_trie_lookup(s->settings, "index_prefix"), ""); assert_non_null(s->posts); assert_string_equal(s->posts[0], "aaaa"); assert_string_equal(s->posts[1], "bbbb"); @@ -202,36 +197,36 @@ test_settings_env2(void **state) "jjjj\n" "kkkk\n" "llll\n"; - bc_error_t *err = NULL; + sb_error_t *err = NULL; bm_settings_t *s = bm_settings_parse(a, strlen(a), &err); assert_null(err); assert_non_null(s); - assert_int_equal(bc_trie_size(s->global), 7); - assert_string_equal(bc_trie_lookup(s->global, "BOLA"), "asd"); - assert_string_equal(bc_trie_lookup(s->global, "GUDA"), "qwe"); - assert_string_equal(bc_trie_lookup(s->global, "AUTHOR_NAME"), "chunda"); - assert_string_equal(bc_trie_lookup(s->global, "AUTHOR_EMAIL"), "chunda@example.com"); - assert_string_equal(bc_trie_lookup(s->global, "SITE_TITLE"), "Fuuuuuuuuu"); - assert_string_equal(bc_trie_lookup(s->global, "SITE_TAGLINE"), "My cool tagline"); - assert_string_equal(bc_trie_lookup(s->global, "BASE_DOMAIN"), "http://example.com"); - assert_int_equal(bc_trie_size(s->settings), 16); - assert_string_equal(bc_trie_lookup(s->settings, "source_ext"), ".txt"); - assert_string_equal(bc_trie_lookup(s->settings, "html_ext"), "/index.html"); - assert_string_equal(bc_trie_lookup(s->settings, "content_dir"), "guda"); - assert_string_equal(bc_trie_lookup(s->settings, "template_dir"), "templates"); - assert_string_equal(bc_trie_lookup(s->settings, "main_template"), "foo.tmpl"); - assert_string_equal(bc_trie_lookup(s->settings, "date_format"), + assert_int_equal(sb_trie_size(s->global), 7); + assert_string_equal(sb_trie_lookup(s->global, "BOLA"), "asd"); + assert_string_equal(sb_trie_lookup(s->global, "GUDA"), "qwe"); + assert_string_equal(sb_trie_lookup(s->global, "AUTHOR_NAME"), "chunda"); + assert_string_equal(sb_trie_lookup(s->global, "AUTHOR_EMAIL"), "chunda@example.com"); + assert_string_equal(sb_trie_lookup(s->global, "SITE_TITLE"), "Fuuuuuuuuu"); + assert_string_equal(sb_trie_lookup(s->global, "SITE_TAGLINE"), "My cool tagline"); + assert_string_equal(sb_trie_lookup(s->global, "BASE_DOMAIN"), "http://example.com"); + assert_int_equal(sb_trie_size(s->settings), 16); + assert_string_equal(sb_trie_lookup(s->settings, "source_ext"), ".txt"); + assert_string_equal(sb_trie_lookup(s->settings, "html_ext"), "/index.html"); + assert_string_equal(sb_trie_lookup(s->settings, "content_dir"), "guda"); + assert_string_equal(sb_trie_lookup(s->settings, "template_dir"), "templates"); + assert_string_equal(sb_trie_lookup(s->settings, "main_template"), "foo.tmpl"); + assert_string_equal(sb_trie_lookup(s->settings, "date_format"), "%b %d, %Y, %I:%M %p GMT"); - assert_string_equal(bc_trie_lookup(s->settings, "posts_per_page"), "10"); - assert_string_equal(bc_trie_lookup(s->settings, "atom_prefix"), "atom"); - assert_string_equal(bc_trie_lookup(s->settings, "atom_ext"), ".xml"); - assert_string_equal(bc_trie_lookup(s->settings, "atom_posts_per_page"), "10"); - assert_string_equal(bc_trie_lookup(s->settings, "pagination_prefix"), "page"); - assert_string_equal(bc_trie_lookup(s->settings, "post_prefix"), "post"); - assert_string_equal(bc_trie_lookup(s->settings, "tag_prefix"), "tag"); - assert_string_equal(bc_trie_lookup(s->settings, "html_order"), "DESC"); - assert_string_equal(bc_trie_lookup(s->settings, "atom_order"), "DESC"); - assert_string_equal(bc_trie_lookup(s->settings, "index_prefix"), ""); + assert_string_equal(sb_trie_lookup(s->settings, "posts_per_page"), "10"); + assert_string_equal(sb_trie_lookup(s->settings, "atom_prefix"), "atom"); + assert_string_equal(sb_trie_lookup(s->settings, "atom_ext"), ".xml"); + assert_string_equal(sb_trie_lookup(s->settings, "atom_posts_per_page"), "10"); + assert_string_equal(sb_trie_lookup(s->settings, "pagination_prefix"), "page"); + assert_string_equal(sb_trie_lookup(s->settings, "post_prefix"), "post"); + assert_string_equal(sb_trie_lookup(s->settings, "tag_prefix"), "tag"); + assert_string_equal(sb_trie_lookup(s->settings, "html_order"), "DESC"); + assert_string_equal(sb_trie_lookup(s->settings, "atom_order"), "DESC"); + assert_string_equal(sb_trie_lookup(s->settings, "index_prefix"), ""); assert_non_null(s->posts); assert_string_equal(s->posts[0], "aaaa"); assert_string_equal(s->posts[1], "bbbb"); @@ -291,36 +286,36 @@ test_settings_copy_files(void **state) "jjjj\n" "kkkk\n" "llll\n"; - bc_error_t *err = NULL; + sb_error_t *err = NULL; bm_settings_t *s = bm_settings_parse(a, strlen(a), &err); assert_null(err); assert_non_null(s); - assert_int_equal(bc_trie_size(s->global), 7); - assert_string_equal(bc_trie_lookup(s->global, "BOLA"), "asd"); - assert_string_equal(bc_trie_lookup(s->global, "GUDA"), "qwe"); - assert_string_equal(bc_trie_lookup(s->global, "AUTHOR_NAME"), "chunda"); - assert_string_equal(bc_trie_lookup(s->global, "AUTHOR_EMAIL"), "chunda@example.com"); - assert_string_equal(bc_trie_lookup(s->global, "SITE_TITLE"), "Fuuuuuuuuu"); - assert_string_equal(bc_trie_lookup(s->global, "SITE_TAGLINE"), "My cool tagline"); - assert_string_equal(bc_trie_lookup(s->global, "BASE_DOMAIN"), "http://example.com"); - assert_int_equal(bc_trie_size(s->settings), 16); - assert_string_equal(bc_trie_lookup(s->settings, "source_ext"), ".txt"); - assert_string_equal(bc_trie_lookup(s->settings, "html_ext"), "/index.html"); - assert_string_equal(bc_trie_lookup(s->settings, "content_dir"), "guda"); - assert_string_equal(bc_trie_lookup(s->settings, "template_dir"), "templates"); - assert_string_equal(bc_trie_lookup(s->settings, "main_template"), "foo.tmpl"); - assert_string_equal(bc_trie_lookup(s->settings, "date_format"), + assert_int_equal(sb_trie_size(s->global), 7); + assert_string_equal(sb_trie_lookup(s->global, "BOLA"), "asd"); + assert_string_equal(sb_trie_lookup(s->global, "GUDA"), "qwe"); + assert_string_equal(sb_trie_lookup(s->global, "AUTHOR_NAME"), "chunda"); + assert_string_equal(sb_trie_lookup(s->global, "AUTHOR_EMAIL"), "chunda@example.com"); + assert_string_equal(sb_trie_lookup(s->global, "SITE_TITLE"), "Fuuuuuuuuu"); + assert_string_equal(sb_trie_lookup(s->global, "SITE_TAGLINE"), "My cool tagline"); + assert_string_equal(sb_trie_lookup(s->global, "BASE_DOMAIN"), "http://example.com"); + assert_int_equal(sb_trie_size(s->settings), 16); + assert_string_equal(sb_trie_lookup(s->settings, "source_ext"), ".txt"); + assert_string_equal(sb_trie_lookup(s->settings, "html_ext"), "/index.html"); + assert_string_equal(sb_trie_lookup(s->settings, "content_dir"), "guda"); + assert_string_equal(sb_trie_lookup(s->settings, "template_dir"), "templates"); + assert_string_equal(sb_trie_lookup(s->settings, "main_template"), "foo.tmpl"); + assert_string_equal(sb_trie_lookup(s->settings, "date_format"), "%b %d, %Y, %I:%M %p GMT"); - assert_string_equal(bc_trie_lookup(s->settings, "posts_per_page"), "10"); - assert_string_equal(bc_trie_lookup(s->settings, "atom_prefix"), "atom"); - assert_string_equal(bc_trie_lookup(s->settings, "atom_ext"), ".xml"); - assert_string_equal(bc_trie_lookup(s->settings, "atom_posts_per_page"), "10"); - assert_string_equal(bc_trie_lookup(s->settings, "pagination_prefix"), "page"); - assert_string_equal(bc_trie_lookup(s->settings, "post_prefix"), "post"); - assert_string_equal(bc_trie_lookup(s->settings, "tag_prefix"), "tag"); - assert_string_equal(bc_trie_lookup(s->settings, "html_order"), "DESC"); - assert_string_equal(bc_trie_lookup(s->settings, "atom_order"), "DESC"); - assert_string_equal(bc_trie_lookup(s->settings, "index_prefix"), ""); + assert_string_equal(sb_trie_lookup(s->settings, "posts_per_page"), "10"); + assert_string_equal(sb_trie_lookup(s->settings, "atom_prefix"), "atom"); + assert_string_equal(sb_trie_lookup(s->settings, "atom_ext"), ".xml"); + assert_string_equal(sb_trie_lookup(s->settings, "atom_posts_per_page"), "10"); + assert_string_equal(sb_trie_lookup(s->settings, "pagination_prefix"), "page"); + assert_string_equal(sb_trie_lookup(s->settings, "post_prefix"), "post"); + assert_string_equal(sb_trie_lookup(s->settings, "tag_prefix"), "tag"); + assert_string_equal(sb_trie_lookup(s->settings, "html_order"), "DESC"); + assert_string_equal(sb_trie_lookup(s->settings, "atom_order"), "DESC"); + assert_string_equal(sb_trie_lookup(s->settings, "index_prefix"), ""); assert_non_null(s->posts); assert_string_equal(s->posts[0], "aaaa"); assert_string_equal(s->posts[1], "bbbb"); diff --git a/tests/blogc-make/check_utils.c b/tests/blogc-make/check_utils.c index 5b3614d..852c0f7 100644 --- a/tests/blogc-make/check_utils.c +++ b/tests/blogc-make/check_utils.c @@ -10,11 +10,10 @@ #include <stddef.h> #include <setjmp.h> #include <cmocka.h> - #include <stdlib.h> +#include <squareball.h> #include "../../src/blogc-make/utils.h" -#include "../../src/common/utils.h" static void diff --git a/tests/blogc-runserver/check_httpd_utils.c b/tests/blogc-runserver/check_httpd_utils.c index 3e21e63..69c2a5b 100644 --- a/tests/blogc-runserver/check_httpd_utils.c +++ b/tests/blogc-runserver/check_httpd_utils.c @@ -12,7 +12,8 @@ #include <cmocka.h> #include <stdlib.h> #include <string.h> -#include "../../src/common/utils.h" +#include <squareball.h> + #include "../../src/blogc-runserver/httpd-utils.h" @@ -89,7 +90,7 @@ static void test_urldecode(void **state) { for (size_t i = 0; i < 128; i++) { - char *t = bc_strdup_printf("%%%02x", i); + char *t = sb_strdup_printf("%%%02x", i); char *r = br_urldecode(t); assert_int_equal(r[0], i); assert_int_equal(r[1], 0); diff --git a/tests/blogc/check_datetime_parser.c b/tests/blogc/check_datetime_parser.c index 44c1af8..2a79bd4 100644 --- a/tests/blogc/check_datetime_parser.c +++ b/tests/blogc/check_datetime_parser.c @@ -12,14 +12,15 @@ #include <cmocka.h> #include <stdlib.h> #include <locale.h> -#include "../../src/common/error.h" +#include <squareball.h> + #include "../../src/blogc/datetime-parser.h" static void test_convert_datetime(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-11-30 12:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(err); @@ -31,7 +32,7 @@ test_convert_datetime(void **state) static void test_convert_datetime_implicit_seconds(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-11-30 12:13", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(err); @@ -43,7 +44,7 @@ test_convert_datetime_implicit_seconds(void **state) static void test_convert_datetime_implicit_minutes(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-11-30 12", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(err); @@ -55,7 +56,7 @@ test_convert_datetime_implicit_minutes(void **state) static void test_convert_datetime_implicit_hours(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-11-30", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(err); @@ -67,529 +68,491 @@ test_convert_datetime_implicit_hours(void **state) static void test_convert_datetime_invalid_formats(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid datetime string. Found '', formats allowed are: " + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid datetime string. Found '', formats allowed are: " "'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and " "'yyyy-mm-dd'."); - bc_error_free(err); + sb_error_free(err); err = NULL; dt = blogc_convert_datetime("2", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid datetime string. Found '2', formats allowed are: " + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid datetime string. Found '2', formats allowed are: " "'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and " "'yyyy-mm-dd'."); - bc_error_free(err); + sb_error_free(err); err = NULL; dt = blogc_convert_datetime("20", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid datetime string. Found '20', formats allowed are: " + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid datetime string. Found '20', formats allowed are: " "'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and " "'yyyy-mm-dd'."); - bc_error_free(err); + sb_error_free(err); err = NULL; dt = blogc_convert_datetime("201", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid datetime string. Found '201', formats allowed are: " + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid datetime string. Found '201', formats allowed are: " "'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and " "'yyyy-mm-dd'."); - bc_error_free(err); + sb_error_free(err); err = NULL; dt = blogc_convert_datetime("2010", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid datetime string. Found '2010', formats allowed are: " + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid datetime string. Found '2010', formats allowed are: " "'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and " "'yyyy-mm-dd'."); - bc_error_free(err); + sb_error_free(err); err = NULL; dt = blogc_convert_datetime("2010-", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid datetime string. Found '2010-', formats allowed are: " + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid datetime string. Found '2010-', formats allowed are: " "'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and " "'yyyy-mm-dd'."); - bc_error_free(err); + sb_error_free(err); err = NULL; dt = blogc_convert_datetime("2010-1", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid datetime string. Found '2010-1', formats allowed are: " + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid datetime string. Found '2010-1', formats allowed are: " "'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and " "'yyyy-mm-dd'."); - bc_error_free(err); + sb_error_free(err); err = NULL; dt = blogc_convert_datetime("2010-11", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid datetime string. Found '2010-11', formats allowed are: " + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid datetime string. Found '2010-11', formats allowed are: " "'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and " "'yyyy-mm-dd'."); - bc_error_free(err); + sb_error_free(err); err = NULL; dt = blogc_convert_datetime("2010-11-", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid datetime string. Found '2010-11-', formats allowed are: " + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid datetime string. Found '2010-11-', formats allowed are: " "'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and " "'yyyy-mm-dd'."); - bc_error_free(err); + sb_error_free(err); err = NULL; dt = blogc_convert_datetime("2010-11-3", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid datetime string. Found '2010-11-3', formats allowed are: " + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid datetime string. Found '2010-11-3', formats allowed are: " "'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and " "'yyyy-mm-dd'."); - bc_error_free(err); + sb_error_free(err); err = NULL; dt = blogc_convert_datetime("2010-11-30 ", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid datetime string. Found '2010-11-30 ', formats allowed are: " + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid datetime string. Found '2010-11-30 ', formats allowed are: " "'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and " "'yyyy-mm-dd'."); - bc_error_free(err); + sb_error_free(err); err = NULL; dt = blogc_convert_datetime("2010-11-30 1", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid datetime string. Found '2010-11-30 1', formats allowed are: " + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid datetime string. Found '2010-11-30 1', formats allowed are: " "'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and " "'yyyy-mm-dd'."); - bc_error_free(err); + sb_error_free(err); err = NULL; dt = blogc_convert_datetime("2010-11-30 12:1", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid datetime string. Found '2010-11-30 12:1', formats allowed are: " + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid datetime string. Found '2010-11-30 12:1', formats ""allowed are: " "'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and " "'yyyy-mm-dd'."); - bc_error_free(err); + sb_error_free(err); err = NULL; dt = blogc_convert_datetime("2010-11-30 12:13:1", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid datetime string. Found '2010-11-30 12:13:1', formats allowed are: " + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid datetime string. Found '2010-11-30 12:13:1', formats allowed are: " "'yyyy-mm-dd hh:mm:ss', 'yyyy-mm-dd hh:ss', 'yyyy-mm-dd hh' and " "'yyyy-mm-dd'."); - bc_error_free(err); + sb_error_free(err); } static void test_convert_datetime_invalid_1st_year(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("a010-11-30 12:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid first digit of year. Found 'a', must be integer >= 0 and <= 9."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid first digit of year. Found 'a', must be integer >= 0 and <= 9."); + sb_error_free(err); } static void test_convert_datetime_invalid_2nd_year(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2a10-11-30 12:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid second digit of year. Found 'a', must be integer >= 0 and <= 9."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid second digit of year. Found 'a', must be integer >= 0 and <= 9."); + sb_error_free(err); } static void test_convert_datetime_invalid_3rd_year(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("20a0-11-30 12:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid third digit of year. Found 'a', must be integer >= 0 and <= 9."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid third digit of year. Found 'a', must be integer >= 0 and <= 9."); + sb_error_free(err); } static void test_convert_datetime_invalid_4th_year(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("201a-11-30 12:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid fourth digit of year. Found 'a', must be integer >= 0 and <= 9."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid fourth digit of year. Found 'a', must be integer >= 0 and <= 9."); + sb_error_free(err); } static void test_convert_datetime_invalid_year(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("1899-11-30 12:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid year. Found 1899, must be >= 1900."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid year. Found 1899, must be >= 1900."); + sb_error_free(err); } static void test_convert_datetime_invalid_1st_hyphen(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010 11-30 12:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid separator between year and month. Found ' ', must be '-'."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid separator between year and month. Found ' ', must be '-'."); + sb_error_free(err); } static void test_convert_datetime_invalid_1st_month(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-a1-30 12:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid first digit of month. Found 'a', must be integer >= 0 and <= 1."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid first digit of month. Found 'a', must be integer >= 0 and <= 1."); + sb_error_free(err); } static void test_convert_datetime_invalid_2nd_month(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-1a-30 12:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid second digit of month. Found 'a', must be integer >= 0 and <= 9."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid second digit of month. Found 'a', must be integer >= 0 and <= 9."); + sb_error_free(err); } static void test_convert_datetime_invalid_month(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-13-30 12:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid month. Found 13, must be >= 1 and <= 12."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid month. Found 13, must be >= 1 and <= 12."); + sb_error_free(err); } static void test_convert_datetime_invalid_2nd_hyphen(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-11 30 12:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid separator between month and day. Found ' ', must be '-'."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid separator between month and day. Found ' ', must be '-'."); + sb_error_free(err); } static void test_convert_datetime_invalid_1st_day(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-11-a0 12:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid first digit of day. Found 'a', must be integer >= 0 and <= 3."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid first digit of day. Found 'a', must be integer >= 0 and <= 3."); + sb_error_free(err); } static void test_convert_datetime_invalid_2nd_day(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-11-3a 12:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid second digit of day. Found 'a', must be integer >= 0 and <= 9."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid second digit of day. Found 'a', must be integer >= 0 and <= 9."); + sb_error_free(err); } static void test_convert_datetime_invalid_day(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-12-32 12:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid day. Found 32, must be >= 1 and <= 31."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid day. Found 32, must be >= 1 and <= 31."); + sb_error_free(err); } static void test_convert_datetime_invalid_space(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-11-30-12:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid separator between date and time. Found '-', must be ' ' " + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid separator between date and time. Found '-', must be ' ' " "(empty space)."); - bc_error_free(err); + sb_error_free(err); } static void test_convert_datetime_invalid_1st_hours(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-11-30 a2:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid first digit of hours. Found 'a', must be integer >= 0 and <= 2."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid first digit of hours. Found 'a', must be integer >= 0 and <= 2."); + sb_error_free(err); } static void test_convert_datetime_invalid_2nd_hours(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-11-30 1a:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid second digit of hours. Found 'a', must be integer >= 0 and <= 9."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid second digit of hours. Found 'a', must be integer >= 0 and <= 9."); + sb_error_free(err); } static void test_convert_datetime_invalid_hours(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-12-30 24:13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid hours. Found 24, must be >= 0 and <= 23."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid hours. Found 24, must be >= 0 and <= 23."); + sb_error_free(err); } static void test_convert_datetime_invalid_1st_colon(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-11-30 12 13:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid separator between hours and minutes. Found ' ', must be ':'."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid separator between hours and minutes. Found ' ', must be ':'."); + sb_error_free(err); } static void test_convert_datetime_invalid_1st_minutes(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-11-30 12:a3:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid first digit of minutes. Found 'a', must be integer >= 0 and <= 5."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid first digit of minutes. Found 'a', must be integer >= 0 and <= 5."); + sb_error_free(err); } static void test_convert_datetime_invalid_2nd_minutes(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-11-30 12:1a:14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid second digit of minutes. Found 'a', must be integer >= 0 and <= 9."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid second digit of minutes. Found 'a', must be integer >= 0 and <= 9."); + sb_error_free(err); } static void test_convert_datetime_invalid_2nd_colon(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-11-30 12:13 14", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid separator between minutes and seconds. Found ' ', must be ':'."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid separator between minutes and seconds. Found ' ', must be ':'."); + sb_error_free(err); } static void test_convert_datetime_invalid_1st_seconds(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-11-30 12:13:a4", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid first digit of seconds. Found 'a', must be integer >= 0 and <= 6."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid first digit of seconds. Found 'a', must be integer >= 0 and <= 6."); + sb_error_free(err); } static void test_convert_datetime_invalid_2nd_seconds(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-11-30 12:13:1a", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid second digit of seconds. Found 'a', must be integer >= 0 and <= 9."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid second digit of seconds. Found 'a', must be integer >= 0 and <= 9."); + sb_error_free(err); } static void test_convert_datetime_invalid_seconds(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-12-30 12:13:69", "%b %d, %Y, %I:%M:%S %p GMT", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Invalid seconds. Found 69, must be >= 0 and <= 60."); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "datetime: Invalid seconds. Found 69, must be >= 0 and <= 60."); + sb_error_free(err); } static void test_convert_datetime_invalid_format_long(void **state) { - bc_error_t *err = NULL; + sb_error_t *err = NULL; char *dt = blogc_convert_datetime("2010-12-30 12:13:14", "bovhsuhxwybfrxoluiejaoqpmoylgvkrjtnuntmcgtupwabexkapnklvkwmddmplfqopvb" "yjsiimtfdeveeeayqvvnthimbqotumngxxenurxhsvyaftwsfdtxqnjluvtcwfkomfffrk" @@ -608,9 +571,8 @@ test_convert_datetime_invalid_format_long(void **state) "jgipsincitulscikxviaruryfraeqssykeftcphtndlfhdxokg", &err); assert_null(dt); assert_non_null(err); - assert_int_equal(err->type, BLOGC_WARNING_DATETIME_PARSER); - assert_string_equal(err->msg, - "Failed to format DATE variable, FORMAT is too long: " + assert_string_equal(sb_error_to_string(err), + "datetime: Failed to format DATE variable, FORMAT is too long: " "bovhsuhxwybfrxoluiejaoqpmoylgvkrjtnuntmcgtupwabexkapnklvkwmddmplfqopvb" "yjsiimtfdeveeeayqvvnthimbqotumngxxenurxhsvyaftwsfdtxqnjluvtcwfkomfffrk" "tywccrvnraagtnedwdjtfobinobbymanppwqxubxeepotdyxuvircyshpmtrqyvbivtycs" @@ -626,7 +588,7 @@ test_convert_datetime_invalid_format_long(void **state) "uaeruwnphdjonqagjatjladqhvlxppyaqgvwpjqggnsccmkjvbxqykaejvgeajqpitkwsq" "gmjiaopomnnlewidhgbgqlblotrnuyokspuvbckqhwnhmgcwyyitmlelnehdvclojvyswj" "jgipsincitulscikxviaruryfraeqssykeftcphtndlfhdxokg"); - bc_error_free(err); + sb_error_free(err); } diff --git a/tests/blogc/check_funcvars.c b/tests/blogc/check_funcvars.c index 9d094d5..2c4acb0 100644 --- a/tests/blogc/check_funcvars.c +++ b/tests/blogc/check_funcvars.c @@ -13,16 +13,15 @@ #include <stdlib.h> #include <string.h> #include <stdio.h> -#include "../../src/common/error.h" -#include "../../src/common/utils.h" +#include <squareball.h> + #include "../../src/blogc/funcvars.h" char* -__wrap_bc_file_get_contents(const char *path, bool utf8, size_t *len, bc_error_t **err) +__wrap_sb_file_get_contents(const char *path, size_t *len, sb_error_t **err) { assert_string_equal(path, "/proc/1/cgroup"); - assert_false(utf8); char *rv = mock_type(char*); *len = strlen(rv); return rv; @@ -32,40 +31,40 @@ __wrap_bc_file_get_contents(const char *path, bool utf8, size_t *len, bc_error_t static void test_funcvars_eval(void **state) { - bc_trie_t *t = bc_trie_new(free); + sb_trie_t *t = sb_trie_new(free); blogc_funcvars_eval(t, NULL); blogc_funcvars_eval(t, ""); blogc_funcvars_eval(t, "BOLA"); - assert_int_equal(bc_trie_size(t), 0); + assert_int_equal(sb_trie_size(t), 0); - bc_trie_insert(t, "BOLA", bc_strdup("GUDA")); + sb_trie_insert(t, "BOLA", sb_strdup("GUDA")); blogc_funcvars_eval(t, "BOLA"); - assert_int_equal(bc_trie_size(t), 1); + assert_int_equal(sb_trie_size(t), 1); - bc_trie_free(t); + sb_trie_free(t); } static void test_funcvars_eval_mocked(void **state) { - bc_trie_t *t = bc_trie_new(free); + sb_trie_t *t = sb_trie_new(free); // this is the only function that isn't hidden behind conditional macros // as of when this test was written. the other functions should be tested // separately - will_return(__wrap_bc_file_get_contents, bc_strdup("asd/docker/asd")); + will_return(__wrap_sb_file_get_contents, sb_strdup("asd/docker/asd")); blogc_funcvars_eval(t, "BLOGC_SYSINFO_INSIDE_DOCKER"); - assert_string_equal(bc_trie_lookup(t, "BLOGC_SYSINFO_INSIDE_DOCKER"), "1"); - assert_int_equal(bc_trie_size(t), 1); + assert_string_equal(sb_trie_lookup(t, "BLOGC_SYSINFO_INSIDE_DOCKER"), "1"); + assert_int_equal(sb_trie_size(t), 1); // this specific function call is cached, so calling it again should not - // call bc_file_get_contents_again + // call sb_file_get_contents_again blogc_funcvars_eval(t, "BLOGC_SYSINFO_INSIDE_DOCKER"); - assert_string_equal(bc_trie_lookup(t, "BLOGC_SYSINFO_INSIDE_DOCKER"), "1"); - assert_int_equal(bc_trie_size(t), 1); + assert_string_equal(sb_trie_lookup(t, "BLOGC_SYSINFO_INSIDE_DOCKER"), "1"); + assert_int_equal(sb_trie_size(t), 1); - bc_trie_free(t); + sb_trie_free(t); } diff --git a/tests/blogc/check_loader.c b/tests/blogc/check_loader.c index d65f418..9510a3d 100644 --- a/tests/blogc/check_loader.c +++ b/tests/blogc/check_loader.c @@ -13,8 +13,8 @@ #include <stdlib.h> #include <string.h> #include <stdio.h> -#include "../../src/common/error.h" -#include "../../src/common/utils.h" +#include <squareball.h> + #include "../../src/blogc/template-parser.h" #include "../../src/blogc/loader.h" @@ -50,9 +50,8 @@ test_get_filename(void **state) char* -__wrap_bc_file_get_contents(const char *path, bool utf8, size_t *len, bc_error_t **err) +__wrap_sb_file_get_contents_utf8(const char *path, size_t *len, sb_error_t **err) { - assert_true(utf8); assert_null(*err); const char *_path = mock_type(const char*); if (_path != NULL) @@ -68,13 +67,13 @@ __wrap_bc_file_get_contents(const char *path, bool utf8, size_t *len, bc_error_t static void test_template_parse_from_file(void **state) { - bc_error_t *err = NULL; - will_return(__wrap_bc_file_get_contents, "bola"); - will_return(__wrap_bc_file_get_contents, bc_strdup("{{ BOLA }}\n")); - bc_slist_t *l = blogc_template_parse_from_file("bola", &err); + sb_error_t *err = NULL; + will_return(__wrap_sb_file_get_contents_utf8, "bola"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup("{{ BOLA }}\n")); + sb_slist_t *l = blogc_template_parse_from_file("bola", &err); assert_null(err); assert_non_null(l); - assert_int_equal(bc_slist_length(l), 2); + assert_int_equal(sb_slist_length(l), 2); blogc_template_free_ast(l); } @@ -82,10 +81,10 @@ test_template_parse_from_file(void **state) static void test_template_parse_from_file_null(void **state) { - bc_error_t *err = NULL; - will_return(__wrap_bc_file_get_contents, "bola"); - will_return(__wrap_bc_file_get_contents, NULL); - bc_slist_t *l = blogc_template_parse_from_file("bola", &err); + sb_error_t *err = NULL; + will_return(__wrap_sb_file_get_contents_utf8, "bola"); + will_return(__wrap_sb_file_get_contents_utf8, NULL); + sb_slist_t *l = blogc_template_parse_from_file("bola", &err); assert_null(err); assert_null(l); } @@ -94,33 +93,33 @@ test_template_parse_from_file_null(void **state) static void test_source_parse_from_file(void **state) { - bc_error_t *err = NULL; - will_return(__wrap_bc_file_get_contents, "bola.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + sb_error_t *err = NULL; + will_return(__wrap_sb_file_get_contents_utf8, "bola.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 123\n" "--------\n" "bola")); - bc_trie_t *t = blogc_source_parse_from_file("bola.txt", &err); + sb_trie_t *t = blogc_source_parse_from_file("bola.txt", &err); assert_null(err); assert_non_null(t); - assert_int_equal(bc_trie_size(t), 6); - assert_string_equal(bc_trie_lookup(t, "ASD"), "123"); - assert_string_equal(bc_trie_lookup(t, "FILENAME"), "bola"); - assert_string_equal(bc_trie_lookup(t, "EXCERPT"), "<p>bola</p>\n"); - assert_string_equal(bc_trie_lookup(t, "CONTENT"), "<p>bola</p>\n"); - assert_string_equal(bc_trie_lookup(t, "RAW_CONTENT"), "bola"); - assert_string_equal(bc_trie_lookup(t, "DESCRIPTION"), "bola"); - bc_trie_free(t); + assert_int_equal(sb_trie_size(t), 6); + assert_string_equal(sb_trie_lookup(t, "ASD"), "123"); + assert_string_equal(sb_trie_lookup(t, "FILENAME"), "bola"); + assert_string_equal(sb_trie_lookup(t, "EXCERPT"), "<p>bola</p>\n"); + assert_string_equal(sb_trie_lookup(t, "CONTENT"), "<p>bola</p>\n"); + assert_string_equal(sb_trie_lookup(t, "RAW_CONTENT"), "bola"); + assert_string_equal(sb_trie_lookup(t, "DESCRIPTION"), "bola"); + sb_trie_free(t); } static void test_source_parse_from_file_null(void **state) { - bc_error_t *err = NULL; - will_return(__wrap_bc_file_get_contents, "bola.txt"); - will_return(__wrap_bc_file_get_contents, NULL); - bc_trie_t *t = blogc_source_parse_from_file("bola.txt", &err); + sb_error_t *err = NULL; + will_return(__wrap_sb_file_get_contents_utf8, "bola.txt"); + will_return(__wrap_sb_file_get_contents_utf8, NULL); + sb_trie_t *t = blogc_source_parse_from_file("bola.txt", &err); assert_null(err); assert_null(t); } @@ -129,813 +128,811 @@ test_source_parse_from_file_null(void **state) static void test_source_parse_from_files(void **state) { - will_return(__wrap_bc_file_get_contents, "bola1.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola1.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 123\n" "DATE: 2001-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola2.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola2.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 456\n" "DATE: 2002-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola3.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola3.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 789\n" "DATE: 2003-02-03 04:05:06\n" "--------\n" "bola")); - bc_error_t *err = NULL; - bc_slist_t *s = NULL; - s = bc_slist_append(s, bc_strdup("bola1.txt")); - s = bc_slist_append(s, bc_strdup("bola2.txt")); - s = bc_slist_append(s, bc_strdup("bola3.txt")); - bc_trie_t *c = bc_trie_new(free); - bc_slist_t *t = blogc_source_parse_from_files(c, s, &err); + sb_error_t *err = NULL; + sb_slist_t *s = NULL; + s = sb_slist_append(s, sb_strdup("bola1.txt")); + s = sb_slist_append(s, sb_strdup("bola2.txt")); + s = sb_slist_append(s, sb_strdup("bola3.txt")); + sb_trie_t *c = sb_trie_new(free); + sb_slist_t *t = blogc_source_parse_from_files(c, s, &err); assert_null(err); assert_non_null(t); - assert_int_equal(bc_slist_length(t), 3); // it is enough, no need to look at the items - assert_int_equal(bc_trie_size(c), 4); - assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola1"); - assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola3"); - assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2003-02-03 04:05:06"); - bc_trie_free(c); - bc_slist_free_full(s, free); - bc_slist_free_full(t, (bc_free_func_t) bc_trie_free); + assert_int_equal(sb_slist_length(t), 3); // it is enough, no need to look at the items + assert_int_equal(sb_trie_size(c), 4); + assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola1"); + assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola3"); + assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2003-02-03 04:05:06"); + sb_trie_free(c); + sb_slist_free_full(s, free); + sb_slist_free_full(t, (sb_free_func_t) sb_trie_free); } static void test_source_parse_from_files_filter_sort(void **state) { - will_return(__wrap_bc_file_get_contents, "bola1.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola1.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 123\n" "DATE: 2001-02-02 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola2.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola2.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 456\n" "DATE: 2001-02-01 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola3.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola3.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 789\n" "DATE: 2001-02-03 04:05:06\n" "--------\n" "bola")); - bc_error_t *err = NULL; - bc_slist_t *s = NULL; - s = bc_slist_append(s, bc_strdup("bola1.txt")); - s = bc_slist_append(s, bc_strdup("bola2.txt")); - s = bc_slist_append(s, bc_strdup("bola3.txt")); - bc_trie_t *c = bc_trie_new(free); - bc_trie_insert(c, "FILTER_SORT", bc_strdup("1")); - bc_slist_t *t = blogc_source_parse_from_files(c, s, &err); + sb_error_t *err = NULL; + sb_slist_t *s = NULL; + s = sb_slist_append(s, sb_strdup("bola1.txt")); + s = sb_slist_append(s, sb_strdup("bola2.txt")); + s = sb_slist_append(s, sb_strdup("bola3.txt")); + sb_trie_t *c = sb_trie_new(free); + sb_trie_insert(c, "FILTER_SORT", sb_strdup("1")); + sb_slist_t *t = blogc_source_parse_from_files(c, s, &err); assert_null(err); assert_non_null(t); - assert_int_equal(bc_slist_length(t), 3); // it is enough, no need to look at the items - assert_int_equal(bc_trie_size(c), 5); - assert_string_equal(bc_trie_lookup(c, "FILTER_SORT"), "1"); - assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola3"); - assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola2"); - assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2001-02-01 04:05:06"); - bc_trie_free(c); - bc_slist_free_full(s, free); - bc_slist_free_full(t, (bc_free_func_t) bc_trie_free); + assert_int_equal(sb_slist_length(t), 3); // it is enough, no need to look at the items + assert_int_equal(sb_trie_size(c), 5); + assert_string_equal(sb_trie_lookup(c, "FILTER_SORT"), "1"); + assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola3"); + assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola2"); + assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2001-02-01 04:05:06"); + sb_trie_free(c); + sb_slist_free_full(s, free); + sb_slist_free_full(t, (sb_free_func_t) sb_trie_free); } static void test_source_parse_from_files_filter_reverse(void **state) { - will_return(__wrap_bc_file_get_contents, "bola1.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola1.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 123\n" "DATE: 2001-02-03 04:05:06\n" "TAGS: chunda\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola2.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola2.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 456\n" "DATE: 2002-02-03 04:05:06\n" "TAGS: bola, chunda\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola3.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola3.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 789\n" "DATE: 2003-02-03 04:05:06\n" "--------\n" "bola")); - bc_error_t *err = NULL; - bc_slist_t *s = NULL; - s = bc_slist_append(s, bc_strdup("bola1.txt")); - s = bc_slist_append(s, bc_strdup("bola2.txt")); - s = bc_slist_append(s, bc_strdup("bola3.txt")); - bc_trie_t *c = bc_trie_new(free); - bc_trie_insert(c, "FILTER_REVERSE", bc_strdup("1")); - bc_slist_t *t = blogc_source_parse_from_files(c, s, &err); + sb_error_t *err = NULL; + sb_slist_t *s = NULL; + s = sb_slist_append(s, sb_strdup("bola1.txt")); + s = sb_slist_append(s, sb_strdup("bola2.txt")); + s = sb_slist_append(s, sb_strdup("bola3.txt")); + sb_trie_t *c = sb_trie_new(free); + sb_trie_insert(c, "FILTER_REVERSE", sb_strdup("1")); + sb_slist_t *t = blogc_source_parse_from_files(c, s, &err); assert_null(err); assert_non_null(t); - assert_int_equal(bc_slist_length(t), 3); // it is enough, no need to look at the items - assert_int_equal(bc_trie_size(c), 5); - assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola3"); - assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola1"); - assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2003-02-03 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2001-02-03 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "FILTER_REVERSE"), "1"); - bc_trie_free(c); - bc_slist_free_full(s, free); - bc_slist_free_full(t, (bc_free_func_t) bc_trie_free); + assert_int_equal(sb_slist_length(t), 3); // it is enough, no need to look at the items + assert_int_equal(sb_trie_size(c), 5); + assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola3"); + assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola1"); + assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2003-02-03 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2001-02-03 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "FILTER_REVERSE"), "1"); + sb_trie_free(c); + sb_slist_free_full(s, free); + sb_slist_free_full(t, (sb_free_func_t) sb_trie_free); } static void test_source_parse_from_files_filter_sort_reverse(void **state) { - will_return(__wrap_bc_file_get_contents, "bola1.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola1.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 123\n" "DATE: 2001-02-02 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola2.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola2.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 456\n" "DATE: 2001-02-01 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola3.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola3.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 789\n" "DATE: 2001-02-03 04:05:06\n" "--------\n" "bola")); - bc_error_t *err = NULL; - bc_slist_t *s = NULL; - s = bc_slist_append(s, bc_strdup("bola1.txt")); - s = bc_slist_append(s, bc_strdup("bola2.txt")); - s = bc_slist_append(s, bc_strdup("bola3.txt")); - bc_trie_t *c = bc_trie_new(free); - bc_trie_insert(c, "FILTER_SORT", bc_strdup("1")); - bc_trie_insert(c, "FILTER_REVERSE", bc_strdup("1")); - bc_slist_t *t = blogc_source_parse_from_files(c, s, &err); + sb_error_t *err = NULL; + sb_slist_t *s = NULL; + s = sb_slist_append(s, sb_strdup("bola1.txt")); + s = sb_slist_append(s, sb_strdup("bola2.txt")); + s = sb_slist_append(s, sb_strdup("bola3.txt")); + sb_trie_t *c = sb_trie_new(free); + sb_trie_insert(c, "FILTER_SORT", sb_strdup("1")); + sb_trie_insert(c, "FILTER_REVERSE", sb_strdup("1")); + sb_slist_t *t = blogc_source_parse_from_files(c, s, &err); assert_null(err); assert_non_null(t); - assert_int_equal(bc_slist_length(t), 3); // it is enough, no need to look at the items - assert_int_equal(bc_trie_size(c), 6); - assert_string_equal(bc_trie_lookup(c, "FILTER_SORT"), "1"); - assert_string_equal(bc_trie_lookup(c, "FILTER_REVERSE"), "1"); - assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola2"); - assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola3"); - assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2001-02-01 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2001-02-03 04:05:06"); - bc_trie_free(c); - bc_slist_free_full(s, free); - bc_slist_free_full(t, (bc_free_func_t) bc_trie_free); + assert_int_equal(sb_slist_length(t), 3); // it is enough, no need to look at the items + assert_int_equal(sb_trie_size(c), 6); + assert_string_equal(sb_trie_lookup(c, "FILTER_SORT"), "1"); + assert_string_equal(sb_trie_lookup(c, "FILTER_REVERSE"), "1"); + assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola2"); + assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola3"); + assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2001-02-01 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2001-02-03 04:05:06"); + sb_trie_free(c); + sb_slist_free_full(s, free); + sb_slist_free_full(t, (sb_free_func_t) sb_trie_free); } static void test_source_parse_from_files_filter_by_tag(void **state) { - will_return(__wrap_bc_file_get_contents, "bola1.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola1.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 123\n" "DATE: 2001-02-03 04:05:06\n" "TAGS: chunda\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola2.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola2.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 456\n" "DATE: 2002-02-03 04:05:06\n" "TAGS: bola, chunda\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola3.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola3.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 789\n" "DATE: 2003-02-03 04:05:06\n" "--------\n" "bola")); - bc_error_t *err = NULL; - bc_slist_t *s = NULL; - s = bc_slist_append(s, bc_strdup("bola1.txt")); - s = bc_slist_append(s, bc_strdup("bola2.txt")); - s = bc_slist_append(s, bc_strdup("bola3.txt")); - bc_trie_t *c = bc_trie_new(free); - bc_trie_insert(c, "FILTER_TAG", bc_strdup("chunda")); - bc_slist_t *t = blogc_source_parse_from_files(c, s, &err); + sb_error_t *err = NULL; + sb_slist_t *s = NULL; + s = sb_slist_append(s, sb_strdup("bola1.txt")); + s = sb_slist_append(s, sb_strdup("bola2.txt")); + s = sb_slist_append(s, sb_strdup("bola3.txt")); + sb_trie_t *c = sb_trie_new(free); + sb_trie_insert(c, "FILTER_TAG", sb_strdup("chunda")); + sb_slist_t *t = blogc_source_parse_from_files(c, s, &err); assert_null(err); assert_non_null(t); - assert_int_equal(bc_slist_length(t), 2); // it is enough, no need to look at the items - assert_int_equal(bc_trie_size(c), 5); - assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola1"); - assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola2"); - assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "FILTER_TAG"), "chunda"); - bc_trie_free(c); - bc_slist_free_full(s, free); - bc_slist_free_full(t, (bc_free_func_t) bc_trie_free); + assert_int_equal(sb_slist_length(t), 2); // it is enough, no need to look at the items + assert_int_equal(sb_trie_size(c), 5); + assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola1"); + assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola2"); + assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "FILTER_TAG"), "chunda"); + sb_trie_free(c); + sb_slist_free_full(s, free); + sb_slist_free_full(t, (sb_free_func_t) sb_trie_free); } static void test_source_parse_from_files_filter_by_page(void **state) { - will_return(__wrap_bc_file_get_contents, "bola1.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola1.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 123\n" "DATE: 2001-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola2.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola2.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 456\n" "DATE: 2002-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola3.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola3.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 789\n" "DATE: 2003-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola4.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola4.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7891\n" "DATE: 2004-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola5.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola5.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7892\n" "DATE: 2005-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola6.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola6.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7893\n" "DATE: 2006-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola7.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola7.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7894\n" "DATE: 2007-02-03 04:05:06\n" "--------\n" "bola")); - bc_error_t *err = NULL; - bc_slist_t *s = NULL; - s = bc_slist_append(s, bc_strdup("bola1.txt")); - s = bc_slist_append(s, bc_strdup("bola2.txt")); - s = bc_slist_append(s, bc_strdup("bola3.txt")); - s = bc_slist_append(s, bc_strdup("bola4.txt")); - s = bc_slist_append(s, bc_strdup("bola5.txt")); - s = bc_slist_append(s, bc_strdup("bola6.txt")); - s = bc_slist_append(s, bc_strdup("bola7.txt")); - bc_trie_t *c = bc_trie_new(free); - bc_trie_insert(c, "FILTER_PAGE", bc_strdup("1")); - bc_trie_insert(c, "FILTER_PER_PAGE", bc_strdup("2")); - bc_slist_t *t = blogc_source_parse_from_files(c, s, &err); + sb_error_t *err = NULL; + sb_slist_t *s = NULL; + s = sb_slist_append(s, sb_strdup("bola1.txt")); + s = sb_slist_append(s, sb_strdup("bola2.txt")); + s = sb_slist_append(s, sb_strdup("bola3.txt")); + s = sb_slist_append(s, sb_strdup("bola4.txt")); + s = sb_slist_append(s, sb_strdup("bola5.txt")); + s = sb_slist_append(s, sb_strdup("bola6.txt")); + s = sb_slist_append(s, sb_strdup("bola7.txt")); + sb_trie_t *c = sb_trie_new(free); + sb_trie_insert(c, "FILTER_PAGE", sb_strdup("1")); + sb_trie_insert(c, "FILTER_PER_PAGE", sb_strdup("2")); + sb_slist_t *t = blogc_source_parse_from_files(c, s, &err); assert_null(err); assert_non_null(t); - assert_int_equal(bc_slist_length(t), 2); // it is enough, no need to look at the items - assert_int_equal(bc_trie_size(c), 10); - assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola1"); - assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola2"); - assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "FILTER_PAGE"), "1"); - assert_string_equal(bc_trie_lookup(c, "FILTER_PER_PAGE"), "2"); - assert_string_equal(bc_trie_lookup(c, "CURRENT_PAGE"), "1"); - assert_string_equal(bc_trie_lookup(c, "NEXT_PAGE"), "2"); - assert_string_equal(bc_trie_lookup(c, "FIRST_PAGE"), "1"); - assert_string_equal(bc_trie_lookup(c, "LAST_PAGE"), "4"); - bc_trie_free(c); - bc_slist_free_full(s, free); - bc_slist_free_full(t, (bc_free_func_t) bc_trie_free); + assert_int_equal(sb_slist_length(t), 2); // it is enough, no need to look at the items + assert_int_equal(sb_trie_size(c), 10); + assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola1"); + assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola2"); + assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "FILTER_PAGE"), "1"); + assert_string_equal(sb_trie_lookup(c, "FILTER_PER_PAGE"), "2"); + assert_string_equal(sb_trie_lookup(c, "CURRENT_PAGE"), "1"); + assert_string_equal(sb_trie_lookup(c, "NEXT_PAGE"), "2"); + assert_string_equal(sb_trie_lookup(c, "FIRST_PAGE"), "1"); + assert_string_equal(sb_trie_lookup(c, "LAST_PAGE"), "4"); + sb_trie_free(c); + sb_slist_free_full(s, free); + sb_slist_free_full(t, (sb_free_func_t) sb_trie_free); } static void test_source_parse_from_files_filter_by_page2(void **state) { - will_return(__wrap_bc_file_get_contents, "bola1.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola1.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 123\n" "DATE: 2001-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola2.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola2.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 456\n" "DATE: 2002-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola3.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola3.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 789\n" "DATE: 2003-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola4.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola4.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7891\n" "DATE: 2004-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola5.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola5.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7892\n" "DATE: 2005-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola6.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola6.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7893\n" "DATE: 2006-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola7.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola7.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7894\n" "DATE: 2007-02-03 04:05:06\n" "--------\n" "bola")); - bc_error_t *err = NULL; - bc_slist_t *s = NULL; - s = bc_slist_append(s, bc_strdup("bola1.txt")); - s = bc_slist_append(s, bc_strdup("bola2.txt")); - s = bc_slist_append(s, bc_strdup("bola3.txt")); - s = bc_slist_append(s, bc_strdup("bola4.txt")); - s = bc_slist_append(s, bc_strdup("bola5.txt")); - s = bc_slist_append(s, bc_strdup("bola6.txt")); - s = bc_slist_append(s, bc_strdup("bola7.txt")); - bc_trie_t *c = bc_trie_new(free); - bc_trie_insert(c, "FILTER_PAGE", bc_strdup("3")); - bc_trie_insert(c, "FILTER_PER_PAGE", bc_strdup("2")); - bc_slist_t *t = blogc_source_parse_from_files(c, s, &err); + sb_error_t *err = NULL; + sb_slist_t *s = NULL; + s = sb_slist_append(s, sb_strdup("bola1.txt")); + s = sb_slist_append(s, sb_strdup("bola2.txt")); + s = sb_slist_append(s, sb_strdup("bola3.txt")); + s = sb_slist_append(s, sb_strdup("bola4.txt")); + s = sb_slist_append(s, sb_strdup("bola5.txt")); + s = sb_slist_append(s, sb_strdup("bola6.txt")); + s = sb_slist_append(s, sb_strdup("bola7.txt")); + sb_trie_t *c = sb_trie_new(free); + sb_trie_insert(c, "FILTER_PAGE", sb_strdup("3")); + sb_trie_insert(c, "FILTER_PER_PAGE", sb_strdup("2")); + sb_slist_t *t = blogc_source_parse_from_files(c, s, &err); assert_null(err); assert_non_null(t); - assert_int_equal(bc_slist_length(t), 2); // it is enough, no need to look at the items - assert_int_equal(bc_trie_size(c), 11); - assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola5"); - assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola6"); - assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2005-02-03 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2006-02-03 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "FILTER_PAGE"), "3"); - assert_string_equal(bc_trie_lookup(c, "FILTER_PER_PAGE"), "2"); - assert_string_equal(bc_trie_lookup(c, "CURRENT_PAGE"), "3"); - assert_string_equal(bc_trie_lookup(c, "PREVIOUS_PAGE"), "2"); - assert_string_equal(bc_trie_lookup(c, "NEXT_PAGE"), "4"); - assert_string_equal(bc_trie_lookup(c, "FIRST_PAGE"), "1"); - assert_string_equal(bc_trie_lookup(c, "LAST_PAGE"), "4"); - bc_trie_free(c); - bc_slist_free_full(s, free); - bc_slist_free_full(t, (bc_free_func_t) bc_trie_free); + assert_int_equal(sb_slist_length(t), 2); // it is enough, no need to look at the items + assert_int_equal(sb_trie_size(c), 11); + assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola5"); + assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola6"); + assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2005-02-03 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2006-02-03 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "FILTER_PAGE"), "3"); + assert_string_equal(sb_trie_lookup(c, "FILTER_PER_PAGE"), "2"); + assert_string_equal(sb_trie_lookup(c, "CURRENT_PAGE"), "3"); + assert_string_equal(sb_trie_lookup(c, "PREVIOUS_PAGE"), "2"); + assert_string_equal(sb_trie_lookup(c, "NEXT_PAGE"), "4"); + assert_string_equal(sb_trie_lookup(c, "FIRST_PAGE"), "1"); + assert_string_equal(sb_trie_lookup(c, "LAST_PAGE"), "4"); + sb_trie_free(c); + sb_slist_free_full(s, free); + sb_slist_free_full(t, (sb_free_func_t) sb_trie_free); } static void test_source_parse_from_files_filter_by_page3(void **state) { - will_return(__wrap_bc_file_get_contents, "bola1.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola1.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 123\n" "DATE: 2001-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola2.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola2.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 456\n" "DATE: 2002-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola3.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola3.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 789\n" "DATE: 2003-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola4.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola4.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7891\n" "DATE: 2004-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola5.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola5.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7892\n" "DATE: 2005-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola6.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola6.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7893\n" "DATE: 2006-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola7.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola7.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7894\n" "DATE: 2007-02-03 04:05:06\n" "--------\n" "bola")); - bc_error_t *err = NULL; - bc_slist_t *s = NULL; - s = bc_slist_append(s, bc_strdup("bola1.txt")); - s = bc_slist_append(s, bc_strdup("bola2.txt")); - s = bc_slist_append(s, bc_strdup("bola3.txt")); - s = bc_slist_append(s, bc_strdup("bola4.txt")); - s = bc_slist_append(s, bc_strdup("bola5.txt")); - s = bc_slist_append(s, bc_strdup("bola6.txt")); - s = bc_slist_append(s, bc_strdup("bola7.txt")); - bc_trie_t *c = bc_trie_new(free); - bc_trie_insert(c, "FILTER_PAGE", bc_strdup("1")); - bc_trie_insert(c, "FILTER_PER_PAGE", bc_strdup("2")); - bc_slist_t *t = blogc_source_parse_from_files(c, s, &err); + sb_error_t *err = NULL; + sb_slist_t *s = NULL; + s = sb_slist_append(s, sb_strdup("bola1.txt")); + s = sb_slist_append(s, sb_strdup("bola2.txt")); + s = sb_slist_append(s, sb_strdup("bola3.txt")); + s = sb_slist_append(s, sb_strdup("bola4.txt")); + s = sb_slist_append(s, sb_strdup("bola5.txt")); + s = sb_slist_append(s, sb_strdup("bola6.txt")); + s = sb_slist_append(s, sb_strdup("bola7.txt")); + sb_trie_t *c = sb_trie_new(free); + sb_trie_insert(c, "FILTER_PAGE", sb_strdup("1")); + sb_trie_insert(c, "FILTER_PER_PAGE", sb_strdup("2")); + sb_slist_t *t = blogc_source_parse_from_files(c, s, &err); assert_null(err); assert_non_null(t); - assert_int_equal(bc_slist_length(t), 2); // it is enough, no need to look at the items - assert_int_equal(bc_trie_size(c), 10); - assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola1"); - assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola2"); - assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "FILTER_PAGE"), "1"); - assert_string_equal(bc_trie_lookup(c, "FILTER_PER_PAGE"), "2"); - assert_string_equal(bc_trie_lookup(c, "CURRENT_PAGE"), "1"); - assert_string_equal(bc_trie_lookup(c, "NEXT_PAGE"), "2"); - assert_string_equal(bc_trie_lookup(c, "FIRST_PAGE"), "1"); - assert_string_equal(bc_trie_lookup(c, "LAST_PAGE"), "4"); - bc_trie_free(c); - bc_slist_free_full(s, free); - bc_slist_free_full(t, (bc_free_func_t) bc_trie_free); + assert_int_equal(sb_slist_length(t), 2); // it is enough, no need to look at the items + assert_int_equal(sb_trie_size(c), 10); + assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola1"); + assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola2"); + assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "FILTER_PAGE"), "1"); + assert_string_equal(sb_trie_lookup(c, "FILTER_PER_PAGE"), "2"); + assert_string_equal(sb_trie_lookup(c, "CURRENT_PAGE"), "1"); + assert_string_equal(sb_trie_lookup(c, "NEXT_PAGE"), "2"); + assert_string_equal(sb_trie_lookup(c, "FIRST_PAGE"), "1"); + assert_string_equal(sb_trie_lookup(c, "LAST_PAGE"), "4"); + sb_trie_free(c); + sb_slist_free_full(s, free); + sb_slist_free_full(t, (sb_free_func_t) sb_trie_free); } static void test_source_parse_from_files_filter_sort_and_by_page_and_tag(void **state) { - will_return(__wrap_bc_file_get_contents, "bola1.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola1.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 123\n" "DATE: 2001-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola2.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola2.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 456\n" "DATE: 2002-02-03 04:05:06\n" "TAGS: chunda\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola3.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola3.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 789\n" "DATE: 2003-02-03 04:05:06\n" "TAGS: chunda bola\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola4.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola4.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7891\n" "DATE: 2004-02-03 04:05:06\n" "TAGS: bola\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola5.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola5.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7892\n" "DATE: 2005-02-03 04:05:06\n" "TAGS: chunda\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola6.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola6.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7893\n" "DATE: 2006-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola7.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola7.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7894\n" "DATE: 2007-02-03 04:05:06\n" "TAGS: yay chunda\n" "--------\n" "bola")); - bc_error_t *err = NULL; - bc_slist_t *s = NULL; - s = bc_slist_append(s, bc_strdup("bola1.txt")); - s = bc_slist_append(s, bc_strdup("bola2.txt")); - s = bc_slist_append(s, bc_strdup("bola3.txt")); - s = bc_slist_append(s, bc_strdup("bola4.txt")); - s = bc_slist_append(s, bc_strdup("bola5.txt")); - s = bc_slist_append(s, bc_strdup("bola6.txt")); - s = bc_slist_append(s, bc_strdup("bola7.txt")); - bc_trie_t *c = bc_trie_new(free); - bc_trie_insert(c, "FILTER_SORT", bc_strdup("1")); - bc_trie_insert(c, "FILTER_TAG", bc_strdup("chunda")); - bc_trie_insert(c, "FILTER_PAGE", bc_strdup("2")); - bc_trie_insert(c, "FILTER_PER_PAGE", bc_strdup("2")); - bc_slist_t *t = blogc_source_parse_from_files(c, s, &err); + sb_error_t *err = NULL; + sb_slist_t *s = NULL; + s = sb_slist_append(s, sb_strdup("bola1.txt")); + s = sb_slist_append(s, sb_strdup("bola2.txt")); + s = sb_slist_append(s, sb_strdup("bola3.txt")); + s = sb_slist_append(s, sb_strdup("bola4.txt")); + s = sb_slist_append(s, sb_strdup("bola5.txt")); + s = sb_slist_append(s, sb_strdup("bola6.txt")); + s = sb_slist_append(s, sb_strdup("bola7.txt")); + sb_trie_t *c = sb_trie_new(free); + sb_trie_insert(c, "FILTER_SORT", sb_strdup("1")); + sb_trie_insert(c, "FILTER_TAG", sb_strdup("chunda")); + sb_trie_insert(c, "FILTER_PAGE", sb_strdup("2")); + sb_trie_insert(c, "FILTER_PER_PAGE", sb_strdup("2")); + sb_slist_t *t = blogc_source_parse_from_files(c, s, &err); assert_null(err); assert_non_null(t); - assert_int_equal(bc_slist_length(t), 2); // it is enough, no need to look at the items - assert_int_equal(bc_trie_size(c), 12); - assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola3"); - assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola2"); - assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2003-02-03 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "FILTER_SORT"), "1"); - assert_string_equal(bc_trie_lookup(c, "FILTER_TAG"), "chunda"); - assert_string_equal(bc_trie_lookup(c, "FILTER_PAGE"), "2"); - assert_string_equal(bc_trie_lookup(c, "FILTER_PER_PAGE"), "2"); - assert_string_equal(bc_trie_lookup(c, "CURRENT_PAGE"), "2"); - assert_string_equal(bc_trie_lookup(c, "PREVIOUS_PAGE"), "1"); - assert_string_equal(bc_trie_lookup(c, "FIRST_PAGE"), "1"); - assert_string_equal(bc_trie_lookup(c, "LAST_PAGE"), "2"); - bc_trie_free(c); - bc_slist_free_full(s, free); - bc_slist_free_full(t, (bc_free_func_t) bc_trie_free); + assert_int_equal(sb_slist_length(t), 2); // it is enough, no need to look at the items + assert_int_equal(sb_trie_size(c), 12); + assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola3"); + assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola2"); + assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2003-02-03 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "FILTER_SORT"), "1"); + assert_string_equal(sb_trie_lookup(c, "FILTER_TAG"), "chunda"); + assert_string_equal(sb_trie_lookup(c, "FILTER_PAGE"), "2"); + assert_string_equal(sb_trie_lookup(c, "FILTER_PER_PAGE"), "2"); + assert_string_equal(sb_trie_lookup(c, "CURRENT_PAGE"), "2"); + assert_string_equal(sb_trie_lookup(c, "PREVIOUS_PAGE"), "1"); + assert_string_equal(sb_trie_lookup(c, "FIRST_PAGE"), "1"); + assert_string_equal(sb_trie_lookup(c, "LAST_PAGE"), "2"); + sb_trie_free(c); + sb_slist_free_full(s, free); + sb_slist_free_full(t, (sb_free_func_t) sb_trie_free); } static void test_source_parse_from_files_filter_by_page_invalid(void **state) { - will_return(__wrap_bc_file_get_contents, "bola1.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola1.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 123\n" "DATE: 2001-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola2.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola2.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 456\n" "DATE: 2002-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola3.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola3.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 789\n" "DATE: 2003-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola4.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola4.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7891\n" "DATE: 2004-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola5.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola5.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7892\n" "DATE: 2005-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola6.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola6.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7893\n" "DATE: 2006-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola7.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola7.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7894\n" "DATE: 2007-02-03 04:05:06\n" "--------\n" "bola")); - bc_error_t *err = NULL; - bc_slist_t *s = NULL; - s = bc_slist_append(s, bc_strdup("bola1.txt")); - s = bc_slist_append(s, bc_strdup("bola2.txt")); - s = bc_slist_append(s, bc_strdup("bola3.txt")); - s = bc_slist_append(s, bc_strdup("bola4.txt")); - s = bc_slist_append(s, bc_strdup("bola5.txt")); - s = bc_slist_append(s, bc_strdup("bola6.txt")); - s = bc_slist_append(s, bc_strdup("bola7.txt")); - bc_trie_t *c = bc_trie_new(free); - bc_trie_insert(c, "FILTER_PAGE", bc_strdup("-1")); - bc_trie_insert(c, "FILTER_PER_PAGE", bc_strdup("2")); - bc_slist_t *t = blogc_source_parse_from_files(c, s, &err); + sb_error_t *err = NULL; + sb_slist_t *s = NULL; + s = sb_slist_append(s, sb_strdup("bola1.txt")); + s = sb_slist_append(s, sb_strdup("bola2.txt")); + s = sb_slist_append(s, sb_strdup("bola3.txt")); + s = sb_slist_append(s, sb_strdup("bola4.txt")); + s = sb_slist_append(s, sb_strdup("bola5.txt")); + s = sb_slist_append(s, sb_strdup("bola6.txt")); + s = sb_slist_append(s, sb_strdup("bola7.txt")); + sb_trie_t *c = sb_trie_new(free); + sb_trie_insert(c, "FILTER_PAGE", sb_strdup("-1")); + sb_trie_insert(c, "FILTER_PER_PAGE", sb_strdup("2")); + sb_slist_t *t = blogc_source_parse_from_files(c, s, &err); assert_null(err); assert_non_null(t); - assert_int_equal(bc_slist_length(t), 2); // it is enough, no need to look at the items - assert_int_equal(bc_trie_size(c), 10); - assert_string_equal(bc_trie_lookup(c, "FILENAME_FIRST"), "bola1"); - assert_string_equal(bc_trie_lookup(c, "FILENAME_LAST"), "bola2"); - assert_string_equal(bc_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06"); - assert_string_equal(bc_trie_lookup(c, "FILTER_PAGE"), "-1"); - assert_string_equal(bc_trie_lookup(c, "FILTER_PER_PAGE"), "2"); - assert_string_equal(bc_trie_lookup(c, "CURRENT_PAGE"), "1"); - assert_string_equal(bc_trie_lookup(c, "NEXT_PAGE"), "2"); - assert_string_equal(bc_trie_lookup(c, "FIRST_PAGE"), "1"); - assert_string_equal(bc_trie_lookup(c, "LAST_PAGE"), "4"); - bc_trie_free(c); - bc_slist_free_full(s, free); - bc_slist_free_full(t, (bc_free_func_t) bc_trie_free); + assert_int_equal(sb_slist_length(t), 2); // it is enough, no need to look at the items + assert_int_equal(sb_trie_size(c), 10); + assert_string_equal(sb_trie_lookup(c, "FILENAME_FIRST"), "bola1"); + assert_string_equal(sb_trie_lookup(c, "FILENAME_LAST"), "bola2"); + assert_string_equal(sb_trie_lookup(c, "DATE_FIRST"), "2001-02-03 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "DATE_LAST"), "2002-02-03 04:05:06"); + assert_string_equal(sb_trie_lookup(c, "FILTER_PAGE"), "-1"); + assert_string_equal(sb_trie_lookup(c, "FILTER_PER_PAGE"), "2"); + assert_string_equal(sb_trie_lookup(c, "CURRENT_PAGE"), "1"); + assert_string_equal(sb_trie_lookup(c, "NEXT_PAGE"), "2"); + assert_string_equal(sb_trie_lookup(c, "FIRST_PAGE"), "1"); + assert_string_equal(sb_trie_lookup(c, "LAST_PAGE"), "4"); + sb_trie_free(c); + sb_slist_free_full(s, free); + sb_slist_free_full(t, (sb_free_func_t) sb_trie_free); } static void test_source_parse_from_files_filter_by_page_invalid2(void **state) { - will_return(__wrap_bc_file_get_contents, "bola1.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola1.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 123\n" "DATE: 2001-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola2.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola2.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 456\n" "DATE: 2002-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola3.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola3.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 789\n" "DATE: 2003-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola4.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola4.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7891\n" "DATE: 2004-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola5.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola5.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7892\n" "DATE: 2005-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola6.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola6.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7893\n" "DATE: 2006-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola7.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola7.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 7894\n" "DATE: 2007-02-03 04:05:06\n" "--------\n" "bola")); - bc_error_t *err = NULL; - bc_slist_t *s = NULL; - s = bc_slist_append(s, bc_strdup("bola1.txt")); - s = bc_slist_append(s, bc_strdup("bola2.txt")); - s = bc_slist_append(s, bc_strdup("bola3.txt")); - s = bc_slist_append(s, bc_strdup("bola4.txt")); - s = bc_slist_append(s, bc_strdup("bola5.txt")); - s = bc_slist_append(s, bc_strdup("bola6.txt")); - s = bc_slist_append(s, bc_strdup("bola7.txt")); - bc_trie_t *c = bc_trie_new(free); - bc_trie_insert(c, "FILTER_PAGE", bc_strdup("5")); - bc_trie_insert(c, "FILTER_PER_PAGE", bc_strdup("2")); - bc_slist_t *t = blogc_source_parse_from_files(c, s, &err); + sb_error_t *err = NULL; + sb_slist_t *s = NULL; + s = sb_slist_append(s, sb_strdup("bola1.txt")); + s = sb_slist_append(s, sb_strdup("bola2.txt")); + s = sb_slist_append(s, sb_strdup("bola3.txt")); + s = sb_slist_append(s, sb_strdup("bola4.txt")); + s = sb_slist_append(s, sb_strdup("bola5.txt")); + s = sb_slist_append(s, sb_strdup("bola6.txt")); + s = sb_slist_append(s, sb_strdup("bola7.txt")); + sb_trie_t *c = sb_trie_new(free); + sb_trie_insert(c, "FILTER_PAGE", sb_strdup("5")); + sb_trie_insert(c, "FILTER_PER_PAGE", sb_strdup("2")); + sb_slist_t *t = blogc_source_parse_from_files(c, s, &err); assert_null(err); assert_null(t); - bc_trie_free(c); - bc_slist_free_full(s, free); + sb_trie_free(c); + sb_slist_free_full(s, free); } static void test_source_parse_from_files_without_all_dates(void **state) { - will_return(__wrap_bc_file_get_contents, "bola1.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola1.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 123\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola2.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola2.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 456\n" "DATE: 2002-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola3.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola3.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 789\n" "DATE: 2003-02-03 04:05:06\n" "--------\n" "bola")); - bc_error_t *err = NULL; - bc_slist_t *s = NULL; - s = bc_slist_append(s, bc_strdup("bola1.txt")); - s = bc_slist_append(s, bc_strdup("bola2.txt")); - s = bc_slist_append(s, bc_strdup("bola3.txt")); - bc_trie_t *c = bc_trie_new(free); - bc_slist_t *t = blogc_source_parse_from_files(c, s, &err); + sb_error_t *err = NULL; + sb_slist_t *s = NULL; + s = sb_slist_append(s, sb_strdup("bola1.txt")); + s = sb_slist_append(s, sb_strdup("bola2.txt")); + s = sb_slist_append(s, sb_strdup("bola3.txt")); + sb_trie_t *c = sb_trie_new(free); + sb_slist_t *t = blogc_source_parse_from_files(c, s, &err); assert_null(t); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_LOADER); - assert_string_equal(err->msg, - "'DATE' variable provided for at least one source file, but not for " + assert_string_equal(sb_error_to_string(err), + "loader: 'DATE' variable provided for at least one source file, but not for " "all source files. It must be provided for all files."); - bc_error_free(err); - assert_int_equal(bc_trie_size(c), 0); - bc_trie_free(c); - bc_slist_free_full(s, free); + sb_error_free(err); + assert_int_equal(sb_trie_size(c), 0); + sb_trie_free(c); + sb_slist_free_full(s, free); } static void test_source_parse_from_files_filter_sort_without_all_dates(void **state) { - will_return(__wrap_bc_file_get_contents, "bola1.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola1.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 123\n" "DATE: 2002-02-03 04:05:06\n" "--------\n" "bola")); - will_return(__wrap_bc_file_get_contents, "bola2.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola2.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 456\n" "--------\n" "bola")); - bc_error_t *err = NULL; - bc_slist_t *s = NULL; - s = bc_slist_append(s, bc_strdup("bola1.txt")); - s = bc_slist_append(s, bc_strdup("bola2.txt")); - s = bc_slist_append(s, bc_strdup("bola3.txt")); - bc_trie_t *c = bc_trie_new(free); - bc_trie_insert(c, "FILTER_SORT", bc_strdup("1")); - bc_slist_t *t = blogc_source_parse_from_files(c, s, &err); + sb_error_t *err = NULL; + sb_slist_t *s = NULL; + s = sb_slist_append(s, sb_strdup("bola1.txt")); + s = sb_slist_append(s, sb_strdup("bola2.txt")); + s = sb_slist_append(s, sb_strdup("bola3.txt")); + sb_trie_t *c = sb_trie_new(free); + sb_trie_insert(c, "FILTER_SORT", sb_strdup("1")); + sb_slist_t *t = blogc_source_parse_from_files(c, s, &err); assert_null(t); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_LOADER); - assert_string_equal(err->msg, - "'FILTER_SORT' requires that 'DATE' variable is set for every source " + assert_string_equal(sb_error_to_string(err), + "loader: 'FILTER_SORT' requires that 'DATE' variable is set for every source " "file: bola2.txt"); - bc_error_free(err); - assert_int_equal(bc_trie_size(c), 1); - assert_string_equal(bc_trie_lookup(c, "FILTER_SORT"), "1"); - bc_trie_free(c); - bc_slist_free_full(s, free); + sb_error_free(err); + assert_int_equal(sb_trie_size(c), 1); + assert_string_equal(sb_trie_lookup(c, "FILTER_SORT"), "1"); + sb_trie_free(c); + sb_slist_free_full(s, free); } static void test_source_parse_from_files_filter_sort_with_wrong_date(void **state) { - will_return(__wrap_bc_file_get_contents, "bola1.txt"); - will_return(__wrap_bc_file_get_contents, bc_strdup( + will_return(__wrap_sb_file_get_contents_utf8, "bola1.txt"); + will_return(__wrap_sb_file_get_contents_utf8, sb_strdup( "ASD: 123\n" "DATE: 2002-02-03 04:05:ab\n" "--------\n" "bola")); - bc_error_t *err = NULL; - bc_slist_t *s = NULL; - s = bc_slist_append(s, bc_strdup("bola1.txt")); - s = bc_slist_append(s, bc_strdup("bola2.txt")); - s = bc_slist_append(s, bc_strdup("bola3.txt")); - bc_trie_t *c = bc_trie_new(free); - bc_trie_insert(c, "FILTER_SORT", bc_strdup("1")); - bc_slist_t *t = blogc_source_parse_from_files(c, s, &err); + sb_error_t *err = NULL; + sb_slist_t *s = NULL; + s = sb_slist_append(s, sb_strdup("bola1.txt")); + s = sb_slist_append(s, sb_strdup("bola2.txt")); + s = sb_slist_append(s, sb_strdup("bola3.txt")); + sb_trie_t *c = sb_trie_new(free); + sb_trie_insert(c, "FILTER_SORT", sb_strdup("1")); + sb_slist_t *t = blogc_source_parse_from_files(c, s, &err); assert_null(t); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_LOADER); - assert_string_equal(err->msg, - "An error occurred while parsing 'DATE' variable: bola1.txt\n\nInvalid " - "first digit of seconds. Found 'a', must be integer >= 0 and <= 6."); - bc_error_free(err); - assert_int_equal(bc_trie_size(c), 1); - assert_string_equal(bc_trie_lookup(c, "FILTER_SORT"), "1"); - bc_trie_free(c); - bc_slist_free_full(s, free); + assert_string_equal(sb_error_to_string(err), + "loader: An error occurred while parsing 'DATE' variable: bola1.txt\n> " + "datetime: Invalid first digit of seconds. Found 'a', must be integer " + ">= 0 and <= 6."); + sb_error_free(err); + assert_int_equal(sb_trie_size(c), 1); + assert_string_equal(sb_trie_lookup(c, "FILTER_SORT"), "1"); + sb_trie_free(c); + sb_slist_free_full(s, free); } static void test_source_parse_from_files_null(void **state) { - bc_error_t *err = NULL; - bc_slist_t *s = NULL; - bc_trie_t *c = bc_trie_new(free); - bc_slist_t *t = blogc_source_parse_from_files(c, s, &err); + sb_error_t *err = NULL; + sb_slist_t *s = NULL; + sb_trie_t *c = sb_trie_new(free); + sb_slist_t *t = blogc_source_parse_from_files(c, s, &err); assert_null(err); assert_null(t); - assert_int_equal(bc_slist_length(t), 0); - assert_int_equal(bc_trie_size(c), 0); - bc_trie_free(c); - bc_slist_free_full(s, free); - bc_slist_free_full(t, (bc_free_func_t) bc_trie_free); + assert_int_equal(sb_slist_length(t), 0); + assert_int_equal(sb_trie_size(c), 0); + sb_trie_free(c); + sb_slist_free_full(s, free); + sb_slist_free_full(t, (sb_free_func_t) sb_trie_free); } diff --git a/tests/blogc/check_renderer.c b/tests/blogc/check_renderer.c index 479c239..63678b8 100644 --- a/tests/blogc/check_renderer.c +++ b/tests/blogc/check_renderer.c @@ -13,14 +13,14 @@ #include <stdbool.h> #include <stdlib.h> #include <string.h> -#include "../../src/common/error.h" -#include "../../src/common/utils.h" +#include <squareball.h> + #include "../../src/blogc/renderer.h" #include "../../src/blogc/source-parser.h" #include "../../src/blogc/template-parser.h" -static bc_slist_t* +static sb_slist_t* create_sources(size_t count) { const char *s[] = { @@ -44,13 +44,13 @@ create_sources(size_t count) "ahahahahahahahaha3", }; assert_false(count > 3); - bc_error_t *err = NULL; - bc_slist_t *l = NULL; + sb_error_t *err = NULL; + sb_slist_t *l = NULL; for (size_t i = 0; i < count; i++) { - l = bc_slist_append(l, blogc_source_parse(s[i], strlen(s[i]), &err)); + l = sb_slist_append(l, blogc_source_parse(s[i], strlen(s[i]), &err)); assert_null(err); } - assert_int_equal(bc_slist_length(l), count); + assert_int_equal(sb_slist_length(l), count); return l; } @@ -76,11 +76,11 @@ test_render_entry(void **state) "{% if GUDA <= \"zxc\" %}LOL4{% endif %}\n" "{% foreach TAGS %}lol {{ FOREACH_ITEM }} haha {% endforeach %}\n" "{% foreach TAGS_ASD %}yay{% endforeach %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -102,7 +102,7 @@ test_render_entry(void **state) "lol foo haha lol bar haha lol baz haha \n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -123,11 +123,11 @@ test_render_listing(void **state) "{% foreach TAGS %}lol {{ FOREACH_ITEM }} haha {% endforeach %}\n" "{% foreach TAGS_ASD %}yay{% endforeach %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(3); + sb_slist_t *s = create_sources(3); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, true); assert_string_equal(out, @@ -151,7 +151,7 @@ test_render_listing(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -173,11 +173,11 @@ test_render_listing_entry(void **state) "{% foreach TAGS %}lol {{ FOREACH_ITEM }} haha {% endforeach %}\n" "{% foreach TAGS_ASD %}yay{% endforeach %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(3); + sb_slist_t *s = create_sources(3); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, true); assert_string_equal(out, @@ -202,7 +202,7 @@ test_render_listing_entry(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -225,17 +225,17 @@ test_render_listing_entry2(void **state) "{% foreach TAGS %}lol {{ FOREACH_ITEM }} haha {% endforeach %}\n" "{% foreach TAGS_ASD %}yay{% endforeach %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(3); + sb_slist_t *s = create_sources(3); assert_non_null(s); - bc_trie_t *entry = bc_trie_new(free); - bc_trie_insert(entry, "FUUUUU", bc_strdup("XD")); - bc_trie_insert(entry, "BAAAAA", bc_strdup(":p")); + sb_trie_t *entry = sb_trie_new(free); + sb_trie_insert(entry, "FUUUUU", sb_strdup("XD")); + sb_trie_insert(entry, "BAAAAA", sb_strdup(":p")); char *out = blogc_render(l, s, entry, NULL, true); - bc_trie_free(entry); + sb_trie_free(entry); assert_string_equal(out, "foo\n" "fuuu\n" @@ -259,7 +259,7 @@ test_render_listing_entry2(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -279,8 +279,8 @@ test_render_listing_empty(void **state) "bola: {% ifdef BOLA %}{{ BOLA }}{% endif %}\n" "{% foreach TAGS %}lol {{ FOREACH_ITEM }} haha {% endforeach %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); char *out = blogc_render(l, NULL, NULL, NULL, true); @@ -306,11 +306,11 @@ test_render_ifdef(void **state) "{% endif %}\n" "{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -318,7 +318,7 @@ test_render_ifdef(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -335,11 +335,11 @@ test_render_ifdef2(void **state) "{% endif %}\n" "{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -349,7 +349,7 @@ test_render_ifdef2(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -366,11 +366,11 @@ test_render_ifdef3(void **state) "{% endif %}\n" "{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -382,7 +382,7 @@ test_render_ifdef3(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -401,11 +401,11 @@ test_render_ifdef4(void **state) "{% else %}lol\n" "{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -418,7 +418,7 @@ test_render_ifdef4(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -437,11 +437,11 @@ test_render_ifdef5(void **state) "{% else %}lol\n" "{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -452,7 +452,7 @@ test_render_ifdef5(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -471,11 +471,11 @@ test_render_ifdef6(void **state) "{% else %}lol\n" "{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -484,7 +484,7 @@ test_render_ifdef6(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -504,11 +504,11 @@ test_render_ifdef7(void **state) "{% endif %}\n" "{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -522,7 +522,7 @@ test_render_ifdef7(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -540,11 +540,11 @@ test_render_ifndef(void **state) "{% endif %}\n" "{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -557,7 +557,7 @@ test_render_ifndef(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -576,11 +576,11 @@ test_render_if_eq(void **state) "{% endif %}\n" "{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -594,7 +594,7 @@ test_render_if_eq(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -613,11 +613,11 @@ test_render_if_neq(void **state) "{% endif %}\n" "{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -631,7 +631,7 @@ test_render_if_neq(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -650,11 +650,11 @@ test_render_if_lt(void **state) "{% endif %}\n" "{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -668,7 +668,7 @@ test_render_if_lt(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -687,11 +687,11 @@ test_render_if_gt(void **state) "{% endif %}\n" "{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -705,7 +705,7 @@ test_render_if_gt(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -726,11 +726,11 @@ test_render_if_lt_eq(void **state) "{% endif %}\n" "{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -746,7 +746,7 @@ test_render_if_lt_eq(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -767,11 +767,11 @@ test_render_if_gt_eq(void **state) "{% endif %}\n" "{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -787,7 +787,7 @@ test_render_if_gt_eq(void **state) "\n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -799,11 +799,11 @@ test_render_foreach(void **state) "{% block entry %}\n" "{% foreach TAGS %} {{ FOREACH_ITEM }} {% endforeach %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -811,7 +811,7 @@ test_render_foreach(void **state) " foo bar baz \n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -824,11 +824,11 @@ test_render_foreach_if(void **state) "{% foreach TAGS %} {% if FOREACH_ITEM == \"bar\" %}{{ FOREACH_ITEM }}" "{% endif %} {% endforeach %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -836,7 +836,7 @@ test_render_foreach_if(void **state) " bar \n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -850,11 +850,11 @@ test_render_foreach_if_else(void **state) "{% else %}{{ FOREACH_ITEM }}" "{% endif %} {% endforeach %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); char *out = blogc_render(l, s, NULL, NULL, false); assert_string_equal(out, @@ -862,7 +862,7 @@ test_render_foreach_if_else(void **state) "foo yay baz \n" "\n"); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -881,22 +881,22 @@ test_render_outside_block(void **state) "{% ifdef GUDA %}bola{% endif %}\n" "{{ BOLA }}\n" "{% ifndef CHUNDA %}lol{% endif %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); - bc_trie_t *c = bc_trie_new(free); - bc_trie_insert(c, "GUDA", bc_strdup("asd")); + sb_trie_t *c = sb_trie_new(free); + sb_trie_insert(c, "GUDA", sb_strdup("asd")); char *out = blogc_render(l, s, NULL, c, false); assert_string_equal(out, "bola\n" "\n" "lol\n"); - bc_trie_free(c); + sb_trie_free(c); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -914,15 +914,15 @@ test_render_prefer_local_variable(void **state) "{% endif %}\n" "{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); - bc_trie_t *c = bc_trie_new(free); - bc_trie_insert(c, "GUDA", bc_strdup("hehe")); - bc_trie_insert(c, "LOL", bc_strdup("hmm")); + sb_trie_t *c = sb_trie_new(free); + sb_trie_insert(c, "GUDA", sb_strdup("hehe")); + sb_trie_insert(c, "LOL", sb_strdup("hmm")); char *out = blogc_render(l, s, NULL, c, false); assert_string_equal(out, "\n" @@ -933,9 +933,9 @@ test_render_prefer_local_variable(void **state) "\n" "\n" "\n"); - bc_trie_free(c); + sb_trie_free(c); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -950,13 +950,13 @@ test_render_respect_variable_scope(void **state) "{% ifdef LOL %}{{ LOL }}{% endif %}\n" "{% ifdef BOLA %}{{ BOLA }}{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = create_sources(1); + sb_slist_t *s = create_sources(1); assert_non_null(s); - bc_trie_t *c = bc_trie_new(free); + sb_trie_t *c = sb_trie_new(free); char *out = blogc_render(l, s, NULL, c, false); assert_string_equal(out, "\n" @@ -965,9 +965,9 @@ test_render_respect_variable_scope(void **state) "\n" "asd\n" "\n"); - bc_trie_free(c); + sb_trie_free(c); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -982,23 +982,23 @@ test_render_ifcount_bug(void **state) "{% ifdef ASD %}ASD{% endif %}\n" "{% endif %}\n" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *l = blogc_template_parse(str, strlen(str), &err); + sb_error_t *err = NULL; + sb_slist_t *l = blogc_template_parse(str, strlen(str), &err); assert_non_null(l); assert_null(err); - bc_slist_t *s = NULL; - s = bc_slist_append(s, bc_trie_new(free)); - bc_trie_insert(s->data, "TITLE", bc_strdup("bola")); - bc_trie_t *c = bc_trie_new(free); + sb_slist_t *s = NULL; + s = sb_slist_append(s, sb_trie_new(free)); + sb_trie_insert(s->data, "TITLE", sb_strdup("bola")); + sb_trie_t *c = sb_trie_new(free); char *out = blogc_render(l, s, NULL, c, false); assert_string_equal(out, "\n" "<h3>bola</h3>\n" "\n" "\n"); - bc_trie_free(c); + sb_trie_free(c); blogc_template_free_ast(l); - bc_slist_free_full(s, (bc_free_func_t) bc_trie_free); + sb_slist_free_full(s, (sb_free_func_t) sb_trie_free); free(out); } @@ -1006,100 +1006,100 @@ test_render_ifcount_bug(void **state) static void test_get_variable(void **state) { - bc_trie_t *g = bc_trie_new(free); - bc_trie_insert(g, "NAME", bc_strdup("bola")); - bc_trie_insert(g, "TITLE", bc_strdup("bola2")); - bc_trie_t *l = bc_trie_new(free); - bc_trie_insert(l, "NAME", bc_strdup("chunda")); - bc_trie_insert(l, "TITLE", bc_strdup("chunda2")); + sb_trie_t *g = sb_trie_new(free); + sb_trie_insert(g, "NAME", sb_strdup("bola")); + sb_trie_insert(g, "TITLE", sb_strdup("bola2")); + sb_trie_t *l = sb_trie_new(free); + sb_trie_insert(l, "NAME", sb_strdup("chunda")); + sb_trie_insert(l, "TITLE", sb_strdup("chunda2")); assert_string_equal(blogc_get_variable("NAME", g, l), "chunda"); assert_string_equal(blogc_get_variable("TITLE", g, l), "chunda2"); assert_null(blogc_get_variable("BOLA", g, l)); - bc_trie_free(g); - bc_trie_free(l); + sb_trie_free(g); + sb_trie_free(l); } static void test_get_variable_only_local(void **state) { - bc_trie_t *g = NULL; - bc_trie_t *l = bc_trie_new(free); - bc_trie_insert(l, "NAME", bc_strdup("chunda")); - bc_trie_insert(l, "TITLE", bc_strdup("chunda2")); + sb_trie_t *g = NULL; + sb_trie_t *l = sb_trie_new(free); + sb_trie_insert(l, "NAME", sb_strdup("chunda")); + sb_trie_insert(l, "TITLE", sb_strdup("chunda2")); assert_string_equal(blogc_get_variable("NAME", g, l), "chunda"); assert_string_equal(blogc_get_variable("TITLE", g, l), "chunda2"); assert_null(blogc_get_variable("BOLA", g, l)); - bc_trie_free(l); + sb_trie_free(l); } static void test_get_variable_only_global(void **state) { - bc_trie_t *g = bc_trie_new(free); - bc_trie_insert(g, "NAME", bc_strdup("bola")); - bc_trie_insert(g, "TITLE", bc_strdup("bola2")); - bc_trie_t *l = NULL; + sb_trie_t *g = sb_trie_new(free); + sb_trie_insert(g, "NAME", sb_strdup("bola")); + sb_trie_insert(g, "TITLE", sb_strdup("bola2")); + sb_trie_t *l = NULL; assert_string_equal(blogc_get_variable("NAME", g, l), "bola"); assert_string_equal(blogc_get_variable("TITLE", g, l), "bola2"); assert_null(blogc_get_variable("BOLA", g, l)); - bc_trie_free(g); + sb_trie_free(g); } static void test_format_date(void **state) { - bc_trie_t *g = bc_trie_new(free); - bc_trie_insert(g, "DATE_FORMAT", bc_strdup("%H -- %M")); - bc_trie_t *l = bc_trie_new(free); - bc_trie_insert(l, "DATE_FORMAT", bc_strdup("%R")); + sb_trie_t *g = sb_trie_new(free); + sb_trie_insert(g, "DATE_FORMAT", sb_strdup("%H -- %M")); + sb_trie_t *l = sb_trie_new(free); + sb_trie_insert(l, "DATE_FORMAT", sb_strdup("%R")); char *date = blogc_format_date("2015-01-02 03:04:05", g, l); assert_string_equal(date, "03:04"); free(date); - bc_trie_free(g); - bc_trie_free(l); + sb_trie_free(g); + sb_trie_free(l); } static void test_format_date_with_global_format(void **state) { - bc_trie_t *g = bc_trie_new(free); - bc_trie_insert(g, "DATE_FORMAT", bc_strdup("%H -- %M")); - bc_trie_t *l = bc_trie_new(free); + sb_trie_t *g = sb_trie_new(free); + sb_trie_insert(g, "DATE_FORMAT", sb_strdup("%H -- %M")); + sb_trie_t *l = sb_trie_new(free); char *date = blogc_format_date("2015-01-02 03:04:05", g, l); assert_string_equal(date, "03 -- 04"); free(date); - bc_trie_free(g); - bc_trie_free(l); + sb_trie_free(g); + sb_trie_free(l); } static void test_format_date_without_format(void **state) { - bc_trie_t *g = bc_trie_new(free); - bc_trie_t *l = bc_trie_new(free); + sb_trie_t *g = sb_trie_new(free); + sb_trie_t *l = sb_trie_new(free); char *date = blogc_format_date("2015-01-02 03:04:05", g, l); assert_string_equal(date, "2015-01-02 03:04:05"); free(date); - bc_trie_free(g); - bc_trie_free(l); + sb_trie_free(g); + sb_trie_free(l); } static void test_format_date_without_date(void **state) { - bc_trie_t *g = bc_trie_new(free); - bc_trie_t *l = bc_trie_new(free); + sb_trie_t *g = sb_trie_new(free); + sb_trie_t *l = sb_trie_new(free); char *date = blogc_format_date(NULL, g, l); assert_null(date); free(date); - bc_trie_free(g); - bc_trie_free(l); + sb_trie_free(g); + sb_trie_free(l); } @@ -1107,13 +1107,13 @@ static void test_format_variable(void **state) { // FIXME: test warnings - bc_trie_t *g = bc_trie_new(free); - bc_trie_insert(g, "NAME", bc_strdup("bola")); - bc_trie_insert(g, "TITLE", bc_strdup("bola2")); - bc_trie_t *l = bc_trie_new(free); - bc_trie_insert(l, "NAME", bc_strdup("chunda")); - bc_trie_insert(l, "TITLE", bc_strdup("chunda2")); - bc_trie_insert(l, "SIZE", bc_strdup("1234567890987654321")); + sb_trie_t *g = sb_trie_new(free); + sb_trie_insert(g, "NAME", sb_strdup("bola")); + sb_trie_insert(g, "TITLE", sb_strdup("bola2")); + sb_trie_t *l = sb_trie_new(free); + sb_trie_insert(l, "NAME", sb_strdup("chunda")); + sb_trie_insert(l, "TITLE", sb_strdup("chunda2")); + sb_trie_insert(l, "SIZE", sb_strdup("1234567890987654321")); char *tmp = blogc_format_variable("NAME", g, l, NULL); assert_string_equal(tmp, "chunda"); free(tmp); @@ -1131,19 +1131,19 @@ test_format_variable(void **state) free(tmp); assert_null(blogc_format_variable("SIZE_", g, l, NULL)); assert_null(blogc_format_variable("BOLA", g, l, NULL)); - bc_trie_free(g); - bc_trie_free(l); + sb_trie_free(g); + sb_trie_free(l); } static void test_format_variable_with_date(void **state) { - bc_trie_t *g = bc_trie_new(free); - bc_trie_insert(g, "DATE", bc_strdup("2010-11-12 13:14:15")); - bc_trie_insert(g, "DATE_FORMAT", bc_strdup("%R")); - bc_trie_t *l = bc_trie_new(free); - bc_trie_insert(l, "DATE", bc_strdup("2011-12-13 14:15:16")); + sb_trie_t *g = sb_trie_new(free); + sb_trie_insert(g, "DATE", sb_strdup("2010-11-12 13:14:15")); + sb_trie_insert(g, "DATE_FORMAT", sb_strdup("%R")); + sb_trie_t *l = sb_trie_new(free); + sb_trie_insert(l, "DATE", sb_strdup("2011-12-13 14:15:16")); char *tmp = blogc_format_variable("DATE_FORMATTED", g, l, NULL); assert_string_equal(tmp, "14:15"); free(tmp); @@ -1153,18 +1153,18 @@ test_format_variable_with_date(void **state) tmp = blogc_format_variable("DATE_FORMATTED_10", g, l, NULL); assert_string_equal(tmp, "14:15"); free(tmp); - bc_trie_free(g); - bc_trie_free(l); + sb_trie_free(g); + sb_trie_free(l); } static void test_format_variable_foreach(void **state) { - bc_slist_t *l = NULL; - l = bc_slist_append(l, bc_strdup("asd")); - l = bc_slist_append(l, bc_strdup("qwe")); - l = bc_slist_append(l, bc_strdup("zxcvbn")); + sb_slist_t *l = NULL; + l = sb_slist_append(l, sb_strdup("asd")); + l = sb_slist_append(l, sb_strdup("qwe")); + l = sb_slist_append(l, sb_strdup("zxcvbn")); char *tmp = blogc_format_variable("FOREACH_ITEM", NULL, NULL, l->next); assert_string_equal(tmp, "qwe"); free(tmp); @@ -1176,7 +1176,7 @@ test_format_variable_foreach(void **state) l->next->next); assert_string_equal(tmp, "zxcvbn"); free(tmp); - bc_slist_free_full(l, free); + sb_slist_free_full(l, free); } @@ -1191,31 +1191,31 @@ test_format_variable_foreach_empty(void **state) static void test_split_list_variable(void **state) { - bc_trie_t *g = bc_trie_new(free); - bc_trie_insert(g, "TAGS", bc_strdup("asd lol hehe")); - bc_trie_t *l = bc_trie_new(free); - bc_trie_insert(l, "TAGS", bc_strdup("asd lol XD")); - bc_slist_t *tmp = blogc_split_list_variable("TAGS", g, l); + sb_trie_t *g = sb_trie_new(free); + sb_trie_insert(g, "TAGS", sb_strdup("asd lol hehe")); + sb_trie_t *l = sb_trie_new(free); + sb_trie_insert(l, "TAGS", sb_strdup("asd lol XD")); + sb_slist_t *tmp = blogc_split_list_variable("TAGS", g, l); assert_string_equal(tmp->data, "asd"); assert_string_equal(tmp->next->data, "lol"); assert_string_equal(tmp->next->next->data, "XD"); - bc_slist_free_full(tmp, free); - bc_trie_free(g); - bc_trie_free(l); + sb_slist_free_full(tmp, free); + sb_trie_free(g); + sb_trie_free(l); } static void test_split_list_variable_not_found(void **state) { - bc_trie_t *g = bc_trie_new(free); - bc_trie_insert(g, "TAGS", bc_strdup("asd lol hehe")); - bc_trie_t *l = bc_trie_new(free); - bc_trie_insert(l, "TAGS", bc_strdup("asd lol XD")); - bc_slist_t *tmp = blogc_split_list_variable("TAG", g, l); + sb_trie_t *g = sb_trie_new(free); + sb_trie_insert(g, "TAGS", sb_strdup("asd lol hehe")); + sb_trie_t *l = sb_trie_new(free); + sb_trie_insert(l, "TAGS", sb_strdup("asd lol XD")); + sb_slist_t *tmp = blogc_split_list_variable("TAG", g, l); assert_null(tmp); - bc_trie_free(g); - bc_trie_free(l); + sb_trie_free(g); + sb_trie_free(l); } diff --git a/tests/blogc/check_rusage.c b/tests/blogc/check_rusage.c index ff64297..7296c4d 100644 --- a/tests/blogc/check_rusage.c +++ b/tests/blogc/check_rusage.c @@ -15,7 +15,8 @@ #include <stdio.h> #include <sys/time.h> #include <sys/resource.h> -#include "../../src/common/utils.h" +#include <squareball.h> + #include "../../src/blogc/rusage.h" @@ -99,18 +100,18 @@ test_rusage_format_memory(void **state) static void test_rusage_inject(void **state) { - bc_trie_t *t = bc_trie_new(free); + sb_trie_t *t = sb_trie_new(free); will_return(__wrap_getrusage, -1); blogc_rusage_inject(t); - assert_int_equal(bc_trie_size(t), 0); + assert_int_equal(sb_trie_size(t), 0); will_return(__wrap_getrusage, 0); blogc_rusage_inject(t); - assert_int_equal(bc_trie_size(t), 2); - assert_string_equal(bc_trie_lookup(t, "BLOGC_RUSAGE_CPU_TIME"), "4.000s"); - assert_string_equal(bc_trie_lookup(t, "BLOGC_RUSAGE_MEMORY"), "10.010MB"); - bc_trie_free(t); + assert_int_equal(sb_trie_size(t), 2); + assert_string_equal(sb_trie_lookup(t, "BLOGC_RUSAGE_CPU_TIME"), "4.000s"); + assert_string_equal(sb_trie_lookup(t, "BLOGC_RUSAGE_MEMORY"), "10.010MB"); + sb_trie_free(t); } diff --git a/tests/blogc/check_source_parser.c b/tests/blogc/check_source_parser.c index f758522..5aa7a91 100644 --- a/tests/blogc/check_source_parser.c +++ b/tests/blogc/check_source_parser.c @@ -11,8 +11,8 @@ #include <setjmp.h> #include <cmocka.h> #include <string.h> -#include "../../src/common/error.h" -#include "../../src/common/utils.h" +#include <squareball.h> + #include "../../src/blogc/source-parser.h" @@ -26,26 +26,26 @@ test_source_parse(void **state) "# This is a test\n" "\n" "bola\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(err); assert_non_null(source); - assert_int_equal(bc_trie_size(source), 7); - assert_string_equal(bc_trie_lookup(source, "VAR1"), "asd asd"); - assert_string_equal(bc_trie_lookup(source, "VAR2"), "123chunda"); - assert_string_equal(bc_trie_lookup(source, "EXCERPT"), + assert_int_equal(sb_trie_size(source), 7); + assert_string_equal(sb_trie_lookup(source, "VAR1"), "asd asd"); + assert_string_equal(sb_trie_lookup(source, "VAR2"), "123chunda"); + assert_string_equal(sb_trie_lookup(source, "EXCERPT"), "<h1 id=\"this-is-a-test\">This is a test</h1>\n" "<p>bola</p>\n"); - assert_string_equal(bc_trie_lookup(source, "CONTENT"), + assert_string_equal(sb_trie_lookup(source, "CONTENT"), "<h1 id=\"this-is-a-test\">This is a test</h1>\n" "<p>bola</p>\n"); - assert_string_equal(bc_trie_lookup(source, "RAW_CONTENT"), + assert_string_equal(sb_trie_lookup(source, "RAW_CONTENT"), "# This is a test\n" "\n" "bola\n"); - assert_string_equal(bc_trie_lookup(source, "FIRST_HEADER"), "This is a test"); - assert_string_equal(bc_trie_lookup(source, "DESCRIPTION"), "bola"); - bc_trie_free(source); + assert_string_equal(sb_trie_lookup(source, "FIRST_HEADER"), "This is a test"); + assert_string_equal(sb_trie_lookup(source, "DESCRIPTION"), "bola"); + sb_trie_free(source); } @@ -59,26 +59,26 @@ test_source_parse_crlf(void **state) "# This is a test\r\n" "\r\n" "bola\r\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(err); assert_non_null(source); - assert_int_equal(bc_trie_size(source), 7); - assert_string_equal(bc_trie_lookup(source, "VAR1"), "asd asd"); - assert_string_equal(bc_trie_lookup(source, "VAR2"), "123chunda"); - assert_string_equal(bc_trie_lookup(source, "EXCERPT"), + assert_int_equal(sb_trie_size(source), 7); + assert_string_equal(sb_trie_lookup(source, "VAR1"), "asd asd"); + assert_string_equal(sb_trie_lookup(source, "VAR2"), "123chunda"); + assert_string_equal(sb_trie_lookup(source, "EXCERPT"), "<h1 id=\"this-is-a-test\">This is a test</h1>\r\n" "<p>bola</p>\r\n"); - assert_string_equal(bc_trie_lookup(source, "CONTENT"), + assert_string_equal(sb_trie_lookup(source, "CONTENT"), "<h1 id=\"this-is-a-test\">This is a test</h1>\r\n" "<p>bola</p>\r\n"); - assert_string_equal(bc_trie_lookup(source, "RAW_CONTENT"), + assert_string_equal(sb_trie_lookup(source, "RAW_CONTENT"), "# This is a test\r\n" "\r\n" "bola\r\n"); - assert_string_equal(bc_trie_lookup(source, "FIRST_HEADER"), "This is a test"); - assert_string_equal(bc_trie_lookup(source, "DESCRIPTION"), "bola"); - bc_trie_free(source); + assert_string_equal(sb_trie_lookup(source, "FIRST_HEADER"), "This is a test"); + assert_string_equal(sb_trie_lookup(source, "DESCRIPTION"), "bola"); + sb_trie_free(source); } @@ -94,26 +94,26 @@ test_source_parse_with_spaces(void **state) "# This is a test\n" "\n" "bola\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(err); assert_non_null(source); - assert_int_equal(bc_trie_size(source), 7); - assert_string_equal(bc_trie_lookup(source, "VAR1"), "chunda"); - assert_string_equal(bc_trie_lookup(source, "BOLA"), "guda"); - assert_string_equal(bc_trie_lookup(source, "EXCERPT"), + assert_int_equal(sb_trie_size(source), 7); + assert_string_equal(sb_trie_lookup(source, "VAR1"), "chunda"); + assert_string_equal(sb_trie_lookup(source, "BOLA"), "guda"); + assert_string_equal(sb_trie_lookup(source, "EXCERPT"), "<h1 id=\"this-is-a-test\">This is a test</h1>\n" "<p>bola</p>\n"); - assert_string_equal(bc_trie_lookup(source, "CONTENT"), + assert_string_equal(sb_trie_lookup(source, "CONTENT"), "<h1 id=\"this-is-a-test\">This is a test</h1>\n" "<p>bola</p>\n"); - assert_string_equal(bc_trie_lookup(source, "RAW_CONTENT"), + assert_string_equal(sb_trie_lookup(source, "RAW_CONTENT"), "# This is a test\n" "\n" "bola\n"); - assert_string_equal(bc_trie_lookup(source, "FIRST_HEADER"), "This is a test"); - assert_string_equal(bc_trie_lookup(source, "DESCRIPTION"), "bola"); - bc_trie_free(source); + assert_string_equal(sb_trie_lookup(source, "FIRST_HEADER"), "This is a test"); + assert_string_equal(sb_trie_lookup(source, "DESCRIPTION"), "bola"); + sb_trie_free(source); } @@ -132,22 +132,22 @@ test_source_parse_with_excerpt(void **state) "\n" "guda\n" "yay"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(err); assert_non_null(source); - assert_int_equal(bc_trie_size(source), 7); - assert_string_equal(bc_trie_lookup(source, "VAR1"), "asd asd"); - assert_string_equal(bc_trie_lookup(source, "VAR2"), "123chunda"); - assert_string_equal(bc_trie_lookup(source, "EXCERPT"), + assert_int_equal(sb_trie_size(source), 7); + assert_string_equal(sb_trie_lookup(source, "VAR1"), "asd asd"); + assert_string_equal(sb_trie_lookup(source, "VAR2"), "123chunda"); + assert_string_equal(sb_trie_lookup(source, "EXCERPT"), "<h1 id=\"this-is-a-test\">This is a test</h1>\n" "<p>bola</p>\n"); - assert_string_equal(bc_trie_lookup(source, "CONTENT"), + assert_string_equal(sb_trie_lookup(source, "CONTENT"), "<h1 id=\"this-is-a-test\">This is a test</h1>\n" "<p>bola</p>\n" "<p>guda\n" "yay</p>\n"); - assert_string_equal(bc_trie_lookup(source, "RAW_CONTENT"), + assert_string_equal(sb_trie_lookup(source, "RAW_CONTENT"), "# This is a test\n" "\n" "bola\n" @@ -156,9 +156,9 @@ test_source_parse_with_excerpt(void **state) "\n" "guda\n" "yay"); - assert_string_equal(bc_trie_lookup(source, "FIRST_HEADER"), "This is a test"); - assert_string_equal(bc_trie_lookup(source, "DESCRIPTION"), "bola"); - bc_trie_free(source); + assert_string_equal(sb_trie_lookup(source, "FIRST_HEADER"), "This is a test"); + assert_string_equal(sb_trie_lookup(source, "DESCRIPTION"), "bola"); + sb_trie_free(source); } @@ -173,26 +173,26 @@ test_source_parse_with_first_header(void **state) "# This is a test\n" "\n" "bola\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(err); assert_non_null(source); - assert_int_equal(bc_trie_size(source), 7); - assert_string_equal(bc_trie_lookup(source, "VAR1"), "asd asd"); - assert_string_equal(bc_trie_lookup(source, "VAR2"), "123chunda"); - assert_string_equal(bc_trie_lookup(source, "EXCERPT"), + assert_int_equal(sb_trie_size(source), 7); + assert_string_equal(sb_trie_lookup(source, "VAR1"), "asd asd"); + assert_string_equal(sb_trie_lookup(source, "VAR2"), "123chunda"); + assert_string_equal(sb_trie_lookup(source, "EXCERPT"), "<h1 id=\"this-is-a-test\">This is a test</h1>\n" "<p>bola</p>\n"); - assert_string_equal(bc_trie_lookup(source, "CONTENT"), + assert_string_equal(sb_trie_lookup(source, "CONTENT"), "<h1 id=\"this-is-a-test\">This is a test</h1>\n" "<p>bola</p>\n"); - assert_string_equal(bc_trie_lookup(source, "RAW_CONTENT"), + assert_string_equal(sb_trie_lookup(source, "RAW_CONTENT"), "# This is a test\n" "\n" "bola\n"); - assert_string_equal(bc_trie_lookup(source, "FIRST_HEADER"), "THIS IS CHUNDA!"); - assert_string_equal(bc_trie_lookup(source, "DESCRIPTION"), "bola"); - bc_trie_free(source); + assert_string_equal(sb_trie_lookup(source, "FIRST_HEADER"), "THIS IS CHUNDA!"); + assert_string_equal(sb_trie_lookup(source, "DESCRIPTION"), "bola"); + sb_trie_free(source); } @@ -207,26 +207,26 @@ test_source_parse_with_description(void **state) "# This is a test\n" "\n" "bola\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(err); assert_non_null(source); - assert_int_equal(bc_trie_size(source), 7); - assert_string_equal(bc_trie_lookup(source, "VAR1"), "asd asd"); - assert_string_equal(bc_trie_lookup(source, "VAR2"), "123chunda"); - assert_string_equal(bc_trie_lookup(source, "EXCERPT"), + assert_int_equal(sb_trie_size(source), 7); + assert_string_equal(sb_trie_lookup(source, "VAR1"), "asd asd"); + assert_string_equal(sb_trie_lookup(source, "VAR2"), "123chunda"); + assert_string_equal(sb_trie_lookup(source, "EXCERPT"), "<h1 id=\"this-is-a-test\">This is a test</h1>\n" "<p>bola</p>\n"); - assert_string_equal(bc_trie_lookup(source, "CONTENT"), + assert_string_equal(sb_trie_lookup(source, "CONTENT"), "<h1 id=\"this-is-a-test\">This is a test</h1>\n" "<p>bola</p>\n"); - assert_string_equal(bc_trie_lookup(source, "RAW_CONTENT"), + assert_string_equal(sb_trie_lookup(source, "RAW_CONTENT"), "# This is a test\n" "\n" "bola\n"); - assert_string_equal(bc_trie_lookup(source, "FIRST_HEADER"), "This is a test"); - assert_string_equal(bc_trie_lookup(source, "DESCRIPTION"), "huehuehuebrbr"); - bc_trie_free(source); + assert_string_equal(sb_trie_lookup(source, "FIRST_HEADER"), "This is a test"); + assert_string_equal(sb_trie_lookup(source, "DESCRIPTION"), "huehuehuebrbr"); + sb_trie_free(source); } @@ -234,14 +234,13 @@ static void test_source_parse_config_empty(void **state) { const char *a = ""; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(source); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, "Your source file is empty."); - bc_error_free(err); - bc_trie_free(source); + assert_string_equal(sb_error_to_string(err), "source: Your source file is empty."); + sb_error_free(err); + sb_trie_free(source); } @@ -249,15 +248,14 @@ static void test_source_parse_config_invalid_key(void **state) { const char *a = "bola: guda"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "Can't find a configuration key or the content separator.\n" + assert_string_equal(sb_error_to_string(err), + "source: Can't find a configuration key or the content separator.\n" "Error occurred near line 1, position 1: bola: guda"); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } @@ -265,15 +263,14 @@ static void test_source_parse_config_no_key(void **state) { const char *a = "BOLa"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "Invalid configuration key.\n" + assert_string_equal(sb_error_to_string(err), + "source: Invalid configuration key.\n" "Error occurred near line 1, position 4: BOLa"); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } @@ -281,15 +278,14 @@ static void test_source_parse_config_no_key2(void **state) { const char *a = "BOLA"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "Your last configuration key is missing ':' and the value\n" + assert_string_equal(sb_error_to_string(err), + "source: Your last configuration key is missing ':' and the value\n" "Error occurred near line 1, position 5: BOLA"); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } @@ -298,12 +294,12 @@ test_source_parse_config_no_value(void **state) { // this is a special case, not an error const char *a = "BOLA:\r\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_non_null(source); assert_null(err); - assert_string_equal(bc_trie_lookup(source, "BOLA"), ""); - bc_trie_free(source); + assert_string_equal(sb_trie_lookup(source, "BOLA"), ""); + sb_trie_free(source); } @@ -311,16 +307,15 @@ static void test_source_parse_config_no_value2(void **state) { const char *a = "BOLA:"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(source); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "Configuration value not provided for 'BOLA'.\n" + assert_string_equal(sb_error_to_string(err), + "source: Configuration value not provided for 'BOLA'.\n" "Error occurred near line 1, position 6: BOLA:"); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } @@ -328,16 +323,15 @@ static void test_source_parse_config_reserved_name(void **state) { const char *a = "FILENAME: asd\r\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(source); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "'FILENAME' variable is forbidden in source files. It will be set " + assert_string_equal(sb_error_to_string(err), + "source: 'FILENAME' variable is forbidden in source files. It will be set " "for you by the compiler."); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } @@ -345,16 +339,15 @@ static void test_source_parse_config_reserved_name2(void **state) { const char *a = "CONTENT: asd\r\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(source); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "'CONTENT' variable is forbidden in source files. It will be set " + assert_string_equal(sb_error_to_string(err), + "source: 'CONTENT' variable is forbidden in source files. It will be set " "for you by the compiler."); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } @@ -362,16 +355,15 @@ static void test_source_parse_config_reserved_name3(void **state) { const char *a = "DATE_FORMATTED: asd\r\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(source); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "'DATE_FORMATTED' variable is forbidden in source files. It will be set " + assert_string_equal(sb_error_to_string(err), + "source: 'DATE_FORMATTED' variable is forbidden in source files. It will be set " "for you by the compiler."); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } @@ -379,16 +371,15 @@ static void test_source_parse_config_reserved_name4(void **state) { const char *a = "DATE_FIRST_FORMATTED: asd\r\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(source); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "'DATE_FIRST_FORMATTED' variable is forbidden in source files. It will be set " + assert_string_equal(sb_error_to_string(err), + "source: 'DATE_FIRST_FORMATTED' variable is forbidden in source files. It will be set " "for you by the compiler."); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } @@ -396,16 +387,15 @@ static void test_source_parse_config_reserved_name5(void **state) { const char *a = "DATE_LAST_FORMATTED: asd\r\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(source); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "'DATE_LAST_FORMATTED' variable is forbidden in source files. It will be set " + assert_string_equal(sb_error_to_string(err), + "source: 'DATE_LAST_FORMATTED' variable is forbidden in source files. It will be set " "for you by the compiler."); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } @@ -413,16 +403,15 @@ static void test_source_parse_config_reserved_name6(void **state) { const char *a = "PAGE_FIRST: asd\r\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(source); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "'PAGE_FIRST' variable is forbidden in source files. It will be set " + assert_string_equal(sb_error_to_string(err), + "source: 'PAGE_FIRST' variable is forbidden in source files. It will be set " "for you by the compiler."); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } @@ -430,16 +419,15 @@ static void test_source_parse_config_reserved_name7(void **state) { const char *a = "PAGE_PREVIOUS: asd\r\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(source); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "'PAGE_PREVIOUS' variable is forbidden in source files. It will be set " + assert_string_equal(sb_error_to_string(err), + "source: 'PAGE_PREVIOUS' variable is forbidden in source files. It will be set " "for you by the compiler."); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } @@ -447,16 +435,15 @@ static void test_source_parse_config_reserved_name8(void **state) { const char *a = "PAGE_CURRENT: asd\r\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(source); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "'PAGE_CURRENT' variable is forbidden in source files. It will be set " + assert_string_equal(sb_error_to_string(err), + "source: 'PAGE_CURRENT' variable is forbidden in source files. It will be set " "for you by the compiler."); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } @@ -464,16 +451,15 @@ static void test_source_parse_config_reserved_name9(void **state) { const char *a = "PAGE_NEXT: asd\r\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(source); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "'PAGE_NEXT' variable is forbidden in source files. It will be set " + assert_string_equal(sb_error_to_string(err), + "source: 'PAGE_NEXT' variable is forbidden in source files. It will be set " "for you by the compiler."); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } @@ -481,16 +467,15 @@ static void test_source_parse_config_reserved_name10(void **state) { const char *a = "PAGE_LAST: asd\r\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(source); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "'PAGE_LAST' variable is forbidden in source files. It will be set " + assert_string_equal(sb_error_to_string(err), + "source: 'PAGE_LAST' variable is forbidden in source files. It will be set " "for you by the compiler."); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } @@ -498,16 +483,15 @@ static void test_source_parse_config_reserved_name11(void **state) { const char *a = "BLOGC_VERSION: 1.0\r\n"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(source); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "'BLOGC_VERSION' variable is forbidden in source files. It will be set " + assert_string_equal(sb_error_to_string(err), + "source: 'BLOGC_VERSION' variable is forbidden in source files. It will be set " "for you by the compiler."); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } @@ -515,16 +499,15 @@ static void test_source_parse_config_value_no_line_ending(void **state) { const char *a = "BOLA: asd"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(source); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "No line ending after the configuration value for 'BOLA'.\n" + assert_string_equal(sb_error_to_string(err), + "source: No line ending after the configuration value for 'BOLA'.\n" "Error occurred near line 1, position 10: BOLA: asd"); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } @@ -532,16 +515,15 @@ static void test_source_parse_invalid_separator(void **state) { const char *a = "BOLA: asd\n---#"; - bc_error_t *err = NULL; - bc_trie_t *source = blogc_source_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_trie_t *source = blogc_source_parse(a, strlen(a), &err); assert_null(source); assert_non_null(err); - assert_int_equal(err->type, BLOGC_ERROR_SOURCE_PARSER); - assert_string_equal(err->msg, - "Invalid content separator. Must be more than one '-' characters.\n" + assert_string_equal(sb_error_to_string(err), + "source: Invalid content separator. Must be more than one '-' characters.\n" "Error occurred near line 2, position 4: ---#"); - bc_error_free(err); - bc_trie_free(source); + sb_error_free(err); + sb_trie_free(source); } diff --git a/tests/blogc/check_sysinfo.c b/tests/blogc/check_sysinfo.c index 01b81b9..13fcb1e 100644 --- a/tests/blogc/check_sysinfo.c +++ b/tests/blogc/check_sysinfo.c @@ -13,8 +13,8 @@ #include <stdlib.h> #include <string.h> #include <stdio.h> -#include "../../src/common/error.h" -#include "../../src/common/utils.h" +#include <squareball.h> + #include "../../src/blogc/sysinfo.h" #ifdef HAVE_SYSINFO_DATETIME @@ -73,10 +73,9 @@ __wrap_gmtime(const time_t *timep) char* -__wrap_bc_file_get_contents(const char *path, bool utf8, size_t *len, bc_error_t **err) +__wrap_sb_file_get_contents(const char *path, size_t *len, sb_error_t **err) { assert_string_equal(path, "/proc/1/cgroup"); - assert_false(utf8); char *rv = mock_type(char*); *len = strlen(rv); return rv; @@ -103,19 +102,19 @@ test_sysinfo_get_hostname(void **state) static void test_sysinfo_inject_hostname(void **state) { - bc_trie_t *t = bc_trie_new(free); + sb_trie_t *t = sb_trie_new(free); will_return(__wrap_gethostname, NULL); will_return(__wrap_gethostname, -1); blogc_sysinfo_inject_hostname(t); - assert_int_equal(bc_trie_size(t), 0); + assert_int_equal(sb_trie_size(t), 0); will_return(__wrap_gethostname, "bola"); will_return(__wrap_gethostname, 0); blogc_sysinfo_inject_hostname(t); - assert_int_equal(bc_trie_size(t), 1); - assert_string_equal(bc_trie_lookup(t, "BLOGC_SYSINFO_HOSTNAME"), "bola"); - bc_trie_free(t); + assert_int_equal(sb_trie_size(t), 1); + assert_string_equal(sb_trie_lookup(t, "BLOGC_SYSINFO_HOSTNAME"), "bola"); + sb_trie_free(t); } @@ -137,17 +136,17 @@ test_sysinfo_get_username(void **state) static void test_sysinfo_inject_username(void **state) { - bc_trie_t *t = bc_trie_new(free); + sb_trie_t *t = sb_trie_new(free); will_return(__wrap_getenv, NULL); blogc_sysinfo_inject_username(t); - assert_int_equal(bc_trie_size(t), 0); + assert_int_equal(sb_trie_size(t), 0); will_return(__wrap_getenv, "bola"); blogc_sysinfo_inject_username(t); - assert_int_equal(bc_trie_size(t), 1); - assert_string_equal(bc_trie_lookup(t, "BLOGC_SYSINFO_USERNAME"), "bola"); - bc_trie_free(t); + assert_int_equal(sb_trie_size(t), 1); + assert_string_equal(sb_trie_lookup(t, "BLOGC_SYSINFO_USERNAME"), "bola"); + sb_trie_free(t); } @@ -173,21 +172,21 @@ test_sysinfo_get_datetime(void **state) static void test_sysinfo_inject_datetime(void **state) { - bc_trie_t *t = bc_trie_new(free); + sb_trie_t *t = sb_trie_new(free); will_return(__wrap_time, -1); blogc_sysinfo_inject_datetime(t); - assert_int_equal(bc_trie_size(t), 0); + assert_int_equal(sb_trie_size(t), 0); will_return(__wrap_time, 2); blogc_sysinfo_inject_datetime(t); - assert_int_equal(bc_trie_size(t), 0); + assert_int_equal(sb_trie_size(t), 0); will_return(__wrap_time, 1); blogc_sysinfo_inject_datetime(t); - assert_int_equal(bc_trie_size(t), 1); - assert_string_equal(bc_trie_lookup(t, "BLOGC_SYSINFO_DATETIME"), "1906-06-04 03:02:01"); - bc_trie_free(t); + assert_int_equal(sb_trie_size(t), 1); + assert_string_equal(sb_trie_lookup(t, "BLOGC_SYSINFO_DATETIME"), "1906-06-04 03:02:01"); + sb_trie_free(t); } @@ -196,7 +195,7 @@ test_sysinfo_get_inside_docker(void **state) { // the "positive" case was already tested in check_funcvars. this is done // this way because this function caches the results in a global variable. - will_return(__wrap_bc_file_get_contents, bc_strdup("bola")); + will_return(__wrap_sb_file_get_contents, sb_strdup("bola")); assert_false(blogc_sysinfo_get_inside_docker()); } diff --git a/tests/blogc/check_sysinfo2.c b/tests/blogc/check_sysinfo2.c index 2bb4273..9a70059 100644 --- a/tests/blogc/check_sysinfo2.c +++ b/tests/blogc/check_sysinfo2.c @@ -13,8 +13,8 @@ #include <stdlib.h> #include <string.h> #include <stdio.h> -#include "../../src/common/error.h" -#include "../../src/common/utils.h" +#include <squareball.h> + #include "../../src/blogc/sysinfo.h" // this test exists because we can't test more than one return values for @@ -23,11 +23,10 @@ char* -__wrap_bc_file_get_contents(const char *path, bool utf8, size_t *len, bc_error_t **err) +__wrap_sb_file_get_contents(const char *path, size_t *len, sb_error_t **err) { assert_string_equal(path, "/proc/1/cgroup"); - assert_false(utf8); - *err = bc_error_new(0, ""); + *err = sb_strerror_new(""); return NULL; } diff --git a/tests/blogc/check_template_parser.c b/tests/blogc/check_template_parser.c index 15ef7c4..e3a3bd0 100644 --- a/tests/blogc/check_template_parser.c +++ b/tests/blogc/check_template_parser.c @@ -11,13 +11,13 @@ #include <setjmp.h> #include <cmocka.h> #include <string.h> -#include "../../src/common/error.h" -#include "../../src/common/utils.h" +#include <squareball.h> + #include "../../src/blogc/template-parser.h" static void -blogc_assert_template_node(bc_slist_t *l, const char *data, +blogc_assert_template_node(sb_slist_t *l, const char *data, const blogc_template_node_type_t type) { blogc_template_node_t *node = l->data; @@ -30,7 +30,7 @@ blogc_assert_template_node(bc_slist_t *l, const char *data, static void -blogc_assert_template_if_node(bc_slist_t *l, const char *variable, +blogc_assert_template_if_node(sb_slist_t *l, const char *variable, blogc_template_operator_t operator, const char *operand) { blogc_template_node_t *node = l->data; @@ -60,8 +60,8 @@ test_template_parse(void **state) "{%- foreach BOLA %}hahaha{% endforeach %}\n" "{% if BOLA == \"1\\\"0\" %}aee{% else %}fffuuuuuuu{% endif %}\n" "{% block listing_entry %}lol{% endblock %}"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_null(err); assert_non_null(ast); blogc_assert_template_node(ast, "Test", @@ -78,7 +78,7 @@ test_template_parse(void **state) BLOGC_TEMPLATE_NODE_ENDIF); blogc_assert_template_node(ast->next->next->next->next->next->next, "\n", BLOGC_TEMPLATE_NODE_CONTENT); - bc_slist_t *tmp = ast->next->next->next->next->next->next->next; + sb_slist_t *tmp = ast->next->next->next->next->next->next->next; blogc_assert_template_node(tmp, "BOLA", BLOGC_TEMPLATE_NODE_IFNDEF); blogc_assert_template_node(tmp->next, "\nbolao", BLOGC_TEMPLATE_NODE_CONTENT); blogc_assert_template_node(tmp->next->next, NULL, BLOGC_TEMPLATE_NODE_ENDIF); @@ -149,8 +149,8 @@ test_template_parse_crlf(void **state) "{% block listing_once %}asd{% endblock %}\r\n" "{%- foreach BOLA %}hahaha{% endforeach %}\r\n" "{% if BOLA == \"1\\\"0\" %}aee{% else %}fffuuuuuuu{% endif %}"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_null(err); assert_non_null(ast); blogc_assert_template_node(ast, "Test", @@ -167,7 +167,7 @@ test_template_parse_crlf(void **state) BLOGC_TEMPLATE_NODE_ENDIF); blogc_assert_template_node(ast->next->next->next->next->next->next, "\r\n", BLOGC_TEMPLATE_NODE_CONTENT); - bc_slist_t *tmp = ast->next->next->next->next->next->next->next; + sb_slist_t *tmp = ast->next->next->next->next->next->next->next; blogc_assert_template_node(tmp, "BOLA", BLOGC_TEMPLATE_NODE_IFNDEF); blogc_assert_template_node(tmp->next, "\r\nbolao", BLOGC_TEMPLATE_NODE_CONTENT); blogc_assert_template_node(tmp->next->next, NULL, BLOGC_TEMPLATE_NODE_ENDIF); @@ -241,8 +241,8 @@ test_template_parse_html(void **state) " {% block listing_once %}</ul>{% endblock %}\n" " </body>\n" "</html>\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_null(err); assert_non_null(ast); blogc_assert_template_node(ast, "<html>\n <head>\n ", @@ -261,7 +261,7 @@ test_template_parse_html(void **state) "\n ", BLOGC_TEMPLATE_NODE_CONTENT); blogc_assert_template_node(ast->next->next->next->next->next->next->next, "listing_once", BLOGC_TEMPLATE_NODE_BLOCK); - bc_slist_t *tmp = ast->next->next->next->next->next->next->next->next; + sb_slist_t *tmp = ast->next->next->next->next->next->next->next->next; blogc_assert_template_node(tmp, "\n <title>My cool blog - Main page</title>\n ", BLOGC_TEMPLATE_NODE_CONTENT); @@ -370,8 +370,8 @@ test_template_parse_html_whitespace(void **state) " {%\tblock\tlisting_once\t%}</ul>{%\nendblock\n%}\n" " </body>\n" "</html>\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_null(err); assert_non_null(ast); blogc_assert_template_node(ast, "<html>\n <head>\n ", @@ -390,7 +390,7 @@ test_template_parse_html_whitespace(void **state) "\n ", BLOGC_TEMPLATE_NODE_CONTENT); blogc_assert_template_node(ast->next->next->next->next->next->next->next, "listing_once", BLOGC_TEMPLATE_NODE_BLOCK); - bc_slist_t *tmp = ast->next->next->next->next->next->next->next->next; + sb_slist_t *tmp = ast->next->next->next->next->next->next->next->next; blogc_assert_template_node(tmp, "\n <title>My cool blog - Main page</title>\n ", BLOGC_TEMPLATE_NODE_CONTENT); @@ -480,8 +480,8 @@ test_template_parse_ifdef_and_var_outside_block(void **state) "{% ifdef GUDA %}bola{% endif %}\n" "{{ BOLA }}\n" "{% ifndef CHUNDA %}{{ CHUNDA }}{% endif %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_null(err); assert_non_null(ast); blogc_assert_template_node(ast, "GUDA", BLOGC_TEMPLATE_NODE_IFDEF); @@ -497,7 +497,7 @@ test_template_parse_ifdef_and_var_outside_block(void **state) BLOGC_TEMPLATE_NODE_CONTENT); blogc_assert_template_node(ast->next->next->next->next->next->next, "CHUNDA", BLOGC_TEMPLATE_NODE_IFNDEF); - bc_slist_t *tmp = ast->next->next->next->next->next->next->next; + sb_slist_t *tmp = ast->next->next->next->next->next->next->next; blogc_assert_template_node(tmp, "CHUNDA", BLOGC_TEMPLATE_NODE_VARIABLE); blogc_assert_template_node(tmp->next, NULL, BLOGC_TEMPLATE_NODE_ENDIF); blogc_assert_template_node(tmp->next->next, "\n", @@ -527,8 +527,8 @@ test_template_parse_nested_else(void **state) "bnm\n" "{% endif %}\n" "{% endif %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_null(err); assert_non_null(ast); blogc_assert_template_node(ast, "GUDA", BLOGC_TEMPLATE_NODE_IFDEF); @@ -544,7 +544,7 @@ test_template_parse_nested_else(void **state) "CHUNDA", BLOGC_TEMPLATE_NODE_IFDEF); blogc_assert_template_node(ast->next->next->next->next->next->next->next, "\nqwe\n", BLOGC_TEMPLATE_NODE_CONTENT); - bc_slist_t *tmp = ast->next->next->next->next->next->next->next->next; + sb_slist_t *tmp = ast->next->next->next->next->next->next->next->next; blogc_assert_template_node(tmp, NULL, BLOGC_TEMPLATE_NODE_ELSE); blogc_assert_template_node(tmp->next, "\nrty\n", BLOGC_TEMPLATE_NODE_CONTENT); blogc_assert_template_node(tmp->next->next, NULL, @@ -579,35 +579,32 @@ static void test_template_parse_invalid_block_start(void **state) { const char *a = "{% ASD %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid statement syntax. Must begin with lowercase letter.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid statement syntax. Must begin with lowercase letter.\n" "Error occurred near line 1, position 4: {% ASD %}"); - bc_error_free(err); + sb_error_free(err); a = "{%-- block entry %}\n"; err = NULL; ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid statement syntax. Duplicated whitespace cleaner before statement.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid statement syntax. Duplicated whitespace cleaner before statement.\n" "Error occurred near line 1, position 4: {%-- block entry %}"); - bc_error_free(err); + sb_error_free(err); a = "{% block entry --%}\n"; err = NULL; ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid statement syntax. Duplicated whitespace cleaner after statement.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid statement syntax. Duplicated whitespace cleaner after statement.\n" "Error occurred near line 1, position 17: {% block entry --%}"); - bc_error_free(err); + sb_error_free(err); } @@ -617,15 +614,14 @@ test_template_parse_invalid_block_nested(void **state) const char *a = "{% block entry %}\n" "{% block listing %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Blocks can't be nested.\n" + assert_string_equal(sb_error_to_string(err), + "template: Blocks can't be nested.\n" "Error occurred near line 2, position 9: {% block listing %}"); - bc_error_free(err); + sb_error_free(err); } @@ -635,15 +631,14 @@ test_template_parse_invalid_foreach_nested(void **state) const char *a = "{% foreach A %}\n" "{% foreach B %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "'foreach' statements can't be nested.\n" + assert_string_equal(sb_error_to_string(err), + "template: 'foreach' statements can't be nested.\n" "Error occurred near line 2, position 11: {% foreach B %}"); - bc_error_free(err); + sb_error_free(err); } @@ -651,15 +646,14 @@ static void test_template_parse_invalid_block_not_open(void **state) { const char *a = "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "'endblock' statement without an open 'block' statement.\n" + assert_string_equal(sb_error_to_string(err), + "template: 'endblock' statement without an open 'block' statement.\n" "Error occurred near line 1, position 12: {% endblock %}"); - bc_error_free(err); + sb_error_free(err); } @@ -667,16 +661,15 @@ static void test_template_parse_invalid_endif_not_open(void **state) { const char *a = "{% block listing %}{% endif %}{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "'endif' statement without an open 'if', 'ifdef' or 'ifndef' statement.\n" + assert_string_equal(sb_error_to_string(err), + "template: 'endif' statement without an open 'if', 'ifdef' or 'ifndef' statement.\n" "Error occurred near line 1, position 28: " "{% block listing %}{% endif %}{% endblock %}"); - bc_error_free(err); + sb_error_free(err); } @@ -684,16 +677,15 @@ static void test_template_parse_invalid_endif_not_open_inside_block(void **state) { const char *a = "{% ifdef BOLA %}{% block listing %}{% endif %}{% endblock %}"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "'endif' statement without an open 'if', 'ifdef' or 'ifndef' statement.\n" + assert_string_equal(sb_error_to_string(err), + "template: 'endif' statement without an open 'if', 'ifdef' or 'ifndef' statement.\n" "Error occurred near line 1, position 44: {% ifdef BOLA %}{% block " "listing %}{% endif %}{% endblock %}"); - bc_error_free(err); + sb_error_free(err); } @@ -701,16 +693,15 @@ static void test_template_parse_invalid_else_not_open_inside_block(void **state) { const char *a = "{% ifdef BOLA %}{% block listing %}{% else %}{% endif %}{% endblock %}"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "'else' statement without an open 'if', 'ifdef' or 'ifndef' statement.\n" + assert_string_equal(sb_error_to_string(err), + "template: 'else' statement without an open 'if', 'ifdef' or 'ifndef' statement.\n" "Error occurred near line 1, position 43: {% ifdef BOLA %}" "{% block listing %}{% else %}{% endif %}{% endblock %}"); - bc_error_free(err); + sb_error_free(err); } @@ -718,15 +709,14 @@ static void test_template_parse_invalid_endforeach_not_open(void **state) { const char *a = "{% endforeach %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "'endforeach' statement without an open 'foreach' statement.\n" + assert_string_equal(sb_error_to_string(err), + "template: 'endforeach' statement without an open 'foreach' statement.\n" "Error occurred near line 1, position 14: {% endforeach %}"); - bc_error_free(err); + sb_error_free(err); } @@ -735,16 +725,15 @@ test_template_parse_invalid_endforeach_not_open_inside_block(void **state) { const char *a = "{% foreach TAGS %}{% block entry %}{% endforeach %}" "{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "'endforeach' statement without an open 'foreach' statement.\n" + assert_string_equal(sb_error_to_string(err), + "template: 'endforeach' statement without an open 'foreach' statement.\n" "Error occurred near line 1, position 49: {% foreach TAGS %}" "{% block entry %}{% endforeach %}{% endblock %}"); - bc_error_free(err); + sb_error_free(err); } @@ -753,16 +742,15 @@ test_template_parse_invalid_endforeach_not_open_inside_block2(void **state) { const char *a = "{% block entry %}{% foreach TAGS %}" "{% endforeach %}{% endforeach %}{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "'endforeach' statement without an open 'foreach' statement.\n" + assert_string_equal(sb_error_to_string(err), + "template: 'endforeach' statement without an open 'foreach' statement.\n" "Error occurred near line 1, position 65: {% block entry %}" "{% foreach TAGS %}{% endforeach %}{% endforeach %}{% endblock %}"); - bc_error_free(err); + sb_error_free(err); } @@ -771,14 +759,13 @@ test_template_parse_invalid_endforeach_not_closed_inside_block(void **state) { const char *a = "{% block entry %}{% foreach TAGS %}{% endblock %}" "{% endforeach %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "An open 'foreach' statement was not closed inside a 'entry' block!"); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "template: An open 'foreach' statement was not closed inside a 'entry' block!"); + sb_error_free(err); } @@ -787,14 +774,13 @@ test_template_parse_invalid_endforeach_not_closed_inside_block2(void **state) { const char *a = "{% block entry %}{% foreach TAGS %}{% endforeach %}" "{% foreach TAGS %}{% endblock %}{% endforeach %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "An open 'foreach' statement was not closed inside a 'entry' block!"); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "template: An open 'foreach' statement was not closed inside a 'entry' block!"); + sb_error_free(err); } @@ -802,16 +788,15 @@ static void test_template_parse_invalid_block_name(void **state) { const char *a = "{% chunda %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid statement type: Allowed types are: 'block', 'endblock', 'if', " + assert_string_equal(sb_error_to_string(err), + "template: Invalid statement type: Allowed types are: 'block', 'endblock', 'if', " "'ifdef', 'ifndef', 'else', 'endif', 'foreach' and 'endforeach'.\n" "Error occurred near line 1, position 10: {% chunda %}"); - bc_error_free(err); + sb_error_free(err); } @@ -819,15 +804,14 @@ static void test_template_parse_invalid_block_type_start(void **state) { const char *a = "{% block ENTRY %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid block syntax. Must begin with lowercase letter.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid block syntax. Must begin with lowercase letter.\n" "Error occurred near line 1, position 10: {% block ENTRY %}"); - bc_error_free(err); + sb_error_free(err); } @@ -835,16 +819,15 @@ static void test_template_parse_invalid_block_type(void **state) { const char *a = "{% block chunda %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid block type. Allowed types are: 'entry', 'listing', 'listing_once' " + assert_string_equal(sb_error_to_string(err), + "template: Invalid block type. Allowed types are: 'entry', 'listing', 'listing_once' " "and 'listing_entry'.\n" "Error occurred near line 1, position 16: {% block chunda %}"); - bc_error_free(err); + sb_error_free(err); } @@ -852,16 +835,15 @@ static void test_template_parse_invalid_ifdef_start(void **state) { const char *a = "{% block entry %}{% ifdef guda %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid variable name. Must begin with uppercase letter.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid variable name. Must begin with uppercase letter.\n" "Error occurred near line 1, position 27: " "{% block entry %}{% ifdef guda %}"); - bc_error_free(err); + sb_error_free(err); } @@ -869,16 +851,15 @@ static void test_template_parse_invalid_foreach_start(void **state) { const char *a = "{% block entry %}{% foreach guda %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid foreach variable name. Must begin with uppercase letter.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid foreach variable name. Must begin with uppercase letter.\n" "Error occurred near line 1, position 29: " "{% block entry %}{% foreach guda %}"); - bc_error_free(err); + sb_error_free(err); } @@ -886,16 +867,15 @@ static void test_template_parse_invalid_ifdef_variable(void **state) { const char *a = "{% block entry %}{% ifdef BoLA %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid variable name. Must be uppercase letter, number or '_'.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid variable name. Must be uppercase letter, number or '_'.\n" "Error occurred near line 1, position 28: " "{% block entry %}{% ifdef BoLA %}"); - bc_error_free(err); + sb_error_free(err); } @@ -903,16 +883,15 @@ static void test_template_parse_invalid_ifdef_variable2(void **state) { const char *a = "{% block entry %}{% ifdef 0123 %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid variable name. Must begin with uppercase letter.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid variable name. Must begin with uppercase letter.\n" "Error occurred near line 1, position 27: " "{% block entry %}{% ifdef 0123 %}"); - bc_error_free(err); + sb_error_free(err); } @@ -920,16 +899,15 @@ static void test_template_parse_invalid_foreach_variable(void **state) { const char *a = "{% block entry %}{% foreach BoLA %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid foreach variable name. Must be uppercase letter, number or '_'.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid foreach variable name. Must be uppercase letter, number or '_'.\n" "Error occurred near line 1, position 30: " "{% block entry %}{% foreach BoLA %}"); - bc_error_free(err); + sb_error_free(err); } @@ -937,16 +915,15 @@ static void test_template_parse_invalid_foreach_variable2(void **state) { const char *a = "{% block entry %}{% foreach 0123 %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid foreach variable name. Must begin with uppercase letter.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid foreach variable name. Must begin with uppercase letter.\n" "Error occurred near line 1, position 29: {% block entry %}" "{% foreach 0123 %}"); - bc_error_free(err); + sb_error_free(err); } @@ -954,16 +931,15 @@ static void test_template_parse_invalid_if_operator(void **state) { const char *a = "{% block entry %}{% if BOLA = \"asd\" %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid 'if' operator. Must be '<', '>', '<=', '>=', '==' or '!='.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid 'if' operator. Must be '<', '>', '<=', '>=', '==' or '!='.\n" "Error occurred near line 1, position 29: " "{% block entry %}{% if BOLA = \"asd\" %}"); - bc_error_free(err); + sb_error_free(err); } @@ -971,16 +947,15 @@ static void test_template_parse_invalid_if_operand(void **state) { const char *a = "{% block entry %}{% if BOLA == asd %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid 'if' operand. Must be double-quoted static string or variable.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid 'if' operand. Must be double-quoted static string or variable.\n" "Error occurred near line 1, position 32: " "{% block entry %}{% if BOLA == asd %}"); - bc_error_free(err); + sb_error_free(err); } @@ -988,16 +963,15 @@ static void test_template_parse_invalid_if_operand2(void **state) { const char *a = "{% block entry %}{% if BOLA == \"asd %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Found an open double-quoted string.\n" + assert_string_equal(sb_error_to_string(err), + "template: Found an open double-quoted string.\n" "Error occurred near line 1, position 32: " "{% block entry %}{% if BOLA == \"asd %}"); - bc_error_free(err); + sb_error_free(err); } @@ -1005,16 +979,15 @@ static void test_template_parse_invalid_if_operand3(void **state) { const char *a = "{% block entry %}{% if BOLA == 0123 %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid 'if' operand. Must be double-quoted static string or variable.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid 'if' operand. Must be double-quoted static string or variable.\n" "Error occurred near line 1, position 32: " "{% block entry %}{% if BOLA == 0123 %}"); - bc_error_free(err); + sb_error_free(err); } @@ -1022,15 +995,14 @@ static void test_template_parse_invalid_else1(void **state) { const char *a = "{% else %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "'else' statement without an open 'if', 'ifdef' or 'ifndef' statement.\n" + assert_string_equal(sb_error_to_string(err), + "template: 'else' statement without an open 'if', 'ifdef' or 'ifndef' statement.\n" "Error occurred near line 1, position 8: {% else %}"); - bc_error_free(err); + sb_error_free(err); } @@ -1038,16 +1010,15 @@ static void test_template_parse_invalid_else2(void **state) { const char *a = "{% if BOLA == \"123\" %}{% if GUDA == \"1\" %}{% else %}{% else %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "More than one 'else' statement for an open 'if', 'ifdef' or 'ifndef' " + assert_string_equal(sb_error_to_string(err), + "template: More than one 'else' statement for an open 'if', 'ifdef' or 'ifndef' " "statement.\nError occurred near line 1, position 60: {% if BOLA == \"123\" " "%}{% if GUDA == \"1\" %}{% else %}{% else %}"); - bc_error_free(err); + sb_error_free(err); } @@ -1062,15 +1033,14 @@ test_template_parse_invalid_else3(void **state) "{% endif %}\n" "{% else %}\n" "{% else %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "More than one 'else' statement for an open 'if', 'ifdef' or 'ifndef' " + assert_string_equal(sb_error_to_string(err), + "template: More than one 'else' statement for an open 'if', 'ifdef' or 'ifndef' " "statement.\nError occurred near line 7, position 8: {% else %}"); - bc_error_free(err); + sb_error_free(err); } @@ -1078,15 +1048,14 @@ static void test_template_parse_invalid_block_end(void **state) { const char *a = "{% block entry }}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid statement syntax. Must end with '%}'.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid statement syntax. Must end with '%}'.\n" "Error occurred near line 1, position 16: {% block entry }}"); - bc_error_free(err); + sb_error_free(err); } @@ -1094,16 +1063,15 @@ static void test_template_parse_invalid_variable_name(void **state) { const char *a = "{% block entry %}{{ bola }}{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid variable name. Must begin with uppercase letter.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid variable name. Must begin with uppercase letter.\n" "Error occurred near line 1, position 21: " "{% block entry %}{{ bola }}{% endblock %}"); - bc_error_free(err); + sb_error_free(err); } @@ -1111,16 +1079,15 @@ static void test_template_parse_invalid_variable_name2(void **state) { const char *a = "{% block entry %}{{ Bola }}{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid variable name. Must be uppercase letter, number or '_'.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid variable name. Must be uppercase letter, number or '_'.\n" "Error occurred near line 1, position 22: " "{% block entry %}{{ Bola }}{% endblock %}"); - bc_error_free(err); + sb_error_free(err); } @@ -1128,16 +1095,15 @@ static void test_template_parse_invalid_variable_name3(void **state) { const char *a = "{% block entry %}{{ 0123 }}{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid variable name. Must begin with uppercase letter.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid variable name. Must begin with uppercase letter.\n" "Error occurred near line 1, position 21: {% block entry %}{{ 0123 }}" "{% endblock %}"); - bc_error_free(err); + sb_error_free(err); } @@ -1145,16 +1111,15 @@ static void test_template_parse_invalid_variable_end(void **state) { const char *a = "{% block entry %}{{ BOLA %}{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid statement syntax. Must end with '}}'.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid statement syntax. Must end with '}}'.\n" "Error occurred near line 1, position 26: " "{% block entry %}{{ BOLA %}{% endblock %}"); - bc_error_free(err); + sb_error_free(err); } @@ -1162,15 +1127,14 @@ static void test_template_parse_invalid_close(void **state) { const char *a = "{% block entry %%\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid statement syntax. Must end with '}'.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid statement syntax. Must end with '}'.\n" "Error occurred near line 1, position 17: {% block entry %%"); - bc_error_free(err); + sb_error_free(err); } @@ -1178,16 +1142,15 @@ static void test_template_parse_invalid_close2(void **state) { const char *a = "{% block entry %}{{ BOLA }%{% endblock %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "Invalid statement syntax. Must end with '}'.\n" + assert_string_equal(sb_error_to_string(err), + "template: Invalid statement syntax. Must end with '}'.\n" "Error occurred near line 1, position 27: " "{% block entry %}{{ BOLA }%{% endblock %}"); - bc_error_free(err); + sb_error_free(err); } @@ -1195,14 +1158,14 @@ static void test_template_parse_invalid_endif_not_closed(void **state) { const char *a = "{% block entry %}{% endblock %}{% ifdef BOLA %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, "1 open 'if', 'ifdef' and/or 'ifndef' statements " + assert_string_equal(sb_error_to_string(err), + "template: 1 open 'if', 'ifdef' and/or 'ifndef' statements " "were not closed!"); - bc_error_free(err); + sb_error_free(err); } @@ -1210,15 +1173,14 @@ static void test_template_parse_invalid_endif_not_closed_inside_block(void **state) { const char *a = "{% block listing %}{% ifdef BOLA %}{% endblock %}{% endif %}"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "1 open 'if', 'ifdef' and/or 'ifndef' statements were not closed inside " + assert_string_equal(sb_error_to_string(err), + "template: 1 open 'if', 'ifdef' and/or 'ifndef' statements were not closed inside " "a 'listing' block!"); - bc_error_free(err); + sb_error_free(err); } @@ -1226,15 +1188,14 @@ static void test_template_parse_invalid_else_not_closed_inside_block(void **state) { const char *a = "{% block listing %}{% ifdef BOLA %}{% else %}{% endblock %}{% endif %}"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, - "1 open 'if', 'ifdef' and/or 'ifndef' statements were not closed inside " + assert_string_equal(sb_error_to_string(err), + "template: 1 open 'if', 'ifdef' and/or 'ifndef' statements were not closed inside " "a 'listing' block!"); - bc_error_free(err); + sb_error_free(err); } @@ -1242,13 +1203,13 @@ static void test_template_parse_invalid_block_not_closed(void **state) { const char *a = "{% block entry %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, "An open block was not closed!"); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "template: An open block was not closed!"); + sb_error_free(err); } @@ -1256,13 +1217,13 @@ static void test_template_parse_invalid_foreach_not_closed(void **state) { const char *a = "{% foreach ASD %}\n"; - bc_error_t *err = NULL; - bc_slist_t *ast = blogc_template_parse(a, strlen(a), &err); + sb_error_t *err = NULL; + sb_slist_t *ast = blogc_template_parse(a, strlen(a), &err); assert_non_null(err); assert_null(ast); - assert_int_equal(err->type, BLOGC_ERROR_TEMPLATE_PARSER); - assert_string_equal(err->msg, "An open 'foreach' statement was not closed!"); - bc_error_free(err); + assert_string_equal(sb_error_to_string(err), + "template: An open 'foreach' statement was not closed!"); + sb_error_free(err); } diff --git a/tests/common/check_config_parser.c b/tests/common/check_config_parser.c deleted file mode 100644 index 49e2a5b..0000000 --- a/tests/common/check_config_parser.c +++ /dev/null @@ -1,1037 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#include <stdarg.h> -#include <stddef.h> -#include <setjmp.h> -#include <cmocka.h> - -#include <stdlib.h> -#include <string.h> - -#include "../../src/common/config-parser.h" -#include "../../src/common/error.h" -#include "../../src/common/utils.h" - - -static void -test_config_empty(void **state) -{ - const char *a = ""; - bc_error_t *err = NULL; - bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 0); - assert_string_equal(bc_config_get_with_default(c, "bola", "foo", "bar"), "bar"); - bc_config_free(c); -} - - -static void -test_config_section_empty(void **state) -{ - const char *a = "[foo]"; - bc_error_t *err = NULL; - bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - char **s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - char **k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 0); - assert_null(k[0]); - bc_strv_free(k); - bc_config_free(c); -} - - -static void -test_config_section(void **state) -{ - const char *a = - "[foo]\n" - "asd = zxc"; - bc_error_t *err = NULL; - bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - char **s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc"); - char **k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 1); - assert_string_equal(k[0], "asd"); - assert_null(k[1]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\n" - "asd = zxc\n"; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc"); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 1); - assert_string_equal(k[0], "asd"); - assert_null(k[1]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\r\n" - "asd = zxc\r\n"; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc"); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 1); - assert_string_equal(k[0], "asd"); - assert_null(k[1]); - bc_strv_free(k); - bc_config_free(c); -} - - -static void -test_config_section_multiple_keys(void **state) -{ - const char *a = - "[foo]\n" - "asd = zxc\n" - "qwe = rty \n" - "zxc = vbn"; - bc_error_t *err = NULL; - bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - char **s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc"); - assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty"); - assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn"); - char **k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 3); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_string_equal(k[2], "zxc"); - assert_null(k[3]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\n" - "asd = zxc\n" - "qwe = rty \n" - "zxc = vbn\n"; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc"); - assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty"); - assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn"); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 3); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_string_equal(k[2], "zxc"); - assert_null(k[3]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\r\n" - "asd = zxc\r\n" - "qwe = rty \r\n" - "zxc = vbn\r\n"; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc"); - assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty"); - assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn"); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 3); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_string_equal(k[2], "zxc"); - assert_null(k[3]); - bc_strv_free(k); - bc_config_free(c); -} - - -static void -test_config_section_multiple_sections(void **state) -{ - const char *a = - "[foo]\n" - "asd = zxc\n" - "qwe = rty\n" - "zxc = vbn\n" - "\n" - "[bar]\n" - "lol = hehe"; - bc_error_t *err = NULL; - bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 2); - char **s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 2); - assert_string_equal(s[0], "foo"); - assert_string_equal(s[1], "bar"); - assert_null(s[2]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc"); - assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty"); - assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn"); - assert_string_equal(bc_config_get(c, "bar", "lol"), "hehe"); - char **k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 3); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_string_equal(k[2], "zxc"); - assert_null(k[3]); - bc_strv_free(k); - k = bc_config_list_keys(c, "bar"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 1); - assert_string_equal(k[0], "lol"); - assert_null(k[1]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\n" - "asd = zxc\n" - "qwe = rty\n" - "zxc = vbn\n" - "\n" - "[bar]\n" - "lol = hehe\n"; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 2); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 2); - assert_string_equal(s[0], "foo"); - assert_string_equal(s[1], "bar"); - assert_null(s[2]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc"); - assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty"); - assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn"); - assert_string_equal(bc_config_get(c, "bar", "lol"), "hehe"); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 3); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_string_equal(k[2], "zxc"); - assert_null(k[3]); - bc_strv_free(k); - k = bc_config_list_keys(c, "bar"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 1); - assert_string_equal(k[0], "lol"); - assert_null(k[1]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\r\n" - "asd = zxc\r\n" - "qwe = rty\r\n" - "zxc = vbn\r\n" - "\r\n" - "[bar]\r\n" - "lol = hehe\r\n"; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 2); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 2); - assert_string_equal(s[0], "foo"); - assert_string_equal(s[1], "bar"); - assert_null(s[2]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc"); - assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty"); - assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn"); - assert_string_equal(bc_config_get(c, "bar", "lol"), "hehe"); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 3); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_string_equal(k[2], "zxc"); - assert_null(k[3]); - bc_strv_free(k); - k = bc_config_list_keys(c, "bar"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 1); - assert_string_equal(k[0], "lol"); - assert_null(k[1]); - bc_strv_free(k); - bc_config_free(c); -} - - -static void -test_config_section_list(void **state) -{ - const char *a = - "[foo]\n" - "asd = zxc\n" - "qwe = rty\n" - "zxc = vbn\n" - "\n" - "[bar]\n" - "lol = hehe\n" - " asdasdadssad "; - bc_error_t *err = NULL; - const char *sections[] = {"bar", NULL}; - bc_config_t *c = bc_config_parse(a, strlen(a), sections, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 2); - char **s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 2); - assert_string_equal(s[0], "foo"); - assert_string_equal(s[1], "bar"); - assert_null(s[2]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc"); - assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty"); - assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn"); - char **bar = bc_config_get_list(c, "bar"); - assert_non_null(bar); - assert_string_equal(bar[0], "lol = hehe"); - assert_string_equal(bar[1], "asdasdadssad"); - assert_null(bar[2]); - bc_strv_free(bar); - char **k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 3); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_string_equal(k[2], "zxc"); - assert_null(k[3]); - bc_strv_free(k); - k = bc_config_list_keys(c, "bar"); - assert_null(k); - bc_config_free(c); - - a = - "[foo]\n" - "asd = zxc\n" - "qwe = rty\n" - "zxc = vbn\n" - "\n" - "[bar]\n" - "lol = hehe\n" - "asdasdadssad\n"; - err = NULL; - c = bc_config_parse(a, strlen(a), sections, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 2); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 2); - assert_string_equal(s[0], "foo"); - assert_string_equal(s[1], "bar"); - assert_null(s[2]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc"); - assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty"); - assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn"); - bar = bc_config_get_list(c, "bar"); - assert_non_null(bar); - assert_string_equal(bar[0], "lol = hehe"); - assert_string_equal(bar[1], "asdasdadssad"); - assert_null(bar[2]); - bc_strv_free(bar); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 3); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_string_equal(k[2], "zxc"); - assert_null(k[3]); - bc_strv_free(k); - k = bc_config_list_keys(c, "bar"); - assert_null(k); - bc_config_free(c); - - a = - "[foo]\r\n" - "asd = zxc\r\n" - "qwe = rty\r\n" - "zxc = vbn\r\n" - "\r\n" - "[bar]\r\n" - "lol = hehe\r\n" - "asdasdadssad\r\n"; - err = NULL; - c = bc_config_parse(a, strlen(a), sections, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 2); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 2); - assert_string_equal(s[0], "foo"); - assert_string_equal(s[1], "bar"); - assert_null(s[2]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), "zxc"); - assert_string_equal(bc_config_get(c, "foo", "qwe"), "rty"); - assert_string_equal(bc_config_get(c, "foo", "zxc"), "vbn"); - bar = bc_config_get_list(c, "bar"); - assert_non_null(bar); - assert_string_equal(bar[0], "lol = hehe"); - assert_string_equal(bar[1], "asdasdadssad"); - assert_null(bar[2]); - bc_strv_free(bar); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 3); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_string_equal(k[2], "zxc"); - assert_null(k[3]); - bc_strv_free(k); - k = bc_config_list_keys(c, "bar"); - assert_null(k); - bc_config_free(c); -} - - -static void -test_config_quoted_values(void **state) -{ - const char *a = - "[foo]\n" - "a = \"lol\"\n" - "b = \"lo\\\"l\"\n" - "c = \"lo'l\"\n" - "d = 'lol'\n" - "e = 'lo\\'l'\n" - "f = 'lo\"l'\n" - "g = \\\\asd\n" - "h = \"\\\\asd\"\n" - "i = '\\\\asd'\n"; - bc_error_t *err = NULL; - bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - char **s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - char **k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 9); - assert_string_equal(k[0], "a"); - assert_string_equal(k[1], "b"); - assert_string_equal(k[2], "c"); - assert_string_equal(k[3], "d"); - assert_string_equal(k[4], "e"); - assert_string_equal(k[5], "f"); - assert_string_equal(k[6], "g"); - assert_string_equal(k[7], "h"); - assert_string_equal(k[8], "i"); - assert_null(k[9]); - bc_strv_free(k); - assert_string_equal(bc_config_get(c, "foo", "a"), "lol"); - assert_string_equal(bc_config_get(c, "foo", "b"), "lo\"l"); - assert_string_equal(bc_config_get(c, "foo", "c"), "lo'l"); - assert_string_equal(bc_config_get(c, "foo", "d"), "'lol'"); - assert_string_equal(bc_config_get(c, "foo", "e"), "'lo'l'"); - assert_string_equal(bc_config_get(c, "foo", "f"), "'lo\"l'"); - assert_string_equal(bc_config_get(c, "foo", "g"), "\\asd"); - assert_string_equal(bc_config_get(c, "foo", "h"), "\\asd"); - assert_string_equal(bc_config_get(c, "foo", "i"), "'\\asd'"); - bc_config_free(c); - - a = - "[foo]\n" - "\"lol\"\n" - "\"lo\\\"l\"\n" - "\"lo'l\"\n" - "'lol'\n" - "'lo\\'l'\n" - "'lo\"l'\n" - "\\\\asd\n" - "\"\\\\asd\"\n" - "'\\\\asd'\n" - "\n" - "[bar]\n" - "'lol = hehe'\n" - "\" asdasdadssad \""; - err = NULL; - const char *sections[] = {"foo", "bar", NULL}; - c = bc_config_parse(a, strlen(a), sections, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 2); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 2); - assert_string_equal(s[0], "foo"); - assert_string_equal(s[1], "bar"); - assert_null(s[2]); - bc_strv_free(s); - char **bar = bc_config_get_list(c, "foo"); - assert_string_equal(bar[0], "lol"); - assert_string_equal(bar[1], "lo\"l"); - assert_string_equal(bar[2], "lo'l"); - assert_string_equal(bar[3], "'lol'"); - assert_string_equal(bar[4], "'lo'l'"); - assert_string_equal(bar[5], "'lo\"l'"); - assert_string_equal(bar[6], "\\asd"); - assert_string_equal(bar[7], "\\asd"); - assert_string_equal(bar[8], "'\\asd'"); - assert_null(bar[9]); - bc_strv_free(bar); - bar = bc_config_get_list(c, "bar"); - assert_non_null(bar); - assert_string_equal(bar[0], "'lol = hehe'"); - assert_string_equal(bar[1], " asdasdadssad "); - assert_null(bar[2]); - bc_strv_free(bar); - k = bc_config_list_keys(c, "foo"); - assert_null(k); - k = bc_config_list_keys(c, "bar"); - assert_null(k); - bc_config_free(c); -} - - -static void -test_config_empty_values(void **state) -{ - const char *a = - "[foo]\n" - "asd ="; - bc_error_t *err = NULL; - bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - char **s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), ""); - char **k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 1); - assert_string_equal(k[0], "asd"); - assert_null(k[1]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\n" - "asd = \n"; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), ""); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 1); - assert_string_equal(k[0], "asd"); - assert_null(k[1]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\n" - "asd = foo\n" - "qwe ="; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), "foo"); - assert_string_equal(bc_config_get(c, "foo", "qwe"), ""); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 2); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_null(k[2]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\n" - "asd = foo\n" - "qwe = \n"; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), "foo"); - assert_string_equal(bc_config_get(c, "foo", "qwe"), ""); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 2); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_null(k[2]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\n" - "asd =\n" - "qwe = foo"; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), ""); - assert_string_equal(bc_config_get(c, "foo", "qwe"), "foo"); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 2); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_null(k[2]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\n" - "asd = \n" - "qwe = foo\n"; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), ""); - assert_string_equal(bc_config_get(c, "foo", "qwe"), "foo"); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 2); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_null(k[2]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\r\n" - "asd ="; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), ""); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 1); - assert_string_equal(k[0], "asd"); - assert_null(k[1]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\r\n" - "asd = \r\n"; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), ""); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 1); - assert_string_equal(k[0], "asd"); - assert_null(k[1]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\r\n" - "asd = foo\r\n" - "qwe ="; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), "foo"); - assert_string_equal(bc_config_get(c, "foo", "qwe"), ""); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 2); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_null(k[2]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\r\n" - "asd = foo\r\n" - "qwe = \r\n"; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), "foo"); - assert_string_equal(bc_config_get(c, "foo", "qwe"), ""); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 2); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_null(k[2]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\r\n" - "asd =\r\n" - "qwe = foo"; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), ""); - assert_string_equal(bc_config_get(c, "foo", "qwe"), "foo"); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 2); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_null(k[2]); - bc_strv_free(k); - bc_config_free(c); - - a = - "[foo]\r\n" - "asd = \r\n" - "qwe = foo\r\n"; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - assert_string_equal(bc_config_get(c, "foo", "asd"), ""); - assert_string_equal(bc_config_get(c, "foo", "qwe"), "foo"); - k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 2); - assert_string_equal(k[0], "asd"); - assert_string_equal(k[1], "qwe"); - assert_null(k[2]); - bc_strv_free(k); - bc_config_free(c); -} - - -static void -test_config_key_prefix(void **state) -{ - const char *a = - "[foo]\n" - "LAST_FLIGHT = lol\n" - "LAST_FLIGHT_SLUG = hehe\n"; - bc_error_t *err = NULL; - bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err); - assert_null(err); - assert_non_null(c); - assert_non_null(c->root); - assert_int_equal(bc_trie_size(c->root), 1); - char **s = bc_config_list_sections(c); - assert_non_null(s); - assert_int_equal(bc_strv_length(s), 1); - assert_string_equal(s[0], "foo"); - assert_null(s[1]); - bc_strv_free(s); - char **k = bc_config_list_keys(c, "foo"); - assert_non_null(k); - assert_int_equal(bc_strv_length(k), 2); - assert_string_equal(k[0], "LAST_FLIGHT"); - assert_string_equal(k[1], "LAST_FLIGHT_SLUG"); - assert_null(k[2]); - bc_strv_free(k); - assert_string_equal(bc_config_get(c, "foo", "LAST_FLIGHT"), "lol"); - assert_string_equal(bc_config_get(c, "foo", "LAST_FLIGHT_SLUG"), "hehe"); - bc_config_free(c); -} - - -static void -test_config_error_start(void **state) -{ - const char *a = - "asd\n" - "[foo]"; - bc_error_t *err = NULL; - bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err); - assert_non_null(err); - assert_null(c); - assert_int_equal(err->type, BC_ERROR_CONFIG_PARSER); - assert_string_equal(err->msg, - "File must start with section.\n" - "Error occurred near line 1, position 1: asd"); - bc_error_free(err); -} - - -static void -test_config_error_section_with_newline(void **state) -{ - const char *a = - "[foo\nbar]"; - bc_error_t *err = NULL; - bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err); - assert_non_null(err); - assert_null(c); - assert_int_equal(err->type, BC_ERROR_CONFIG_PARSER); - assert_string_equal(err->msg, - "Section names can't have new lines.\n" - "Error occurred near line 1, position 5: [foo"); - bc_error_free(err); -} - - -static void -test_config_error_key_without_value(void **state) -{ - const char *a = - "[foobar]\n" - "asd = 12\n" - "foo"; - bc_error_t *err = NULL; - bc_config_t *c = bc_config_parse(a, strlen(a), NULL, &err); - assert_non_null(err); - assert_null(c); - assert_int_equal(err->type, BC_ERROR_CONFIG_PARSER); - assert_string_equal(err->msg, - "Key without value: foo.\n" - "Error occurred near line 3, position 3: foo"); - bc_error_free(err); - a = - "[foobar]\n" - "asd = 12\n" - "foo\n"; - err = NULL; - c = bc_config_parse(a, strlen(a), NULL, &err); - assert_non_null(err); - assert_null(c); - assert_int_equal(err->type, BC_ERROR_CONFIG_PARSER); - assert_string_equal(err->msg, - "Key without value: foo.\n" - "Error occurred near line 3, position 4: foo"); - bc_error_free(err); -} - - -int -main(void) -{ - const UnitTest tests[] = { - unit_test(test_config_empty), - unit_test(test_config_section_empty), - unit_test(test_config_section), - unit_test(test_config_section_multiple_keys), - unit_test(test_config_section_multiple_sections), - unit_test(test_config_section_list), - unit_test(test_config_quoted_values), - unit_test(test_config_empty_values), - unit_test(test_config_key_prefix), - unit_test(test_config_error_start), - unit_test(test_config_error_section_with_newline), - unit_test(test_config_error_key_without_value), - }; - return run_tests(tests); -} diff --git a/tests/common/check_error.c b/tests/common/check_error.c deleted file mode 100644 index d9806f9..0000000 --- a/tests/common/check_error.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#include <stdarg.h> -#include <stddef.h> -#include <setjmp.h> -#include <cmocka.h> -#include <string.h> -#include "../../src/common/error.h" - - -static void -test_error_new(void **state) -{ - bc_error_t *error = bc_error_new(1, "bola %s"); - assert_non_null(error); - assert_int_equal(error->type, 1); - assert_string_equal(error->msg, "bola %s"); - bc_error_free(error); -} - - -static void -test_error_new_printf(void **state) -{ - bc_error_t *error = bc_error_new_printf(2, "bola %s", "guda"); - assert_non_null(error); - assert_int_equal(error->type, 2); - assert_string_equal(error->msg, "bola guda"); - bc_error_free(error); -} - - -static void -test_error_parser(void **state) -{ - const char *a = "bola\nguda\nchunda\n"; - bc_error_t *error = bc_error_parser(1, a, strlen(a), 11, "asd %d", 10); - assert_non_null(error); - assert_int_equal(error->type, 1); - assert_string_equal(error->msg, - "asd 10\nError occurred near line 3, position 2: chunda"); - bc_error_free(error); - a = "bola\nguda\nchunda"; - error = bc_error_parser(1, a, strlen(a), 11, "asd %d", 10); - assert_non_null(error); - assert_int_equal(error->type, 1); - assert_string_equal(error->msg, - "asd 10\nError occurred near line 3, position 2: chunda"); - bc_error_free(error); - a = "bola\nguda\nchunda"; - error = bc_error_parser(1, a, strlen(a), 0, "asd %d", 10); - assert_non_null(error); - assert_int_equal(error->type, 1); - assert_string_equal(error->msg, - "asd 10\nError occurred near line 1, position 1: bola"); - bc_error_free(error); - a = ""; - error = bc_error_parser(1, a, strlen(a), 0, "asd %d", 10); - assert_non_null(error); - assert_int_equal(error->type, 1); - assert_string_equal(error->msg, "asd 10"); - bc_error_free(error); -} - - -static void -test_error_parser_crlf(void **state) -{ - const char *a = "bola\r\nguda\r\nchunda\r\n"; - bc_error_t *error = bc_error_parser(1, a, strlen(a), 13, "asd %d", 10); - assert_non_null(error); - assert_int_equal(error->type, 1); - assert_string_equal(error->msg, - "asd 10\nError occurred near line 3, position 2: chunda"); - bc_error_free(error); - a = "bola\r\nguda\r\nchunda"; - error = bc_error_parser(1, a, strlen(a), 13, "asd %d", 10); - assert_non_null(error); - assert_int_equal(error->type, 1); - assert_string_equal(error->msg, - "asd 10\nError occurred near line 3, position 2: chunda"); - bc_error_free(error); - a = "bola\r\nguda\r\nchunda"; - error = bc_error_parser(1, a, strlen(a), 0, "asd %d", 10); - assert_non_null(error); - assert_int_equal(error->type, 1); - assert_string_equal(error->msg, - "asd 10\nError occurred near line 1, position 1: bola"); - bc_error_free(error); -} - - -int -main(void) -{ - const UnitTest tests[] = { - unit_test(test_error_new), - unit_test(test_error_new_printf), - unit_test(test_error_parser), - unit_test(test_error_parser_crlf), - }; - return run_tests(tests); -} diff --git a/tests/common/check_sort.c b/tests/common/check_sort.c deleted file mode 100644 index f49710c..0000000 --- a/tests/common/check_sort.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#include <stdarg.h> -#include <stddef.h> -#include <setjmp.h> -#include <cmocka.h> -#include <stdlib.h> -#include <string.h> -#include "../../src/common/utils.h" -#include "../../src/common/sort.h" - - -static int -sort_func(void *a, void *b) -{ - return strcmp((char*) a, (char*) b); -} - - -static void -test_slist_sort_empty(void **state) -{ - bc_slist_t *l = NULL; - assert_null(bc_slist_sort(l, (bc_sort_func_t) sort_func)); -} - - -static void -test_slist_sort_single(void **state) -{ - bc_slist_t *l = NULL; - l = bc_slist_append(l, bc_strdup("a")); - - l = bc_slist_sort(l, (bc_sort_func_t) sort_func); - - assert_non_null(l); - assert_string_equal(l->data, "a"); - assert_null(l->next); - - bc_slist_free_full(l, free); -} - - -static void -test_slist_sort_sorted(void **state) -{ - bc_slist_t *l = NULL; - l = bc_slist_append(l, bc_strdup("a")); - l = bc_slist_append(l, bc_strdup("b")); - l = bc_slist_append(l, bc_strdup("c")); - - l = bc_slist_sort(l, (bc_sort_func_t) sort_func); - - assert_non_null(l); - assert_string_equal(l->data, "a"); - assert_string_equal(l->next->data, "b"); - assert_string_equal(l->next->next->data, "c"); - assert_null(l->next->next->next); - - bc_slist_free_full(l, free); -} - - -static void -test_slist_sort_reverse(void **state) -{ - bc_slist_t *l = NULL; - l = bc_slist_append(l, bc_strdup("d")); - l = bc_slist_append(l, bc_strdup("c")); - l = bc_slist_append(l, bc_strdup("b")); - l = bc_slist_append(l, bc_strdup("a")); - - l = bc_slist_sort(l, (bc_sort_func_t) sort_func); - - assert_non_null(l); - assert_string_equal(l->data, "a"); - assert_string_equal(l->next->data, "b"); - assert_string_equal(l->next->next->data, "c"); - assert_string_equal(l->next->next->next->data, "d"); - assert_null(l->next->next->next->next); - - bc_slist_free_full(l, free); -} - - -static void -test_slist_sort_mixed1(void **state) -{ - bc_slist_t *l = NULL; - l = bc_slist_append(l, bc_strdup("a")); - l = bc_slist_append(l, bc_strdup("d")); - l = bc_slist_append(l, bc_strdup("c")); - l = bc_slist_append(l, bc_strdup("b")); - - l = bc_slist_sort(l, (bc_sort_func_t) sort_func); - - assert_non_null(l); - assert_string_equal(l->data, "a"); - assert_string_equal(l->next->data, "b"); - assert_string_equal(l->next->next->data, "c"); - assert_string_equal(l->next->next->next->data, "d"); - assert_null(l->next->next->next->next); - - bc_slist_free_full(l, free); -} - - -static void -test_slist_sort_mixed2(void **state) -{ - bc_slist_t *l = NULL; - l = bc_slist_append(l, bc_strdup("c")); - l = bc_slist_append(l, bc_strdup("b")); - l = bc_slist_append(l, bc_strdup("a")); - l = bc_slist_append(l, bc_strdup("d")); - - l = bc_slist_sort(l, (bc_sort_func_t) sort_func); - - assert_non_null(l); - assert_string_equal(l->data, "a"); - assert_string_equal(l->next->data, "b"); - assert_string_equal(l->next->next->data, "c"); - assert_string_equal(l->next->next->next->data, "d"); - assert_null(l->next->next->next->next); - - bc_slist_free_full(l, free); -} - - -int -main(void) -{ - const UnitTest tests[] = { - unit_test(test_slist_sort_empty), - unit_test(test_slist_sort_single), - unit_test(test_slist_sort_sorted), - unit_test(test_slist_sort_reverse), - unit_test(test_slist_sort_mixed1), - unit_test(test_slist_sort_mixed2), - }; - return run_tests(tests); -} diff --git a/tests/common/check_stdin.c b/tests/common/check_stdin.c deleted file mode 100644 index 716916d..0000000 --- a/tests/common/check_stdin.c +++ /dev/null @@ -1,54 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#include <stdarg.h> -#include <stddef.h> -#include <setjmp.h> -#include <cmocka.h> -#include <stdlib.h> -#include <string.h> -#include <stdio.h> -#include "../../src/common/stdin.h" - - -int -__wrap_fgetc(FILE *stream) -{ - assert_int_equal(fileno(stream), fileno(stdin)); - return mock_type(int); -} - - -static void -test_read(void **state) -{ - will_return(__wrap_fgetc, EOF); - char *t = bc_stdin_read(); - assert_non_null(t); - assert_string_equal(t, ""); - free(t); - will_return(__wrap_fgetc, 'b'); - will_return(__wrap_fgetc, 'o'); - will_return(__wrap_fgetc, 'l'); - will_return(__wrap_fgetc, 'a'); - will_return(__wrap_fgetc, EOF); - t = bc_stdin_read(); - assert_non_null(t); - assert_string_equal(t, "bola"); - free(t); -} - - -int -main(void) -{ - const UnitTest tests[] = { - unit_test(test_read), - }; - return run_tests(tests); -} diff --git a/tests/common/check_utf8.c b/tests/common/check_utf8.c deleted file mode 100644 index 05bf566..0000000 --- a/tests/common/check_utf8.c +++ /dev/null @@ -1,101 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#include <stdarg.h> -#include <stddef.h> -#include <setjmp.h> -#include <cmocka.h> -#include <stdbool.h> -#include <stdint.h> -#include <string.h> -#include "../../src/common/utf8.h" -#include "../../src/common/utils.h" - -// this file MUST be ASCII - - -static void -test_utf8_valid(void **state) -{ - const char *c = "<a href=\"{{ BASE_URL }}/page/{{ PREVIOUS_PAGE }}/\">" - "\xc2\xab Newer posts</a>"; - assert_true(bc_utf8_validate((uint8_t*) c, strlen(c))); - const uint8_t d[3] = {0xe2, 0x82, 0xac}; // euro sign - assert_true(bc_utf8_validate(d, 3)); - const uint8_t e[3] = {0xef, 0xbb, 0xbf}; // utf-8 bom - assert_true(bc_utf8_validate(e, 3)); -} - - -static void -test_utf8_invalid(void **state) -{ - const uint8_t c[4] = {0xff, 0xfe, 0xac, 0x20}; // utf-16 - assert_false(bc_utf8_validate(c, 4)); - const uint8_t d[8] = {0xff, 0xfe, 0x00, 0x00, 0xac, 0x20, 0x00, 0x00}; // utf-32 - assert_false(bc_utf8_validate(d, 8)); -} - - -static void -test_utf8_valid_str(void **state) -{ - bc_string_t *s = bc_string_new(); - bc_string_append(s, - "<a href=\"{{ BASE_URL }}/page/{{ PREVIOUS_PAGE }}/\">\xc2\xab Newer " - "posts</a>"); - assert_true(bc_utf8_validate_str(s)); - bc_string_free(s, true); - s = bc_string_new(); - bc_string_append(s, "\xe2\x82\xac"); - assert_true(bc_utf8_validate_str(s)); - bc_string_free(s, true); -} - - -static void -test_utf8_invalid_str(void **state) -{ - bc_string_t *s = bc_string_new(); - bc_string_append(s, "\xff\xfe\xac\x20"); // utf-16 - assert_false(bc_utf8_validate_str(s)); - bc_string_free(s, true); - s = bc_string_new(); - bc_string_append(s, "\xff\xfe\x00\x00\xac\x20\x00\x00"); // utf-32 - assert_false(bc_utf8_validate_str(s)); - bc_string_free(s, true); -} - - -static void -test_utf8_skip_bom(void **state) -{ - const uint8_t c[4] = {0xef, 0xbb, 0xbf, 0}; - assert_int_equal(bc_utf8_skip_bom(c, 2), 0); - assert_int_equal(bc_utf8_skip_bom(c, 3), 3); - assert_string_equal(c + 3, ""); - const uint8_t d[8] = {0xef, 0xbb, 0xbf, 'b', 'o', 'l', 'a', 0}; - assert_int_equal(bc_utf8_skip_bom(d, 7), 3); - assert_string_equal(d + 3, "bola"); - const uint8_t e[5] = "bola"; - assert_int_equal(bc_utf8_skip_bom(e, 4), 0); -} - - -int -main(void) -{ - const UnitTest tests[] = { - unit_test(test_utf8_valid), - unit_test(test_utf8_invalid), - unit_test(test_utf8_valid_str), - unit_test(test_utf8_invalid_str), - unit_test(test_utf8_skip_bom), - }; - return run_tests(tests); -} diff --git a/tests/common/check_utils.c b/tests/common/check_utils.c deleted file mode 100644 index cc14f4e..0000000 --- a/tests/common/check_utils.c +++ /dev/null @@ -1,1095 +0,0 @@ -/* - * blogc: A blog compiler. - * Copyright (C) 2014-2019 Rafael G. Martins <rafael@rafaelmartins.eng.br> - * - * This program can be distributed under the terms of the BSD License. - * See the file LICENSE. - */ - -#include <stdarg.h> -#include <stddef.h> -#include <setjmp.h> -#include <cmocka.h> -#include <stdbool.h> -#include <stdlib.h> -#include "../../src/common/utils.h" - -#define BC_STRING_CHUNK_SIZE 128 - - -static void -test_slist_append(void **state) -{ - bc_slist_t *l = NULL; - l = bc_slist_append(l, (void*) bc_strdup("bola")); - assert_non_null(l); - assert_string_equal(l->data, "bola"); - assert_null(l->next); - l = bc_slist_append(l, (void*) bc_strdup("guda")); - assert_non_null(l); - assert_string_equal(l->data, "bola"); - assert_non_null(l->next); - assert_string_equal(l->next->data, "guda"); - assert_null(l->next->next); - bc_slist_free_full(l, free); -} - - -static void -test_slist_prepend(void **state) -{ - bc_slist_t *l = NULL; - l = bc_slist_prepend(l, (void*) bc_strdup("bola")); - assert_non_null(l); - assert_string_equal(l->data, "bola"); - assert_null(l->next); - l = bc_slist_prepend(l, (void*) bc_strdup("guda")); - assert_non_null(l); - assert_string_equal(l->data, "guda"); - assert_non_null(l->next); - assert_string_equal(l->next->data, "bola"); - assert_null(l->next->next); - bc_slist_free_full(l, free); -} - - -static void -test_slist_free(void **state) -{ - bc_slist_t *l = NULL; - char *t1 = bc_strdup("bola"); - char *t2 = bc_strdup("guda"); - char *t3 = bc_strdup("chunda"); - l = bc_slist_append(l, (void*) t1); - l = bc_slist_append(l, (void*) t2); - l = bc_slist_append(l, (void*) t3); - bc_slist_free(l); - assert_string_equal(t1, "bola"); - assert_string_equal(t2, "guda"); - assert_string_equal(t3, "chunda"); - free(t1); - free(t2); - free(t3); -} - - -static void -test_slist_length(void **state) -{ - bc_slist_t *l = NULL; - l = bc_slist_append(l, (void*) bc_strdup("bola")); - l = bc_slist_append(l, (void*) bc_strdup("guda")); - l = bc_slist_append(l, (void*) bc_strdup("chunda")); - assert_int_equal(bc_slist_length(l), 3); - bc_slist_free_full(l, free); - assert_int_equal(bc_slist_length(NULL), 0); -} - - -static void -test_strdup(void **state) -{ - char *str = bc_strdup("bola"); - assert_string_equal(str, "bola"); - free(str); - str = bc_strdup(NULL); - assert_null(str); -} - - -static void -test_strndup(void **state) -{ - char *str = bc_strndup("bolaguda", 4); - assert_string_equal(str, "bola"); - free(str); - str = bc_strndup("bolaguda", 30); - assert_string_equal(str, "bolaguda"); - free(str); - str = bc_strndup("bolaguda", 8); - assert_string_equal(str, "bolaguda"); - free(str); - str = bc_strdup(NULL); - assert_null(str); -} - - -static void -test_strdup_printf(void **state) -{ - char *str = bc_strdup_printf("bola"); - assert_string_equal(str, "bola"); - free(str); - str = bc_strdup_printf("bola, %s", "guda"); - assert_string_equal(str, "bola, guda"); - free(str); -} - - -static void -test_str_starts_with(void **state) -{ - assert_true(bc_str_starts_with("bolaguda", "bola")); - assert_true(bc_str_starts_with("bola", "bola")); - assert_false(bc_str_starts_with("gudabola", "bola")); - assert_false(bc_str_starts_with("guda", "bola")); - assert_false(bc_str_starts_with("bola", "bolaguda")); -} - - -static void -test_str_ends_with(void **state) -{ - assert_true(bc_str_ends_with("bolaguda", "guda")); - assert_true(bc_str_ends_with("bola", "bola")); - assert_false(bc_str_ends_with("gudabola", "guda")); - assert_false(bc_str_ends_with("guda", "bola")); - assert_false(bc_str_ends_with("bola", "gudabola")); -} - - -static void -test_str_lstrip(void **state) -{ - char *str = bc_strdup(" \tbola\n \t"); - assert_string_equal(bc_str_lstrip(str), "bola\n \t"); - free(str); - str = bc_strdup("guda"); - assert_string_equal(bc_str_lstrip(str), "guda"); - free(str); - str = bc_strdup("\n"); - assert_string_equal(bc_str_lstrip(str), ""); - free(str); - str = bc_strdup("\t \n"); - assert_string_equal(bc_str_lstrip(str), ""); - free(str); - str = bc_strdup(""); - assert_string_equal(bc_str_lstrip(str), ""); - free(str); - assert_null(bc_str_lstrip(NULL)); -} - - -static void -test_str_rstrip(void **state) -{ - char *str = bc_strdup(" \tbola\n \t"); - assert_string_equal(bc_str_rstrip(str), " \tbola"); - free(str); - str = bc_strdup("guda"); - assert_string_equal(bc_str_rstrip(str), "guda"); - free(str); - str = bc_strdup("\n"); - assert_string_equal(bc_str_rstrip(str), ""); - free(str); - str = bc_strdup("\t \n"); - assert_string_equal(bc_str_rstrip(str), ""); - free(str); - str = bc_strdup(""); - assert_string_equal(bc_str_rstrip(str), ""); - free(str); - assert_null(bc_str_rstrip(NULL)); -} - - -static void -test_str_strip(void **state) -{ - char *str = bc_strdup(" \tbola\n \t"); - assert_string_equal(bc_str_strip(str), "bola"); - free(str); - str = bc_strdup("guda"); - assert_string_equal(bc_str_strip(str), "guda"); - free(str); - str = bc_strdup("\n"); - assert_string_equal(bc_str_strip(str), ""); - free(str); - str = bc_strdup("\t \n"); - assert_string_equal(bc_str_strip(str), ""); - free(str); - str = bc_strdup(""); - assert_string_equal(bc_str_strip(str), ""); - free(str); - assert_null(bc_str_strip(NULL)); -} - - -static void -test_str_split(void **state) -{ - char **strv = bc_str_split("bola:guda:chunda", ':', 0); - assert_string_equal(strv[0], "bola"); - assert_string_equal(strv[1], "guda"); - assert_string_equal(strv[2], "chunda"); - assert_null(strv[3]); - bc_strv_free(strv); - strv = bc_str_split("bola:guda:chunda", ':', 2); - assert_string_equal(strv[0], "bola"); - assert_string_equal(strv[1], "guda:chunda"); - assert_null(strv[2]); - bc_strv_free(strv); - strv = bc_str_split("bola:guda:chunda", ':', 1); - assert_string_equal(strv[0], "bola:guda:chunda"); - assert_null(strv[1]); - bc_strv_free(strv); - strv = bc_str_split("", ':', 1); - assert_null(strv[0]); - bc_strv_free(strv); - assert_null(bc_str_split(NULL, ':', 0)); -} - - -static void -test_str_replace(void **state) -{ - char *str = bc_str_replace("bolao", 'o', "zaz"); - assert_string_equal(str, "bzazlazaz"); - free(str); - str = bc_str_replace("bolao", 'b', "zaz"); - assert_string_equal(str, "zazolao"); - free(str); - str = bc_str_replace("bolao", 'b', NULL); - assert_string_equal(str, "bolao"); - free(str); - assert_null(bc_str_replace(NULL, 'b', "zaz")); -} - - -static void -test_str_find(void **state) -{ - assert_null(bc_str_find(NULL, 'c')); - assert_string_equal(bc_str_find("bola", 'l'), "la"); - assert_string_equal(bc_str_find("bo\\lalala", 'l'), "lala"); - assert_string_equal(bc_str_find("bola", '\0'), ""); - assert_null(bc_str_find("bola", 'g')); - assert_null(bc_str_find("bo\\la", 'l')); -} - - -static void -test_str_to_bool(void **state) -{ - assert_false(bc_str_to_bool(NULL)); - assert_true(bc_str_to_bool("1")); - assert_true(bc_str_to_bool("y")); - assert_true(bc_str_to_bool("Y")); - assert_true(bc_str_to_bool("yes")); - assert_true(bc_str_to_bool("YES")); - assert_true(bc_str_to_bool("true")); - assert_true(bc_str_to_bool("TRUE")); - assert_true(bc_str_to_bool("on")); - assert_true(bc_str_to_bool("ON")); - assert_false(bc_str_to_bool("0")); - assert_false(bc_str_to_bool("n")); - assert_false(bc_str_to_bool("N")); - assert_false(bc_str_to_bool("no")); - assert_false(bc_str_to_bool("NO")); - assert_false(bc_str_to_bool("false")); - assert_false(bc_str_to_bool("FALSE")); - assert_false(bc_str_to_bool("off")); - assert_false(bc_str_to_bool("OFF")); -} - - -static void -test_strv_join(void **state) -{ - char *pieces[] = {"guda","bola", "chunda", NULL}; - char *str = bc_strv_join(pieces, ":"); - assert_string_equal(str, "guda:bola:chunda"); - free(str); - char *pieces2[] = {NULL}; - str = bc_strv_join(pieces2, ":"); - assert_string_equal(str, ""); - free(str); - assert_null(bc_strv_join(pieces, NULL)); - assert_null(bc_strv_join(NULL, ":")); - assert_null(bc_strv_join(NULL, NULL)); -} - - -static void -test_strv_length(void **state) -{ - char *pieces[] = {"guda","bola", "chunda", NULL}; - assert_int_equal(bc_strv_length(pieces), 3); - char *pieces2[] = {NULL}; - assert_int_equal(bc_strv_length(pieces2), 0); - assert_int_equal(bc_strv_length(NULL), 0); -} - - -static void -test_string_new(void **state) -{ - bc_string_t *str = bc_string_new(); - assert_non_null(str); - assert_string_equal(str->str, ""); - assert_int_equal(str->len, 0); - assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE); - assert_null(bc_string_free(str, true)); -} - - -static void -test_string_free(void **state) -{ - bc_string_t *str = bc_string_new(); - free(str->str); - str->str = bc_strdup("bola"); - str->len = 4; - str->allocated_len = BC_STRING_CHUNK_SIZE; - char *tmp = bc_string_free(str, false); - assert_string_equal(tmp, "bola"); - free(tmp); - assert_null(bc_string_free(NULL, false)); -} - - -static void -test_string_dup(void **state) -{ - bc_string_t *str = bc_string_new(); - free(str->str); - str->str = bc_strdup("bola"); - str->len = 4; - str->allocated_len = BC_STRING_CHUNK_SIZE; - bc_string_t *new = bc_string_dup(str); - assert_non_null(new); - assert_string_equal(new->str, "bola"); - assert_int_equal(new->len, 4); - assert_int_equal(new->allocated_len, BC_STRING_CHUNK_SIZE); - assert_null(bc_string_free(new, true)); - assert_null(bc_string_free(str, true)); - assert_null(bc_string_dup(NULL)); -} - - -static void -test_string_append_len(void **state) -{ - bc_string_t *str = bc_string_new(); - str = bc_string_append_len(str, "guda", 4); - assert_non_null(str); - assert_string_equal(str->str, "guda"); - assert_int_equal(str->len, 4); - assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE); - assert_null(bc_string_free(str, true)); - str = bc_string_new(); - str = bc_string_append_len(str, "guda", 4); - str = bc_string_append_len(str, "bola", 4); - assert_non_null(str); - assert_string_equal(str->str, "gudabola"); - assert_int_equal(str->len, 8); - assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE); - assert_null(bc_string_free(str, true)); - str = bc_string_new(); - str = bc_string_append_len(str, "guda", 3); - str = bc_string_append_len(str, "bola", 4); - assert_non_null(str); - assert_string_equal(str->str, "gudbola"); - assert_int_equal(str->len, 7); - assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE); - assert_null(bc_string_free(str, true)); - str = bc_string_new(); - str = bc_string_append_len(str, "guda", 4); - str = bc_string_append_len(str, - "cwlwmwxxmvjnwtidmjehzdeexbxjnjowruxjrqpgpfhmvwgqeacdjissntmbtsjidzkcw" - "nnqhxhneolbwqlctcxmrsutolrjikpavxombpfpjyaqltgvzrjidotalcuwrwxtaxjiwa" - "xfhfyzymtffusoqywaruxpybwggukltspqqmghzpqstvcvlqbkhquihzndnrvkaqvevaz" - "dxrewtgapkompnviiyielanoyowgqhssntyvcvqqtfjmkphywbkvzfyttaalttywhqcec" - "hgrwzaglzogwjvqncjzodaqsblcbpcdpxmrtctzginvtkckhqvdplgjvbzrnarcxjrsbc" - "sbfvpylgjznsuhxcxoqbpxowmsrgwimxjgyzwwmryqvstwzkglgeezelvpvkwefqdatnd" - "dxntikgoqlidfnmdhxzevqzlzubvyleeksdirmmttqthhkvfjggznpmarcamacpvwsrnr" - "ftzfeyasjpxoevyptpdnqokswiondusnuymqwaryrmdgscbnuilxtypuynckancsfnwtg" - "okxhegoifakimxbbafkeannglvsxprqzfekdinssqymtfexf", 600); - str = bc_string_append_len(str, NULL, 0); - str = bc_string_append_len(str, - "cwlwmwxxmvjnwtidmjehzdeexbxjnjowruxjrqpgpfhmvwgqeacdjissntmbtsjidzkcw" - "nnqhxhneolbwqlctcxmrsutolrjikpavxombpfpjyaqltgvzrjidotalcuwrwxtaxjiwa" - "xfhfyzymtffusoqywaruxpybwggukltspqqmghzpqstvcvlqbkhquihzndnrvkaqvevaz" - "dxrewtgapkompnviiyielanoyowgqhssntyvcvqqtfjmkphywbkvzfyttaalttywhqcec" - "hgrwzaglzogwjvqncjzodaqsblcbpcdpxmrtctzginvtkckhqvdplgjvbzrnarcxjrsbc" - "sbfvpylgjznsuhxcxoqbpxowmsrgwimxjgyzwwmryqvstwzkglgeezelvpvkwefqdatnd" - "dxntikgoqlidfnmdhxzevqzlzubvyleeksdirmmttqthhkvfjggznpmarcamacpvwsrnr" - "ftzfeyasjpxoevyptpdnqokswiondusnuymqwaryrmdgscbnuilxtypuynckancsfnwtg" - "okxhegoifakimxbbafkeannglvsxprqzfekdinssqymtfexf", 600); - assert_non_null(str); - assert_string_equal(str->str, - "gudacwlwmwxxmvjnwtidmjehzdeexbxjnjowruxjrqpgpfhmvwgqeacdjissntmbtsjid" - "zkcwnnqhxhneolbwqlctcxmrsutolrjikpavxombpfpjyaqltgvzrjidotalcuwrwxtax" - "jiwaxfhfyzymtffusoqywaruxpybwggukltspqqmghzpqstvcvlqbkhquihzndnrvkaqv" - "evazdxrewtgapkompnviiyielanoyowgqhssntyvcvqqtfjmkphywbkvzfyttaalttywh" - "qcechgrwzaglzogwjvqncjzodaqsblcbpcdpxmrtctzginvtkckhqvdplgjvbzrnarcxj" - "rsbcsbfvpylgjznsuhxcxoqbpxowmsrgwimxjgyzwwmryqvstwzkglgeezelvpvkwefqd" - "atnddxntikgoqlidfnmdhxzevqzlzubvyleeksdirmmttqthhkvfjggznpmarcamacpvw" - "srnrftzfeyasjpxoevyptpdnqokswiondusnuymqwaryrmdgscbnuilxtypuynckancsf" - "nwtgokxhegoifakimxbbafkeannglvsxprqzfekdinssqymtfexfcwlwmwxxmvjnwtidm" - "jehzdeexbxjnjowruxjrqpgpfhmvwgqeacdjissntmbtsjidzkcwnnqhxhneolbwqlctc" - "xmrsutolrjikpavxombpfpjyaqltgvzrjidotalcuwrwxtaxjiwaxfhfyzymtffusoqyw" - "aruxpybwggukltspqqmghzpqstvcvlqbkhquihzndnrvkaqvevazdxrewtgapkompnvii" - "yielanoyowgqhssntyvcvqqtfjmkphywbkvzfyttaalttywhqcechgrwzaglzogwjvqnc" - "jzodaqsblcbpcdpxmrtctzginvtkckhqvdplgjvbzrnarcxjrsbcsbfvpylgjznsuhxcx" - "oqbpxowmsrgwimxjgyzwwmryqvstwzkglgeezelvpvkwefqdatnddxntikgoqlidfnmdh" - "xzevqzlzubvyleeksdirmmttqthhkvfjggznpmarcamacpvwsrnrftzfeyasjpxoevypt" - "pdnqokswiondusnuymqwaryrmdgscbnuilxtypuynckancsfnwtgokxhegoifakimxbba" - "fkeannglvsxprqzfekdinssqymtfexf"); - assert_int_equal(str->len, 1204); - assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE * 10); - assert_null(bc_string_free(str, true)); - str = bc_string_new(); - str = bc_string_append_len(str, NULL, 0); - assert_non_null(str); - assert_string_equal(str->str, ""); - assert_int_equal(str->len, 0); - assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE); - assert_null(bc_string_free(str, true)); - assert_null(bc_string_append_len(NULL, "foo", 3)); -} - - -static void -test_string_append(void **state) -{ - bc_string_t *str = bc_string_new(); - str = bc_string_append(str, "guda"); - assert_non_null(str); - assert_string_equal(str->str, "guda"); - assert_int_equal(str->len, 4); - assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE); - assert_null(bc_string_free(str, true)); - str = bc_string_new(); - str = bc_string_append(str, "guda"); - str = bc_string_append(str, "bola"); - assert_non_null(str); - assert_string_equal(str->str, "gudabola"); - assert_int_equal(str->len, 8); - assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE); - assert_null(bc_string_free(str, true)); - str = bc_string_new(); - str = bc_string_append(str, "guda"); - str = bc_string_append(str, - "cwlwmwxxmvjnwtidmjehzdeexbxjnjowruxjrqpgpfhmvwgqeacdjissntmbtsjidzkcw" - "nnqhxhneolbwqlctcxmrsutolrjikpavxombpfpjyaqltgvzrjidotalcuwrwxtaxjiwa" - "xfhfyzymtffusoqywaruxpybwggukltspqqmghzpqstvcvlqbkhquihzndnrvkaqvevaz" - "dxrewtgapkompnviiyielanoyowgqhssntyvcvqqtfjmkphywbkvzfyttaalttywhqcec" - "hgrwzaglzogwjvqncjzodaqsblcbpcdpxmrtctzginvtkckhqvdplgjvbzrnarcxjrsbc" - "sbfvpylgjznsuhxcxoqbpxowmsrgwimxjgyzwwmryqvstwzkglgeezelvpvkwefqdatnd" - "dxntikgoqlidfnmdhxzevqzlzubvyleeksdirmmttqthhkvfjggznpmarcamacpvwsrnr" - "ftzfeyasjpxoevyptpdnqokswiondusnuymqwaryrmdgscbnuilxtypuynckancsfnwtg" - "okxhegoifakimxbbafkeannglvsxprqzfekdinssqymtfexf"); - str = bc_string_append(str, NULL); - str = bc_string_append(str, - "cwlwmwxxmvjnwtidmjehzdeexbxjnjowruxjrqpgpfhmvwgqeacdjissntmbtsjidzkcw" - "nnqhxhneolbwqlctcxmrsutolrjikpavxombpfpjyaqltgvzrjidotalcuwrwxtaxjiwa" - "xfhfyzymtffusoqywaruxpybwggukltspqqmghzpqstvcvlqbkhquihzndnrvkaqvevaz" - "dxrewtgapkompnviiyielanoyowgqhssntyvcvqqtfjmkphywbkvzfyttaalttywhqcec" - "hgrwzaglzogwjvqncjzodaqsblcbpcdpxmrtctzginvtkckhqvdplgjvbzrnarcxjrsbc" - "sbfvpylgjznsuhxcxoqbpxowmsrgwimxjgyzwwmryqvstwzkglgeezelvpvkwefqdatnd" - "dxntikgoqlidfnmdhxzevqzlzubvyleeksdirmmttqthhkvfjggznpmarcamacpvwsrnr" - "ftzfeyasjpxoevyptpdnqokswiondusnuymqwaryrmdgscbnuilxtypuynckancsfnwtg" - "okxhegoifakimxbbafkeannglvsxprqzfekdinssqymtfexf"); - assert_non_null(str); - assert_string_equal(str->str, - "gudacwlwmwxxmvjnwtidmjehzdeexbxjnjowruxjrqpgpfhmvwgqeacdjissntmbtsjid" - "zkcwnnqhxhneolbwqlctcxmrsutolrjikpavxombpfpjyaqltgvzrjidotalcuwrwxtax" - "jiwaxfhfyzymtffusoqywaruxpybwggukltspqqmghzpqstvcvlqbkhquihzndnrvkaqv" - "evazdxrewtgapkompnviiyielanoyowgqhssntyvcvqqtfjmkphywbkvzfyttaalttywh" - "qcechgrwzaglzogwjvqncjzodaqsblcbpcdpxmrtctzginvtkckhqvdplgjvbzrnarcxj" - "rsbcsbfvpylgjznsuhxcxoqbpxowmsrgwimxjgyzwwmryqvstwzkglgeezelvpvkwefqd" - "atnddxntikgoqlidfnmdhxzevqzlzubvyleeksdirmmttqthhkvfjggznpmarcamacpvw" - "srnrftzfeyasjpxoevyptpdnqokswiondusnuymqwaryrmdgscbnuilxtypuynckancsf" - "nwtgokxhegoifakimxbbafkeannglvsxprqzfekdinssqymtfexfcwlwmwxxmvjnwtidm" - "jehzdeexbxjnjowruxjrqpgpfhmvwgqeacdjissntmbtsjidzkcwnnqhxhneolbwqlctc" - "xmrsutolrjikpavxombpfpjyaqltgvzrjidotalcuwrwxtaxjiwaxfhfyzymtffusoqyw" - "aruxpybwggukltspqqmghzpqstvcvlqbkhquihzndnrvkaqvevazdxrewtgapkompnvii" - "yielanoyowgqhssntyvcvqqtfjmkphywbkvzfyttaalttywhqcechgrwzaglzogwjvqnc" - "jzodaqsblcbpcdpxmrtctzginvtkckhqvdplgjvbzrnarcxjrsbcsbfvpylgjznsuhxcx" - "oqbpxowmsrgwimxjgyzwwmryqvstwzkglgeezelvpvkwefqdatnddxntikgoqlidfnmdh" - "xzevqzlzubvyleeksdirmmttqthhkvfjggznpmarcamacpvwsrnrftzfeyasjpxoevypt" - "pdnqokswiondusnuymqwaryrmdgscbnuilxtypuynckancsfnwtgokxhegoifakimxbba" - "fkeannglvsxprqzfekdinssqymtfexf"); - assert_int_equal(str->len, 1204); - assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE * 10); - assert_null(bc_string_free(str, true)); - str = bc_string_new(); - str = bc_string_append(str, NULL); - assert_non_null(str); - assert_string_equal(str->str, ""); - assert_int_equal(str->len, 0); - assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE); - assert_null(bc_string_free(str, true)); - assert_null(bc_string_append(NULL, "asd")); - assert_null(bc_string_append(NULL, NULL)); -} - - -static void -test_string_append_c(void **state) -{ - bc_string_t *str = bc_string_new(); - str = bc_string_append_len(str, "guda", 4); - for (int i = 0; i < 600; i++) - str = bc_string_append_c(str, 'c'); - assert_non_null(str); - assert_string_equal(str->str, - "gudaccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" - "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" - "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" - "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" - "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" - "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" - "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" - "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" - "cccccccccccccccccccccccccccccccccccccccccccccccccccc"); - assert_int_equal(str->len, 604); - assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE * 5); - assert_null(bc_string_free(str, true)); - assert_null(bc_string_append_c(NULL, 0)); -} - - -static void -test_string_append_printf(void **state) -{ - bc_string_t *str = bc_string_new(); - str = bc_string_append_printf(str, "guda: %s %d", "bola", 1); - assert_non_null(str); - assert_string_equal(str->str, "guda: bola 1"); - assert_int_equal(str->len, 12); - assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE); - assert_null(bc_string_free(str, true)); - assert_null(bc_string_append_printf(NULL, "asd")); -} - - -static void -test_string_append_escaped(void **state) -{ - bc_string_t *str = bc_string_new(); - str = bc_string_append_escaped(str, NULL); - assert_non_null(str); - assert_string_equal(str->str, ""); - assert_int_equal(str->len, 0); - assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE); - str = bc_string_append_escaped(str, "foo \\a bar \\\\ lol"); - assert_non_null(str); - assert_string_equal(str->str, "foo a bar \\ lol"); - assert_int_equal(str->len, 15); - assert_int_equal(str->allocated_len, BC_STRING_CHUNK_SIZE); - assert_null(bc_string_free(str, true)); - assert_null(bc_string_append_escaped(NULL, "asd")); -} - - -static void -test_trie_new(void **state) -{ - bc_trie_t *trie = bc_trie_new(free); - assert_non_null(trie); - assert_null(trie->root); - assert_true(trie->free_func == free); - bc_trie_free(trie); -} - - -static void -test_trie_insert(void **state) -{ - bc_trie_t *trie = bc_trie_new(free); - - bc_trie_insert(trie, "bola", bc_strdup("guda")); - assert_true(trie->root->key == 'b'); - assert_null(trie->root->data); - assert_true(trie->root->child->key == 'o'); - assert_null(trie->root->child->data); - assert_true(trie->root->child->child->key == 'l'); - assert_null(trie->root->child->child->data); - assert_true(trie->root->child->child->child->key == 'a'); - assert_null(trie->root->child->child->child->data); - assert_true(trie->root->child->child->child->child->key == '\0'); - assert_string_equal(trie->root->child->child->child->child->data, "guda"); - - - bc_trie_insert(trie, "chu", bc_strdup("nda")); - assert_true(trie->root->key == 'b'); - assert_null(trie->root->data); - assert_true(trie->root->child->key == 'o'); - assert_null(trie->root->child->data); - assert_true(trie->root->child->child->key == 'l'); - assert_null(trie->root->child->child->data); - assert_true(trie->root->child->child->child->key == 'a'); - assert_null(trie->root->child->child->child->data); - assert_true(trie->root->child->child->child->child->key == '\0'); - assert_string_equal(trie->root->child->child->child->child->data, "guda"); - - assert_true(trie->root->next->key == 'c'); - assert_null(trie->root->next->data); - assert_true(trie->root->next->child->key == 'h'); - assert_null(trie->root->next->child->data); - assert_true(trie->root->next->child->child->key == 'u'); - assert_null(trie->root->next->child->child->data); - assert_true(trie->root->next->child->child->child->key == '\0'); - assert_string_equal(trie->root->next->child->child->child->data, "nda"); - - - bc_trie_insert(trie, "bote", bc_strdup("aba")); - assert_true(trie->root->key == 'b'); - assert_null(trie->root->data); - assert_true(trie->root->child->key == 'o'); - assert_null(trie->root->child->data); - assert_true(trie->root->child->child->key == 'l'); - assert_null(trie->root->child->child->data); - assert_true(trie->root->child->child->child->key == 'a'); - assert_null(trie->root->child->child->child->data); - assert_true(trie->root->child->child->child->child->key == '\0'); - assert_string_equal(trie->root->child->child->child->child->data, "guda"); - - assert_true(trie->root->next->key == 'c'); - assert_null(trie->root->next->data); - assert_true(trie->root->next->child->key == 'h'); - assert_null(trie->root->next->child->data); - assert_true(trie->root->next->child->child->key == 'u'); - assert_null(trie->root->next->child->child->data); - assert_true(trie->root->next->child->child->child->key == '\0'); - assert_string_equal(trie->root->next->child->child->child->data, "nda"); - - assert_true(trie->root->child->child->next->key == 't'); - assert_null(trie->root->child->child->next->data); - assert_true(trie->root->child->child->next->child->key == 'e'); - assert_null(trie->root->child->child->next->child->data); - assert_true(trie->root->child->child->next->child->child->key == '\0'); - assert_string_equal(trie->root->child->child->next->child->child->data, "aba"); - - - bc_trie_insert(trie, "bo", bc_strdup("haha")); - assert_true(trie->root->key == 'b'); - assert_null(trie->root->data); - assert_true(trie->root->child->key == 'o'); - assert_null(trie->root->child->data); - assert_true(trie->root->child->child->key == 'l'); - assert_null(trie->root->child->child->data); - assert_true(trie->root->child->child->child->key == 'a'); - assert_null(trie->root->child->child->child->data); - assert_true(trie->root->child->child->child->child->key == '\0'); - assert_string_equal(trie->root->child->child->child->child->data, "guda"); - - assert_true(trie->root->next->key == 'c'); - assert_null(trie->root->next->data); - assert_true(trie->root->next->child->key == 'h'); - assert_null(trie->root->next->child->data); - assert_true(trie->root->next->child->child->key == 'u'); - assert_null(trie->root->next->child->child->data); - assert_true(trie->root->next->child->child->child->key == '\0'); - assert_string_equal(trie->root->next->child->child->child->data, "nda"); - - assert_true(trie->root->child->child->next->key == 't'); - assert_null(trie->root->child->child->next->data); - assert_true(trie->root->child->child->next->child->key == 'e'); - assert_null(trie->root->child->child->next->child->data); - assert_true(trie->root->child->child->next->child->child->key == '\0'); - assert_string_equal(trie->root->child->child->next->child->child->data, "aba"); - - assert_true(trie->root->child->child->next->next->key == '\0'); - assert_string_equal(trie->root->child->child->next->next->data, "haha"); - - bc_trie_free(trie); - - - trie = bc_trie_new(free); - - bc_trie_insert(trie, "chu", bc_strdup("nda")); - assert_true(trie->root->key == 'c'); - assert_null(trie->root->data); - assert_true(trie->root->child->key == 'h'); - assert_null(trie->root->child->data); - assert_true(trie->root->child->child->key == 'u'); - assert_null(trie->root->child->child->data); - assert_true(trie->root->child->child->child->key == '\0'); - assert_string_equal(trie->root->child->child->child->data, "nda"); - - - bc_trie_insert(trie, "bola", bc_strdup("guda")); - assert_true(trie->root->key == 'c'); - assert_null(trie->root->data); - assert_true(trie->root->child->key == 'h'); - assert_null(trie->root->child->data); - assert_true(trie->root->child->child->key == 'u'); - assert_null(trie->root->child->child->data); - assert_true(trie->root->child->child->child->key == '\0'); - assert_string_equal(trie->root->child->child->child->data, "nda"); - - assert_true(trie->root->next->key == 'b'); - assert_null(trie->root->next->data); - assert_true(trie->root->next->child->key == 'o'); - assert_null(trie->root->next->child->data); - assert_true(trie->root->next->child->child->key == 'l'); - assert_null(trie->root->next->child->child->data); - assert_true(trie->root->next->child->child->child->key == 'a'); - assert_null(trie->root->next->child->child->child->data); - assert_true(trie->root->next->child->child->child->child->key == '\0'); - assert_string_equal(trie->root->next->child->child->child->child->data, "guda"); - - - bc_trie_insert(trie, "bote", bc_strdup("aba")); - assert_true(trie->root->key == 'c'); - assert_null(trie->root->data); - assert_true(trie->root->child->key == 'h'); - assert_null(trie->root->child->data); - assert_true(trie->root->child->child->key == 'u'); - assert_null(trie->root->child->child->data); - assert_true(trie->root->child->child->child->key == '\0'); - assert_string_equal(trie->root->child->child->child->data, "nda"); - - assert_true(trie->root->next->key == 'b'); - assert_null(trie->root->next->data); - assert_true(trie->root->next->child->key == 'o'); - assert_null(trie->root->next->child->data); - assert_true(trie->root->next->child->child->key == 'l'); - assert_null(trie->root->next->child->child->data); - assert_true(trie->root->next->child->child->child->key == 'a'); - assert_null(trie->root->next->child->child->child->data); - assert_true(trie->root->next->child->child->child->child->key == '\0'); - assert_string_equal(trie->root->next->child->child->child->child->data, "guda"); - - assert_true(trie->root->next->child->child->next->key == 't'); - assert_null(trie->root->next->child->child->next->data); - assert_true(trie->root->next->child->child->next->child->key == 'e'); - assert_null(trie->root->next->child->child->next->child->data); - assert_true(trie->root->next->child->child->next->child->child->key == '\0'); - assert_string_equal(trie->root->next->child->child->next->child->child->data, "aba"); - - - bc_trie_insert(trie, "bo", bc_strdup("haha")); - assert_true(trie->root->key == 'c'); - assert_null(trie->root->data); - assert_true(trie->root->child->key == 'h'); - assert_null(trie->root->child->data); - assert_true(trie->root->child->child->key == 'u'); - assert_null(trie->root->child->child->data); - assert_true(trie->root->child->child->child->key == '\0'); - assert_string_equal(trie->root->child->child->child->data, "nda"); - - assert_true(trie->root->next->key == 'b'); - assert_null(trie->root->next->data); - assert_true(trie->root->next->child->key == 'o'); - assert_null(trie->root->next->child->data); - assert_true(trie->root->next->child->child->key == 'l'); - assert_null(trie->root->next->child->child->data); - assert_true(trie->root->next->child->child->child->key == 'a'); - assert_null(trie->root->next->child->child->child->data); - assert_true(trie->root->next->child->child->child->child->key == '\0'); - assert_string_equal(trie->root->next->child->child->child->child->data, "guda"); - - assert_true(trie->root->next->child->child->next->key == 't'); - assert_null(trie->root->next->child->child->next->data); - assert_true(trie->root->next->child->child->next->child->key == 'e'); - assert_null(trie->root->next->child->child->next->child->data); - assert_true(trie->root->next->child->child->next->child->child->key == '\0'); - assert_string_equal(trie->root->next->child->child->next->child->child->data, "aba"); - - assert_true(trie->root->next->child->child->next->next->key == '\0'); - assert_string_equal(trie->root->next->child->child->next->next->data, "haha"); - - bc_trie_free(trie); -} - - -static void -test_trie_insert_duplicated(void **state) -{ - bc_trie_t *trie = bc_trie_new(free); - - bc_trie_insert(trie, "bola", bc_strdup("guda")); - assert_true(trie->root->key == 'b'); - assert_null(trie->root->data); - assert_true(trie->root->child->key == 'o'); - assert_null(trie->root->child->data); - assert_true(trie->root->child->child->key == 'l'); - assert_null(trie->root->child->child->data); - assert_true(trie->root->child->child->child->key == 'a'); - assert_null(trie->root->child->child->child->data); - assert_true(trie->root->child->child->child->child->key == '\0'); - assert_string_equal(trie->root->child->child->child->child->data, "guda"); - - bc_trie_insert(trie, "bola", bc_strdup("asdf")); - assert_true(trie->root->key == 'b'); - assert_null(trie->root->data); - assert_true(trie->root->child->key == 'o'); - assert_null(trie->root->child->data); - assert_true(trie->root->child->child->key == 'l'); - assert_null(trie->root->child->child->data); - assert_true(trie->root->child->child->child->key == 'a'); - assert_null(trie->root->child->child->child->data); - assert_true(trie->root->child->child->child->child->key == '\0'); - assert_string_equal(trie->root->child->child->child->child->data, "asdf"); - - bc_trie_free(trie); - - trie = NULL; - bc_trie_insert(trie, "bola", NULL); - assert_null(trie); -} - - -static void -test_trie_keep_data(void **state) -{ - bc_trie_t *trie = bc_trie_new(NULL); - - char *t1 = "guda"; - char *t2 = "nda"; - char *t3 = "aba"; - char *t4 = "haha"; - - bc_trie_insert(trie, "bola", t1); - bc_trie_insert(trie, "chu", t2); - bc_trie_insert(trie, "bote", t3); - bc_trie_insert(trie, "bo", t4); - - bc_trie_free(trie); - - assert_string_equal(t1, "guda"); - assert_string_equal(t2, "nda"); - assert_string_equal(t3, "aba"); - assert_string_equal(t4, "haha"); -} - - -static void -test_trie_lookup(void **state) -{ - bc_trie_t *trie = bc_trie_new(free); - - bc_trie_insert(trie, "bola", bc_strdup("guda")); - bc_trie_insert(trie, "chu", bc_strdup("nda")); - bc_trie_insert(trie, "bote", bc_strdup("aba")); - bc_trie_insert(trie, "bo", bc_strdup("haha")); - - assert_string_equal(bc_trie_lookup(trie, "bola"), "guda"); - assert_string_equal(bc_trie_lookup(trie, "chu"), "nda"); - assert_string_equal(bc_trie_lookup(trie, "bote"), "aba"); - assert_string_equal(bc_trie_lookup(trie, "bo"), "haha"); - - assert_null(bc_trie_lookup(trie, "arcoiro")); - - bc_trie_free(trie); - - trie = bc_trie_new(free); - - bc_trie_insert(trie, "chu", bc_strdup("nda")); - bc_trie_insert(trie, "bola", bc_strdup("guda")); - bc_trie_insert(trie, "bote", bc_strdup("aba")); - bc_trie_insert(trie, "bo", bc_strdup("haha")); - bc_trie_insert(trie, "copa", bc_strdup("bu")); - bc_trie_insert(trie, "b", bc_strdup("c")); - bc_trie_insert(trie, "test", bc_strdup("asd")); - - assert_string_equal(bc_trie_lookup(trie, "bola"), "guda"); - assert_string_equal(bc_trie_lookup(trie, "chu"), "nda"); - assert_string_equal(bc_trie_lookup(trie, "bote"), "aba"); - assert_string_equal(bc_trie_lookup(trie, "bo"), "haha"); - - assert_null(bc_trie_lookup(trie, "arcoiro")); - - bc_trie_free(trie); - - assert_null(bc_trie_lookup(NULL, "bola")); -} - - -static void -test_trie_size(void **state) -{ - bc_trie_t *trie = bc_trie_new(free); - - bc_trie_insert(trie, "bola", bc_strdup("guda")); - bc_trie_insert(trie, "chu", bc_strdup("nda")); - bc_trie_insert(trie, "bote", bc_strdup("aba")); - bc_trie_insert(trie, "bo", bc_strdup("haha")); - - assert_int_equal(bc_trie_size(trie), 4); - assert_int_equal(bc_trie_size(NULL), 0); - - bc_trie_free(trie); - - trie = bc_trie_new(free); - - bc_trie_insert(trie, "chu", bc_strdup("nda")); - bc_trie_insert(trie, "bola", bc_strdup("guda")); - bc_trie_insert(trie, "bote", bc_strdup("aba")); - bc_trie_insert(trie, "bo", bc_strdup("haha")); - bc_trie_insert(trie, "copa", bc_strdup("bu")); - bc_trie_insert(trie, "b", bc_strdup("c")); - bc_trie_insert(trie, "test", bc_strdup("asd")); - - assert_int_equal(bc_trie_size(trie), 7); - assert_int_equal(bc_trie_size(NULL), 0); - - bc_trie_free(trie); -} - - -static size_t counter; -static char *expected_keys[] = {"chu", "copa", "bola", "bote", "bo", "b", "test", "testa"}; -static char *expected_datas[] = {"nda", "bu", "guda", "aba", "haha", "c", "asd", "lol"}; - -static void -mock_foreach(const char *key, void *data, void *user_data) -{ - assert_string_equal(user_data, "foo"); - assert_string_equal(key, expected_keys[counter]); - assert_string_equal((char*) data, expected_datas[counter++]); -} - - -static void -test_trie_foreach(void **state) -{ - bc_trie_t *trie = bc_trie_new(free); - - bc_trie_insert(trie, "chu", bc_strdup("nda")); - bc_trie_insert(trie, "bola", bc_strdup("guda")); - bc_trie_insert(trie, "bote", bc_strdup("aba")); - bc_trie_insert(trie, "bo", bc_strdup("haha")); - bc_trie_insert(trie, "copa", bc_strdup("bu")); - bc_trie_insert(trie, "b", bc_strdup("c")); - bc_trie_insert(trie, "test", bc_strdup("asd")); - bc_trie_insert(trie, "testa", bc_strdup("lol")); - - counter = 0; - bc_trie_foreach(trie, mock_foreach, "foo"); - bc_trie_foreach(NULL, mock_foreach, "foo"); - bc_trie_foreach(trie, NULL, "foo"); - bc_trie_foreach(NULL, NULL, "foo"); - assert_int_equal(counter, 8); - - bc_trie_free(trie); -} - - -static void -test_trie_inserted_after_prefix(void **state) -{ - bc_trie_t *trie = bc_trie_new(free); - - bc_trie_insert(trie, "bola", bc_strdup("guda")); - assert_true(trie->root->key == 'b'); - assert_null(trie->root->data); - assert_true(trie->root->child->key == 'o'); - assert_null(trie->root->child->data); - assert_true(trie->root->child->child->key == 'l'); - assert_null(trie->root->child->child->data); - assert_true(trie->root->child->child->child->key == 'a'); - assert_null(trie->root->child->child->child->data); - assert_true(trie->root->child->child->child->child->key == '\0'); - assert_string_equal(trie->root->child->child->child->child->data, "guda"); - - bc_trie_insert(trie, "bolaoo", bc_strdup("asdf")); - assert_true(trie->root->key == 'b'); - assert_null(trie->root->data); - assert_true(trie->root->child->key == 'o'); - assert_null(trie->root->child->data); - assert_true(trie->root->child->child->key == 'l'); - assert_null(trie->root->child->child->data); - assert_true(trie->root->child->child->child->key == 'a'); - assert_null(trie->root->child->child->child->data); - assert_true(trie->root->child->child->child->child->key == '\0'); - assert_string_equal(trie->root->child->child->child->child->data, "guda"); - assert_non_null(trie->root->child->child->child->child->next); - assert_true(trie->root->child->child->child->child->next->key == 'o'); - assert_null(trie->root->child->child->child->child->next->data); - assert_true(trie->root->child->child->child->child->next->child->key == 'o'); - assert_null(trie->root->child->child->child->child->next->child->data); - assert_true(trie->root->child->child->child->child->next->child->child->key == '\0'); - assert_string_equal(trie->root->child->child->child->child->next->child->child->data, "asdf"); - - assert_int_equal(bc_trie_size(trie), 2); - assert_string_equal(bc_trie_lookup(trie, "bola"), "guda"); - assert_string_equal(bc_trie_lookup(trie, "bolaoo"), "asdf"); - - bc_trie_free(trie); -} - - -static void -test_shell_quote(void **state) -{ - char *t; - t = bc_shell_quote(NULL); - assert_string_equal(t, "''"); - free(t); - t = bc_shell_quote("!bola"); - assert_string_equal(t, "''\\!'bola'"); - free(t); - t = bc_shell_quote("'bola"); - assert_string_equal(t, "''\\''bola'"); - free(t); - t = bc_shell_quote("bo!bola"); - assert_string_equal(t, "'bo'\\!'bola'"); - free(t); - t = bc_shell_quote("bo'bola"); - assert_string_equal(t, "'bo'\\''bola'"); - free(t); - t = bc_shell_quote("bola!"); - assert_string_equal(t, "'bola'\\!''"); - free(t); - t = bc_shell_quote("bola'"); - assert_string_equal(t, "'bola'\\'''"); - free(t); -} - - -int -main(void) -{ - const UnitTest tests[] = { - - // slist - unit_test(test_slist_append), - unit_test(test_slist_prepend), - unit_test(test_slist_free), - unit_test(test_slist_length), - - // strfuncs - unit_test(test_strdup), - unit_test(test_strndup), - unit_test(test_strdup_printf), - unit_test(test_str_starts_with), - unit_test(test_str_ends_with), - unit_test(test_str_lstrip), - unit_test(test_str_rstrip), - unit_test(test_str_strip), - unit_test(test_str_split), - unit_test(test_str_replace), - unit_test(test_str_find), - unit_test(test_str_to_bool), - unit_test(test_strv_join), - unit_test(test_strv_length), - - // string - unit_test(test_string_new), - unit_test(test_string_free), - unit_test(test_string_dup), - unit_test(test_string_append_len), - unit_test(test_string_append), - unit_test(test_string_append_c), - unit_test(test_string_append_printf), - unit_test(test_string_append_escaped), - - // trie - unit_test(test_trie_new), - unit_test(test_trie_insert), - unit_test(test_trie_insert_duplicated), - unit_test(test_trie_keep_data), - unit_test(test_trie_lookup), - unit_test(test_trie_size), - unit_test(test_trie_foreach), - unit_test(test_trie_inserted_after_prefix), - - // shell - unit_test(test_shell_quote), - }; - return run_tests(tests); -} |