From owner-svn-soc-all@FreeBSD.ORG Mon Jul 14 10:16:29 2014 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id D3B06E50 for ; Mon, 14 Jul 2014 10:16:29 +0000 (UTC) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C01002733 for ; Mon, 14 Jul 2014 10:16:29 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.8/8.14.8) with ESMTP id s6EAGTtp086343 for ; Mon, 14 Jul 2014 10:16:29 GMT (envelope-from zkorchev@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.8/8.14.8/Submit) id s6EAGTKQ086124 for svn-soc-all@FreeBSD.org; Mon, 14 Jul 2014 10:16:29 GMT (envelope-from zkorchev@FreeBSD.org) Date: Mon, 14 Jul 2014 10:16:29 GMT Message-Id: <201407141016.s6EAGTKQ086124@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to zkorchev@FreeBSD.org using -f From: zkorchev@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r270818 - soc2014/zkorchev/freebsd_head/usr.bin/wc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Jul 2014 10:16:30 -0000 Author: zkorchev Date: Mon Jul 14 10:16:28 2014 New Revision: 270818 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=270818 Log: libsol support for wc Modified: soc2014/zkorchev/freebsd_head/usr.bin/wc/Makefile soc2014/zkorchev/freebsd_head/usr.bin/wc/wc.c Modified: soc2014/zkorchev/freebsd_head/usr.bin/wc/Makefile ============================================================================== --- soc2014/zkorchev/freebsd_head/usr.bin/wc/Makefile Mon Jul 14 10:16:11 2014 (r270817) +++ soc2014/zkorchev/freebsd_head/usr.bin/wc/Makefile Mon Jul 14 10:16:28 2014 (r270818) @@ -2,4 +2,8 @@ # $FreeBSD$ PROG= wc + +LDADD+= -lsol +CFLAGS+=-DSOL_ON -I/usr/local/include + .include Modified: soc2014/zkorchev/freebsd_head/usr.bin/wc/wc.c ============================================================================== --- soc2014/zkorchev/freebsd_head/usr.bin/wc/wc.c Mon Jul 14 10:16:11 2014 (r270817) +++ soc2014/zkorchev/freebsd_head/usr.bin/wc/wc.c Mon Jul 14 10:16:28 2014 (r270818) @@ -57,11 +57,19 @@ #include #include #include +#if defined(SOL_ON) +# include +#endif static uintmax_t tlinect, twordct, tcharct, tlongline; static int doline, doword, dochar, domulti, dolongline; static volatile sig_atomic_t siginfo; +#if defined(SOL_ON) +static struct sol_stream sol_stream; +#endif +static int sol_format; + static void show_cnt(const char *file, uintmax_t linect, uintmax_t wordct, uintmax_t charct, uintmax_t llct); static int cnt(const char *); @@ -78,6 +86,7 @@ main(int argc, char *argv[]) { int ch, errors, total; + int ismap = 0; (void) setlocale(LC_CTYPE, ""); @@ -113,12 +122,22 @@ if (doline + doword + dochar + domulti + dolongline == 0) doline = doword = dochar = 1; +#if defined(SOL_ON) + sol_format = sol_init(&sol_stream); +#endif + errors = 0; total = 0; if (!*argv) { if (cnt((char *)NULL) != 0) ++errors; } else { +#if defined(SOL_ON) + if (sol_format) { + sol_map_start(&sol_stream); + ismap = 1; + } +#endif do { if (cnt(*argv) != 0) ++errors; @@ -128,6 +147,13 @@ if (total > 1) show_cnt("total", tlinect, twordct, tcharct, tlongline); +#if defined(SOL_ON) + if (sol_format) { + if (ismap) + sol_map_end(&sol_stream); + sol_term(&sol_stream); + } +#endif exit(errors == 0 ? 0 : 1); } @@ -144,18 +170,45 @@ siginfo = 0; } - if (doline) - (void)fprintf(out, " %7ju", linect); - if (doword) - (void)fprintf(out, " %7ju", wordct); - if (dochar || domulti) - (void)fprintf(out, " %7ju", charct); - if (dolongline) - (void)fprintf(out, " %7ju", llct); - if (file != NULL) - (void)fprintf(out, " %s\n", file); - else - (void)fprintf(out, "\n"); + if (sol_format) { +#if defined(SOL_ON) + if (file != NULL) + sol_map_key(&sol_stream, file, strlen(file)); + + sol_map_start(&sol_stream); + if (doline) { + SOL_MAP_KEYL(&sol_stream, "lines"); + sol_uinteger(&sol_stream, linect); + } + if (doword) { + SOL_MAP_KEYL(&sol_stream, "words"); + sol_uinteger(&sol_stream, wordct); + } + if (dochar || domulti) { + SOL_MAP_KEYL(&sol_stream, "chars"); + sol_uinteger(&sol_stream, charct); + } + if (dolongline) { + SOL_MAP_KEYL(&sol_stream, "longest"); + sol_uinteger(&sol_stream, llct); + } + sol_map_end(&sol_stream); +#endif + } + else { + if (doline) + (void)fprintf(out, " %7ju", linect); + if (doword) + (void)fprintf(out, " %7ju", wordct); + if (dochar || domulti) + (void)fprintf(out, " %7ju", charct); + if (dolongline) + (void)fprintf(out, " %7ju", llct); + if (file != NULL) + (void)fprintf(out, " %s\n", file); + else + (void)fprintf(out, "\n"); + } } static int