From owner-svn-src-all@freebsd.org Wed Jul 12 07:55:12 2017 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 B2669DB54B5; Wed, 12 Jul 2017 07:55:12 +0000 (UTC) (envelope-from rdivacky@vlakno.cz) Received: from vlakno.cz (mail.vlakno.cz [91.217.96.224]) by mx1.freebsd.org (Postfix) with ESMTP id 41D7D7DB31; Wed, 12 Jul 2017 07:55:11 +0000 (UTC) (envelope-from rdivacky@vlakno.cz) Received: by vlakno.cz (Postfix, from userid 1002) id B30DCC03A30; Wed, 12 Jul 2017 09:43:26 +0200 (CEST) Date: Wed, 12 Jul 2017 09:43:26 +0200 From: Roman Divacky To: Ryan Libby Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r320908 - head/sys/kern Message-ID: <20170712074326.GA41347@vlakno.cz> References: <201707120730.v6C7UExf041447@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201707120730.v6C7UExf041447@repo.freebsd.org> User-Agent: Mutt/1.8.3 (2017-05-23) X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.23 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: Wed, 12 Jul 2017 07:55:12 -0000 Clang knows about %b modifier and can do some semantic analysis on it. Currently it type checks the first arg to be an int and the second to be a char*. Do you think it would be worth modifying the checks to include this new functionality? Do you think you would like to take a stab at it? Search for FreeBSDbArg in contrib/llvm/tools/clang/lib/Sema/SemaChecking.cpp if you want to take a look. Thanks, Roman On Wed, Jul 12, 2017 at 07:30:14AM +0000, Ryan Libby wrote: > Author: rlibby > Date: Wed Jul 12 07:30:14 2017 > New Revision: 320908 > URL: https://svnweb.freebsd.org/changeset/base/320908 > > Log: > kvprintf %b enhancements > > Make the %b formatter accept number formatting flags. It will now accept > alternate form, precision, and length modifiers. It also now partially > supports field width (but forces left justification). > > Reviewed by: markj > Approved by: markj (mentor) > Sponsored by: Dell EMC Isilon > Differential Revision: https://reviews.freebsd.org/D11284 > > Modified: > head/sys/kern/subr_prf.c > > Modified: head/sys/kern/subr_prf.c > ============================================================================== > --- head/sys/kern/subr_prf.c Wed Jul 12 07:26:07 2017 (r320907) > +++ head/sys/kern/subr_prf.c Wed Jul 12 07:30:14 2017 (r320908) > @@ -650,7 +650,7 @@ kvprintf(char const *fmt, void (*func)(int, void*), vo > uintmax_t num; > int base, lflag, qflag, tmp, width, ladjust, sharpflag, neg, sign, dot; > int cflag, hflag, jflag, tflag, zflag; > - int dwidth, upper; > + int bconv, dwidth, upper; > char padc; > int stop = 0, retval = 0; > > @@ -676,7 +676,7 @@ kvprintf(char const *fmt, void (*func)(int, void*), vo > } > percent = fmt - 1; > qflag = 0; lflag = 0; ladjust = 0; sharpflag = 0; neg = 0; > - sign = 0; dot = 0; dwidth = 0; upper = 0; > + sign = 0; dot = 0; bconv = 0; dwidth = 0; upper = 0; > cflag = 0; hflag = 0; jflag = 0; tflag = 0; zflag = 0; > reswitch: switch (ch = (u_char)*fmt++) { > case '.': > @@ -724,28 +724,9 @@ reswitch: switch (ch = (u_char)*fmt++) { > width = n; > goto reswitch; > case 'b': > - num = (u_int)va_arg(ap, int); > - p = va_arg(ap, char *); > - for (q = ksprintn(nbuf, num, *p++, NULL, 0); *q;) > - PCHAR(*q--); > - > - if (num == 0) > - break; > - > - for (tmp = 0; *p;) { > - n = *p++; > - if (num & (1 << (n - 1))) { > - PCHAR(tmp ? ',' : '<'); > - for (; (n = *p) > ' '; ++p) > - PCHAR(n); > - tmp = 1; > - } else > - for (; *p > ' '; ++p) > - continue; > - } > - if (tmp) > - PCHAR('>'); > - break; > + ladjust = 1; > + bconv = 1; > + goto handle_nosign; > case 'c': > width -= 1; > > @@ -883,6 +864,10 @@ handle_nosign: > num = (u_char)va_arg(ap, int); > else > num = va_arg(ap, u_int); > + if (bconv) { > + q = va_arg(ap, char *); > + base = *q++; > + } > goto number; > handle_sign: > if (jflag) > @@ -939,6 +924,26 @@ number: > > while (*p) > PCHAR(*p--); > + > + if (bconv && num != 0) { > + /* %b conversion flag format. */ > + tmp = retval; > + while (*q) { > + n = *q++; > + if (num & (1 << (n - 1))) { > + PCHAR(retval != tmp ? > + ',' : '<'); > + for (; (n = *q) > ' '; ++q) > + PCHAR(n); > + } else > + for (; *q > ' '; ++q) > + continue; > + } > + if (retval != tmp) { > + PCHAR('>'); > + width -= retval - tmp; > + } > + } > > if (ladjust) > while (width-- > 0) > _______________________________________________ > svn-src-head@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/svn-src-head > To unsubscribe, send any mail to "svn-src-head-unsubscribe@freebsd.org"