From owner-svn-src-all@freebsd.org Fri Nov 20 18:49:09 2015 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C9F98A34CB6; Fri, 20 Nov 2015 18:49:09 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from bigwig.baldwin.cx (bigwig.baldwin.cx [IPv6:2001:470:1f11:75::1]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9E4721624; Fri, 20 Nov 2015 18:49:09 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from ralph.baldwin.cx (c-73-231-226-104.hsd1.ca.comcast.net [73.231.226.104]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 8BD33B93C; Fri, 20 Nov 2015 13:49:08 -0500 (EST) From: John Baldwin To: Craig Rodrigues Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r291090 - head/usr.bin/vmstat Date: Fri, 20 Nov 2015 10:48:16 -0800 Message-ID: <3730527.lGHZa1OL20@ralph.baldwin.cx> User-Agent: KMail/4.14.3 (FreeBSD/10.2-STABLE; KDE/4.14.3; amd64; ; ) In-Reply-To: <201511200515.tAK5FZT8037263@repo.freebsd.org> References: <201511200515.tAK5FZT8037263@repo.freebsd.org> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Fri, 20 Nov 2015 13:49:08 -0500 (EST) X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 20 Nov 2015 18:49:09 -0000 On Friday, November 20, 2015 05:15:35 AM Craig Rodrigues wrote: > Author: rodrigc > Date: Fri Nov 20 05:15:34 2015 > New Revision: 291090 > URL: https://svnweb.freebsd.org/changeset/base/291090 > > Log: > Convert vmstat to use libxo. > > This patch was based on this patch: > https://github.com/Juniper/libxo/blob/master/patches/vmstat.patch > > by Phil Shafer at Juniper Networks, but updated to the latest > vmstat code. > > Reviewed by: allanjude > Differential Revision: https://reviews.freebsd.org/D3935 > > ... > > Modified: head/usr.bin/vmstat/vmstat.c > ============================================================================== > --- head/usr.bin/vmstat/vmstat.c Fri Nov 20 03:24:04 2015 (r291089) > +++ head/usr.bin/vmstat/vmstat.c Fri Nov 20 05:15:34 2015 (r291090) > @@ -277,20 +288,34 @@ retry_nlist: > namelist[X_SUM].n_name = "_cnt"; > goto retry_nlist; > } > - warnx("undefined symbols:"); > for (c = 0; > c < (int)(sizeof(namelist)/sizeof(namelist[0])); > c++) > if (namelist[c].n_type == 0) > - (void)fprintf(stderr, " %s", > + bufsize += strlen(namelist[c].n_name) + 1; > + bufsize += len + 1; > + buf = bp = alloca(bufsize); > + > + for (c = 0; > + c < (int)(sizeof(namelist)/sizeof(namelist[0])); > + c++) > + if (namelist[c].n_type == 0) { > + xo_error(" %s", > namelist[c].n_name); > - (void)fputc('\n', stderr); > + len = strlen(namelist[c].n_name); > + *bp++ = ' '; > + memcpy(bp, namelist[c].n_name, len); > + bp += len; > + } > + *bp = '\0'; > + xo_error("undefined symbols:\n", buf); Please use some sort of string builder (sbuf or open_memstream()) instead of manual string assembly. The former is easier to read and the latter is more error-prone. Suggested replacement: FILE *fp; fp = open_memstream(&buf, &bufsize); for (c = 0; c < nitems(namelist); c++) { if (namelist[c].n_type == 0) { xo_error(" %s", namelist[c].n_name); (void)fprintf(fp, " %s", namelist[c].n_name); } } fclose(fp); xo_error("undefined symbols:\n", buf); free(buf); -- John Baldwin