[master] 7b5d416f4 Add from-to variant named vjsn_parse_end()

Poul-Henning Kamp phk at FreeBSD.org
Wed May 22 08:50:14 UTC 2019


commit 7b5d416f4aec9f640428ba2e07775dab21b027dc
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed May 22 05:54:00 2019 +0000

    Add from-to variant named vjsn_parse_end()

diff --git a/include/vjsn.h b/include/vjsn.h
index 3b2f16b30..ebd4cafc5 100644
--- a/include/vjsn.h
+++ b/include/vjsn.h
@@ -54,6 +54,7 @@ struct vjsn {
 	const char		*err;
 };
 
+struct vjsn *vjsn_parse_end(const char *, const char *, const char **);
 struct vjsn *vjsn_parse(const char *, const char **);
 void vjsn_delete(struct vjsn **);
 void vjsn_dump(const struct vjsn *js, FILE *fo);
diff --git a/lib/libvarnish/vjsn.c b/lib/libvarnish/vjsn.c
index 6a265cbe0..653fb340d 100644
--- a/lib/libvarnish/vjsn.c
+++ b/lib/libvarnish/vjsn.c
@@ -395,20 +395,28 @@ vjsn_value(struct vjsn *js)
 }
 
 struct vjsn *
-vjsn_parse(const char *src, const char **err)
+vjsn_parse_end(const char *from, const char *to, const char **err)
 {
 	struct vjsn *js;
 	char *p, *e;
+	size_t sz;
 
-	AN(src);
+	AN(from);
 
 	AN(err);
 	*err = NULL;
 
-	p = strdup(src);
+	if (to == NULL)
+		to = strchr(from, '\0');
+	AN(to);
+
+	sz = to - from;
+
+	p = malloc(sz + 1L);
 	AN(p);
-	e = strchr(p, '\0');
-	AN(e);
+	memcpy(p, from, sz);
+	p[sz] = '\0';
+	e = p + sz;
 
 	ALLOC_OBJ(js, VJSN_MAGIC);
 	AN(js);
@@ -431,6 +439,13 @@ vjsn_parse(const char *src, const char **err)
 	return (js);
 }
 
+struct vjsn *
+vjsn_parse(const char *src, const char **err)
+{
+
+	return (vjsn_parse_end(src, NULL, err));
+}
+
 struct vjsn_val *
 vjsn_child(const struct vjsn_val *vv, const char *key)
 {


More information about the varnish-commit mailing list