Date: Wed, 28 May 2014 17:03:32 GMT From: zkorchev@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r268779 - soc2014/zkorchev/freebsd_head/usr.bin/vmstat Message-ID: <201405281703.s4SH3WpF019388@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201405281703.s4SH3WpF019388>