From 5606936b03f66f2f62caf1330addc815d2453af8 Mon Sep 17 00:00:00 2001 From: Patrick McDermott Date: Sun, 01 Oct 2017 15:56:23 -0400 Subject: mq_html_list_free(): New function --- (limited to 'src/html.c') diff --git a/src/html.c b/src/html.c index 16882f6..38cc3f0 100644 --- a/src/html.c +++ b/src/html.c @@ -185,47 +185,74 @@ TEXT_ELEMENT(h6) TEXT_ELEMENT(p) #undef TEXT_ELEMENT -gchar * -mq_html_list(const gchar *type, ...) +static gchar * +vlist(const gchar *type, va_list len_ap, va_list str_ap, GDestroyNotify destroy) { gsize len; - va_list ap; gchar *child; - gchar *form; + gchar *list; gchar *ptr; /* TODO: Doesn't support specification of
    list types. */ /* Calculate length. */ len = strlen("\n"); ++len; /* NUL byte */ /* Build string. */ - form = g_new(gchar, len); + list = g_new(gchar, len); if (type && type[0]) { - ptr = g_stpcpy(form, "
      \n"); + ptr = g_stpcpy(list, "
        \n"); } else { - ptr = g_stpcpy(form, "
          \n"); + ptr = g_stpcpy(list, "
            \n"); } - va_start(ap, type); - while ((child = va_arg(ap, gchar *))) { + while ((child = va_arg(str_ap, gchar *))) { ptr = g_stpcpy(ptr, "
          • \n"); ptr = g_stpcpy(ptr, child); - g_free(child); + if (destroy) { + destroy(child); + } ptr = g_stpcpy(ptr, "
          • \n"); } - va_end(ap); ptr = g_stpcpy(ptr, "
          \n"); /* g_stpcpy() adds the NUL. */ - return form; + return list; +} + +gchar * +mq_html_list(const gchar *type, ...) +{ + va_list len_ap; + va_list str_ap; + gchar *list; + + va_start(len_ap, type); + va_start(str_ap, type); + list = vlist(type, len_ap, str_ap, NULL); + va_end(len_ap); + va_end(str_ap); + return list; +} + +gchar * +mq_html_list_free(const gchar *type, ...) +{ + va_list len_ap; + va_list str_ap; + gchar *list; + + va_start(len_ap, type); + va_start(str_ap, type); + list = vlist(type, len_ap, str_ap, g_free); + va_end(len_ap); + va_end(str_ap); + return list; } gchar * -- cgit v0.9.1