summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 795d172)
raw | patch | inline | side by side (parent: 795d172)
author | Florian Forster <ff@octo.it> | |
Wed, 21 Jul 2010 09:05:23 +0000 (11:05 +0200) | ||
committer | Florian Forster <octo@leeloo.lan.home.verplant.org> | |
Wed, 21 Jul 2010 09:05:23 +0000 (11:05 +0200) |
src/graph_ident.c | patch | blob | history | |
src/graph_ident.h | patch | blob | history |
diff --git a/src/graph_ident.c b/src/graph_ident.c
index 6111fe7f80b2d51ff375ed0eee9e52c783e5fc8f..e7d193266e4d38622ff6ad35a659102cb605be50 100644 (file)
--- a/src/graph_ident.c
+++ b/src/graph_ident.c
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)
diff --git a/src/graph_ident.h b/src/graph_ident.h
index 5787ad58d411e62a9a0b2848173bc5914439b9f8..ddba4776561da3408aa66037b232752aa7d76cec 100644 (file)
--- a/src/graph_ident.h
+++ b/src/graph_ident.h
#define GRAPH_IDENT_H 1
#include <time.h>
+
+#include <yajl/yajl_gen.h>
+
#include "graph_types.h"
#define ANY_TOKEN "/any/"
char *ident_to_string (const graph_ident_t *ident);
char *ident_to_file (const graph_ident_t *ident);
-char *ident_to_json (const graph_ident_t *ident);
+int ident_to_json (const graph_ident_t *ident,
+ yajl_gen handler);
int ident_describe (const graph_ident_t *ident, const graph_ident_t *selector,
char *buffer, size_t buffer_size);