summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2017-03-21 17:54:30 +0100
committerJosé Bollo <jose.bollo@iot.bzh>2017-03-21 17:54:30 +0100
commitdcf194289a6af8c0a6b6263a2686af8fa44a37f2 (patch)
tree006beef1d4685120f4f1d7f2f44c93613a18954b /src
parent2c566e2dc9df934fb3884f9d4a9ad7ffc73a4aab (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')
-rw-r--r--src/wgtpkg-mustach.c35
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;