socsvn commit: r268779 - soc2014/zkorchev/freebsd_head/usr.bin/vmstat

zkorchev at FreeBSD.org zkorchev at FreeBSD.org
Wed May 28 17:03:33 UTC 2014


Author: zkorchev
Date: Wed May 28 17:03:32 2014
New Revision: 268779
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=268779

Log:
  Added several features to SOL

Added:
  soc2014/zkorchev/freebsd_head/usr.bin/vmstat/sol.c
  soc2014/zkorchev/freebsd_head/usr.bin/vmstat/sol.h

Added: soc2014/zkorchev/freebsd_head/usr.bin/vmstat/sol.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2014/zkorchev/freebsd_head/usr.bin/vmstat/sol.c	Wed May 28 17:03:32 2014	(r268779)
@@ -0,0 +1,158 @@
+/*-
+ * Copyright (c) 2014
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <unistd.h>
+
+#include "sol.h"
+
+//static struct sol_stream sol;
+
+// TODO error checks
+
+int sol_init(struct sol_stream *restrict stream, enum sol_format format)
+{
+	stream->f = format;
+	stream->ctx.g = yajl_gen_alloc(0);
+
+	//sol.f = format;
+	//sol.ctx.g = yajl_gen_alloc(0);
+
+	return 0;
+}
+
+void sol_term(struct sol_stream *restrict 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;
+	}
+
+	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)
+{
+	yajl_gen_array_open(stream->ctx.g);
+
+	return 0;
+}
+
+int sol_array_end(struct sol_stream *restrict stream)
+{
+	yajl_gen_array_close(stream->ctx.g);
+
+	return 0;
+}
+
+int sol_string(struct sol_stream *restrict stream, const char *data, size_t length)
+{
+	// TODO ?handle special characters
+	yajl_gen_string(stream->ctx.g, (const unsigned char *)data, length);
+
+	return 0;
+}
+
+int sol_integer(struct sol_stream *restrict stream, long long value)
+{
+	yajl_gen_integer(stream->ctx.g, value);
+
+	return 0;
+}
+
+int sol_map_start(struct sol_stream *restrict stream)
+{
+	yajl_gen_map_open(stream->ctx.g);
+
+	return 0;
+}
+
+int sol_map_end(struct sol_stream *restrict stream)
+{
+	yajl_gen_map_close(stream->ctx.g);
+
+	return 0;
+}
+
+int sol_map_key(struct sol_stream *restrict stream, const char *key, size_t length)
+{
+	// TODO error if value is expected
+
+	// TODO ?handle special characters
+	yajl_gen_string(stream->ctx.g, (const unsigned char *)key, length);
+
+	return 0;
+}
+
+int sol_map_string(struct sol_stream *restrict stream, const char *value, size_t length)
+{
+	// TODO error if key is expected?
+
+	// TODO ?handle special characters
+	yajl_gen_string(stream->ctx.g, (const unsigned char *)value, length);
+
+	return 0;
+}
+
+int sol_map_integer(struct sol_stream *restrict stream, long long value)
+{
+	// TODO error if key is expected?
+
+	yajl_gen_integer(stream->ctx.g, value);
+
+	return 0;
+}
+
+int sol_map_float(struct sol_stream *restrict stream, double value)
+{
+	// TODO error if key is expected?
+
+	// TODO round mantissa?
+	yajl_gen_double(stream->ctx.g, value);
+
+	return 0;
+}

Added: soc2014/zkorchev/freebsd_head/usr.bin/vmstat/sol.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ soc2014/zkorchev/freebsd_head/usr.bin/vmstat/sol.h	Wed May 28 17:03:32 2014	(r268779)
@@ -0,0 +1,32 @@
+#include <yajl/yajl_gen.h>	// libyajl
+
+enum sol_format
+{
+	SOL_JSON = 1,
+};
+
+struct sol_stream
+{
+	enum sol_format f;
+	union
+	{
+		yajl_gen g;
+	} ctx;
+};
+
+int sol_init(struct sol_stream *restrict stream, enum sol_format format);
+void sol_term(struct sol_stream *restrict stream);
+
+int sol_array_start(struct sol_stream *restrict stream);
+int sol_array_end(struct sol_stream *restrict stream);
+
+int sol_integer(struct sol_stream *restrict stream, long long value);
+int sol_string(struct sol_stream *restrict stream, const char *data, size_t length);
+
+int sol_map_start(struct sol_stream *restrict stream);
+int sol_map_end(struct sol_stream *restrict stream);
+
+int sol_map_key(struct sol_stream *restrict stream, const char *key, size_t length);
+int sol_map_string(struct sol_stream *restrict stream, const char *value, size_t length);
+int sol_map_integer(struct sol_stream *restrict stream, long long value);
+int sol_map_float(struct sol_stream *restrict stream, double value);


More information about the svn-soc-all mailing list