diff options
author | José Bollo <jose.bollo@iot.bzh> | 2017-03-21 17:54:30 +0100 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2017-03-21 17:54:30 +0100 |
commit | dcf194289a6af8c0a6b6263a2686af8fa44a37f2 (patch) | |
tree | 006beef1d4685120f4f1d7f2f44c93613a18954b /src/wgtpkg-mustach.c | |
parent | 2c566e2dc9df934fb3884f9d4a9ad7ffc73a4aab (diff) |
Allows or in mustache instanciation
This allows to simplify the configuration file
afm-unit.conf.
Restore the type application/vnd.agl.service
Change-Id: Iaadde2c2d96155cea6d1b8bee4d3c78e885cf44a
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'src/wgtpkg-mustach.c')
-rw-r--r-- | src/wgtpkg-mustach.c | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/src/wgtpkg-mustach.c b/src/wgtpkg-mustach.c index cc79505..110f11b 100644 --- a/src/wgtpkg-mustach.c +++ b/src/wgtpkg-mustach.c @@ -28,7 +28,9 @@ #define MAX_DEPTH 256 - +/* + * exploration state when instanciating mustache + */ struct expl { struct json_object *root; int depth; @@ -111,6 +113,31 @@ static char *first(char **name, int isptr) } /* + * Returns the unescaped version of the first value + * and update 'val' to point the next value if any. + */ +static char *value(char **val) +{ + char *r, *read, *write, c; + + c = *(read = *val); + if (!c) + r = NULL; + else { + r = write = read; + while (c && c != '|') { + if (c == '\\' && (read[1] == '|' || read[1] == '\\')) + c = *++read; + *write++ = c; + c = *++read; + } + *write = 0; + *val = read + !!c; + } + return r; +} + +/* * Replace the last occurence of ':' followed by * any character not being '*' by ':*', the * globalisation of the key. @@ -179,7 +206,11 @@ static struct json_object *find(struct expl *e, const char *name) /* check the value if requested */ if (v) { i = v[0] == '!'; - if (i == !strcmp(&v[i], json_object_get_string(o))) + v += i; + do { + c = value(&v); + } while (c && strcmp(c, json_object_get_string(o))); + if (i != !c) o = NULL; } return o; |