socsvn commit: r269886 - soc2014/zkorchev/freebsd_head/lib/libsol
zkorchev at FreeBSD.org
zkorchev at FreeBSD.org
Sun Jun 22 21:28:28 UTC 2014
Author: zkorchev
Date: Sun Jun 22 21:28:26 2014
New Revision: 269886
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=269886
Log:
libsol improvements
Modified:
soc2014/zkorchev/freebsd_head/lib/libsol/sol.c
soc2014/zkorchev/freebsd_head/lib/libsol/sol.h
Modified: soc2014/zkorchev/freebsd_head/lib/libsol/sol.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/lib/libsol/sol.c Sun Jun 22 21:05:39 2014 (r269885)
+++ soc2014/zkorchev/freebsd_head/lib/libsol/sol.c Sun Jun 22 21:28:26 2014 (r269886)
@@ -24,6 +24,8 @@
*/
#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
#include "sol.h"
@@ -34,45 +36,42 @@
// TODO unsigned type support (used for fstat pipes)
-int sol_init(struct sol_stream *restrict stream, enum sol_format format)
+int sol_init(struct sol_stream *restrict stream)
{
- stream->f = format;
- stream->ctx.g = yajl_gen_alloc(0);
+ char *format = getenv("SOL_FORMAT");
- //sol.f = format;
- //sol.ctx.g = yajl_gen_alloc(0);
+ if (!format)
+ return 0;
+ if (!strcmp(format, "json"))
+ stream->f = SOL_JSON;
+ else
+ return 0;
- return 0;
+ //stream->f = format;
+ stream->ctx.g = yajl_gen_alloc(0);
+
+ return stream->f;
}
-void sol_term(struct sol_stream *restrict stream)
+static void flush(struct sol_stream *stream)
{
const char *buffer;
size_t length;
-
switch (stream->f)
{
case SOL_JSON:
yajl_gen_get_buf(stream->ctx.g, (const unsigned char **)&buffer, &length);
write(1, buffer, length);
- write(1, "\n", 1); // TODO change this
yajl_gen_clear(stream->ctx.g);
break;
}
+}
+void sol_term(struct sol_stream *restrict stream)
+{
+ flush(stream);
+ write(1, "\n", 1); // TODO change this
yajl_gen_free(stream->ctx.g);
-
- /*switch (sol.f)
- {
- case SOL_JSON:
- yajl_gen_get_buf(sol.ctx.g, (const unsigned char **)&buffer, &length);
- write(1, buffer, length);
- write(1, "\n", 1); // TODO change this
- yajl_gen_clear(sol.ctx.g);
- break;
- }
-
- yajl_gen_free(sol.ctx.g);*/
}
int sol_array_start(struct sol_stream *restrict stream)
@@ -84,6 +83,7 @@
int sol_array_end(struct sol_stream *restrict stream)
{
+ flush(stream);
yajl_gen_array_close(stream->ctx.g);
return 0;
@@ -98,6 +98,7 @@
int sol_map_end(struct sol_stream *restrict stream)
{
+ flush(stream);
yajl_gen_map_close(stream->ctx.g);
return 0;
Modified: soc2014/zkorchev/freebsd_head/lib/libsol/sol.h
==============================================================================
--- soc2014/zkorchev/freebsd_head/lib/libsol/sol.h Sun Jun 22 21:05:39 2014 (r269885)
+++ soc2014/zkorchev/freebsd_head/lib/libsol/sol.h Sun Jun 22 21:28:26 2014 (r269886)
@@ -29,21 +29,16 @@
#define SOL_MAP_KEYL(stream, key) sol_map_key(stream, key, sizeof(key) - 1)
-enum sol_format
-{
- SOL_JSON = 1,
-};
-
struct sol_stream
{
- enum sol_format f;
+ enum {SOL_JSON = 1} f;
union
{
yajl_gen g;
} ctx;
};
-int sol_init(struct sol_stream *restrict stream, enum sol_format format);
+int sol_init(struct sol_stream *restrict stream);
void sol_term(struct sol_stream *restrict stream);
int sol_array_start(struct sol_stream *restrict stream);
More information about the svn-soc-all
mailing list