X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fgraph_ident.c;h=e7d193266e4d38622ff6ad35a659102cb605be50;hb=6b69fb3290de5d4208dc751f2fdbf8a37212fed8;hp=6111fe7f80b2d51ff375ed0eee9e52c783e5fc8f;hpb=0d346a62412563396fe2ad3e40066ed5c21a69ee;p=collection4.git diff --git a/src/graph_ident.c b/src/graph_ident.c index 6111fe7..e7d1932 100644 --- a/src/graph_ident.c +++ b/src/graph_ident.c @@ -502,35 +502,40 @@ char *ident_to_file (const graph_ident_t *ident) /* {{{ */ return (strdup (buffer)); } /* }}} char *ident_to_file */ -#define ADD_FIELD(field) do { \ - char json[1024]; \ - json_escape_copy (json, ident->field, sizeof (json)); \ - strlcat (buffer, json, sizeof (buffer)); \ -} while (0) - -char *ident_to_json (const graph_ident_t *ident) /* {{{ */ +int ident_to_json (const graph_ident_t *ident, /* {{{ */ + yajl_gen handler) { - char buffer[4096]; + yajl_gen_status status; - buffer[0] = 0; + if ((ident == NULL) || (handler == NULL)) + return (EINVAL); - strlcat (buffer, "{\"host\":\"", sizeof (buffer)); - ADD_FIELD (host); - strlcat (buffer, "\",\"plugin\":\"", sizeof (buffer)); - ADD_FIELD (plugin); - strlcat (buffer, "\",\"plugin_instance\":\"", sizeof (buffer)); - ADD_FIELD (plugin_instance); - strlcat (buffer, "\",\"type\":\"", sizeof (buffer)); - ADD_FIELD (type); - strlcat (buffer, "\",\"type_instance\":\"", sizeof (buffer)); - ADD_FIELD (type_instance); - strlcat (buffer, "\"}", sizeof (buffer)); +#define ADD_STRING(str) do { \ + status = yajl_gen_string (handler, \ + (unsigned char *) (str), \ + (unsigned int) strlen (str)); \ + if (status != yajl_gen_status_ok) \ + return ((int) status); \ +} while (0) - return (strdup (buffer)); -} /* }}} char *ident_to_json */ + yajl_gen_map_open (handler); + ADD_STRING ("host"); + ADD_STRING (ident->host); + ADD_STRING ("plugin"); + ADD_STRING (ident->plugin); + ADD_STRING ("plugin_instance"); + ADD_STRING (ident->plugin_instance); + ADD_STRING ("type"); + ADD_STRING (ident->type); + ADD_STRING ("type_instance"); + ADD_STRING (ident->type_instance); + yajl_gen_map_close (handler); #undef ADD_FIELD + return (0); +} /* }}} char *ident_to_json */ + int ident_describe (const graph_ident_t *ident, /* {{{ */ const graph_ident_t *selector, char *buffer, size_t buffer_size)