diff options
Diffstat (limited to 'handler.c')
-rw-r--r-- | handler.c | 15 |
1 files changed, 9 insertions, 6 deletions
@@ -3,21 +3,24 @@ #include <tidybuffio.h> #include <icclient.h> -static void recurse_catalog(TidyDoc doc, TidyNode tnod, struct icclient_catalog **catalog) +static void recurse_catalog(TidyDoc doc, TidyNode tnod, const char *image_dir, + struct icclient_catalog **catalog) { for (TidyNode child = tidyGetChild(tnod); child; child = tidyGetNext(child)) { ctmbstr name = tidyNodeGetName(child); if (!name) continue; if (strcmp(name, "img")) { - recurse_catalog(doc, child, catalog); + recurse_catalog(doc, child, image_dir, catalog); continue; } - static const char *prefix = IMAGE_DIR"/thumb/"; + static const char *subdir = "/thumb/"; + char prefix[strlen(image_dir) + strlen(subdir) + 1]; size_t prefix_len = strlen(prefix); bool bail = false; for (TidyAttr attr = tidyAttrFirst(child); attr; attr = tidyAttrNext(attr)) - if (!strcmp(tidyAttrName(attr), "src") && strncmp(tidyAttrValue(attr), prefix, prefix_len)) { + if (!strcmp(tidyAttrName(attr), "src") + && strncmp(tidyAttrValue(attr), prefix, prefix_len)) { bail = true; break; } @@ -47,7 +50,7 @@ static void recurse_catalog(TidyDoc doc, TidyNode tnod, struct icclient_catalog } } -struct icclient_catalog *catalog_data(const char *response) +struct icclient_catalog *catalog_data(const char *response, const char *image_dir) { TidyDoc tdoc = tidyCreate(); TidyBuffer output = {0}; @@ -55,7 +58,7 @@ struct icclient_catalog *catalog_data(const char *response) tidySaveBuffer(tdoc, &output); struct icclient_catalog *catalog = malloc(sizeof(struct icclient_catalog)); catalog->length = 0; - recurse_catalog(tdoc, tidyGetRoot(tdoc), &catalog); + recurse_catalog(tdoc, tidyGetRoot(tdoc), image_dir, &catalog); tidyBufFree(&output); tidyRelease(tdoc); return catalog; |