Subject: Re: question about bitmask_snprintf(9)
To: None <current-users@netbsd.org>
From: Christos Zoulas <christos@astron.com>
List: current-users
Date: 04/21/2007 18:05:04
In article <200704210639277021290004MA23@nm04mta.dion.ne.jp>,
Tetsuya Isaki  <isaki@par.odn.ne.jp> wrote:
>I have a question about new format of bitmask_snprintf(9) in
>-current.
>
>I used new format of bitmask_snprintf(9) to display status
>register in my device driver.  And the status register is
>consists of:
> bit6 is 'NAK' if 1.
> bit3 is 'D0' state if 0, 'D1' state if 1
> bit0 is 'ACK' if 1.
>(Other bits were ommited for easiness here.)
>
>Here is the code I written, using 'F\B\L' and ':\V' features:
>
>    bitmask_snprintf(status_register,
>        "\177\20"
>        "b\6NAK\0"
>        "F\3\1" ":\1D1\0" ":\0D0\0" /* D0 or D1 */
>        "b\0ACK\0"
>        "\0",
>        str, sizeof(str));
>	printf("stat=%s\n", str);
>
>I expect like:
>	stat=1<D0,ACK>
>	stat=9<D1,ACK>
>	stat=40<NAK,D0>
>	stat=48<NAK,D1>
>
>but it displays:
>	stat=1D0<ACK>
>	stat=9D1<ACK>
>	stat=40<NAKD0>
>	stat=48<NAKD1>
>
>So, do I miss the usage? or it this a bug?  If it's a bug,
>I can fix it with following patch.  Does anyone review, please?
>
>--- sys/kern/subr_prf.c~	2007-03-21 23:32:31.000000000 +0900
>+++ sys/kern/subr_prf.c	2007-03-21 23:36:53.000000000 +0900
>@@ -980,6 +980,10 @@
> 					goto skip;
> 				if (ch == '=')
> 					PUTBYTE(bp, '=', left);
>+				else {
>+					PUTBYTE(bp, sep, left);
>+					sep = ',';
>+				}
> 				PUTSTR(bp, p, left);
> 				break;
> 			default:
>

Looks like a bug to me. The other formats deal with the separator correctly.

christos