Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 22 Jun 2014 21:28:27 GMT
From:      zkorchev@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r269886 - soc2014/zkorchev/freebsd_head/lib/libsol
Message-ID:  <201406222128.s5MLSRui069769@socsvn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201406222128.s5MLSRui069769>