allow streaming strings to be escaped in a json compatible way; #2276
Costa Tsaousis (ktsaou) committed
Jun 9, 2017 at 00:48 UTC
ee5e75888e5852313ddfea6e7acd1f36cf3afd62
4 files changed
+12
-9
src/common.c
+7
@@ -226,6 +226,13 @@ void json_escape_string(char *dst, const char *src, size_t size) {
226
*d = '\0';
227
}
228
229
+void json_fix_string(char *s) {
230
+ for( ; *s ;s++) {
231
+ if(unlikely(*s == '\\')) *s = '/';
232
+ else if(unlikely(*s == '"')) *s = '\'';
233
+ }
234
+}
235
+
236
int sleep_usec(usec_t usec) {
237
238
#ifndef NETDATA_WITH_USLEEP
src/common.h
+1
@@ -269,6 +269,7 @@ extern void freez(void *ptr);
269
#endif
270
271
extern void json_escape_string(char *dst, const char *src, size_t size);
272
+extern void json_fix_string(char *s);
273
274
extern void *mymmap(const char *filename, size_t size, int flags, int ksm);
275
extern int memory_file_save(const char *filename, void *mem, size_t size);
src/rrdpush.c
+2
-2
@@ -74,7 +74,7 @@ static inline int need_to_send_chart_definition(RRDSET *st) {
74
75
// sends the current chart definition
76
static inline void send_chart_definition(RRDSET *st) {
77
- buffer_sprintf(st->rrdhost->rrdpush_buffer, "CHART '%s' '%s' '%s' '%s' '%s' '%s' '%s' %ld %d\n"
77
+ buffer_sprintf(st->rrdhost->rrdpush_buffer, "CHART \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" %ld %d\n"
78
, st->id
79
, st->name
80
, st->title
@@ -88,7 +88,7 @@ static inline void send_chart_definition(RRDSET *st) {
88
89
RRDDIM *rd;
90
rrddim_foreach_read(rd, st) {
91
- buffer_sprintf(st->rrdhost->rrdpush_buffer, "DIMENSION '%s' '%s' '%s' " COLLECTED_NUMBER_FORMAT " " COLLECTED_NUMBER_FORMAT " '%s %s'\n"
91
+ buffer_sprintf(st->rrdhost->rrdpush_buffer, "DIMENSION \"%s\" \"%s\" \"%s\" " COLLECTED_NUMBER_FORMAT " " COLLECTED_NUMBER_FORMAT " \"%s %s\"\n"
92
, rd->id
93
, rd->name
94
, rrd_algorithm_name(rd->algorithm)
src/rrdset.c
+2
-7
@@ -569,13 +569,8 @@ RRDSET *rrdset_create_custom(
569
if(name && *name) rrdset_set_name(st, name);
570
else rrdset_set_name(st, id);
571
572
- {
573
- char varvalue[CONFIG_MAX_VALUE + 1];
574
- char varvalue2[CONFIG_MAX_VALUE + 1];
575
- snprintfz(varvalue, CONFIG_MAX_VALUE, "%s", title?title:"");
576
- json_escape_string(varvalue2, varvalue, sizeof(varvalue2));
577
- st->title = config_get(st->config_section, "title", varvalue2);
578
- }
572
+ st->title = config_get(st->config_section, "title", title);
573
+ json_fix_string(st->title);
574
575
st->rrdfamily = rrdfamily_create(host, st->family);
576