X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwgtpkg-mustach.c;h=5e4348a29ef61e8d0fa70d9a37aa63ceeadd86ee;hb=7553044c59814c33763bb4b1c34664dceed68735;hp=110f11befc851593c019db43eb15112b9bc4e00b;hpb=dcf194289a6af8c0a6b6263a2686af8fa44a37f2;p=src%2Fapp-framework-main.git diff --git a/src/wgtpkg-mustach.c b/src/wgtpkg-mustach.c index 110f11b..5e4348a 100644 --- a/src/wgtpkg-mustach.c +++ b/src/wgtpkg-mustach.c @@ -21,15 +21,17 @@ #include #include +#include #include #include "mustach.h" +#include "verbose.h" #define MAX_DEPTH 256 /* - * exploration state when instanciating mustache + * exploration state when instantiating mustache */ struct expl { struct json_object *root; @@ -60,8 +62,8 @@ static char *keyval(char *read, int isptr) } else { if (c == '\\') { switch (read[1]) { - case '\\': *write++ = c; - case '=': c = *++read; + case '\\': *write++ = c; /*@fallthrough@*/ + case '=': c = *++read; /*@fallthrough@*/ default: break; } } @@ -90,8 +92,8 @@ static char *first(char **name, int isptr) while (c && c != '/') { if (c == '~') { switch(read[1]) { - case '1': c = '/'; - case '0': read++; + case '1': c = '/'; /*@fallthrough@*/ + case '0': read++; /*@fallthrough@*/ default: break; } } @@ -321,8 +323,29 @@ static struct mustach_itf itf = { */ int apply_mustach(const char *template, struct json_object *root, char **result, size_t *size) { + int rc; struct expl e; + e.root = root; - return mustach(template, &itf, &e, result, size); + rc = mustach(template, &itf, &e, result, size); + if (rc < 0) { + static const char *msgs[] = { + "SYSTEM", + "UNEXPECTED_END", + "EMPTY_TAG", + "TAG_TOO_LONG", + "BAD_SEPARATORS", + "TOO_DEPTH", + "CLOSING", + "BAD_UNESCAPE_TAG" + }; + + rc = -(rc + 1); + ERROR("mustach error found: MUSTACH_ERROR_%s", + rc < 0 || rc >= (int)(sizeof msgs / sizeof * msgs) ? "???" : msgs[rc]); + rc = -1; + errno = EINVAL; + } + return rc; }