gww@marduk.UUCP (Gary Winiger) (09/05/87)
Subject: lib/libc/stdio/strout.c does not process all the prefix characters. +Fix Index: lib/libc/stdio/strout.c 4.3BSD +Fix Description: If _strout is called as an aid to _doprnt (obviously not on a VAX), it does not correctly process any prefix character other than '-' when right adjusting with leading zeros. Repeat-By: _strout(7, "0xffff\n", -6, stdout, '0'); fflush(stdout); Fix: Take into account all prefix characters. The attached code resolves this problem at Elxsi. Gary.. {ucbvax!sun,lll-lcc!lll-tis,amdahl!altos86,bridge2}!elxsi!gww --------- cut --------- snip --------- :.,$w diff ------------- *** /tmp/,RCSt1002845 Fri Feb 6 10:21:07 1987 --- strout.c Fri Feb 6 10:08:36 1987 *************** *** 1,11 **** /* * $Log: strout.c,v $ * Revision 1.1 87/01/14 14:07:46 gww * Initial revision * */ #if defined(LIBC_SCCS) && !defined(lint) ! static char *ERcsId = "$Header: strout.c,v 1.1 87/01/14 14:07:46 gww Exp $ ENIX BSD"; static char sccsid[] = "@(#)strout.c 5.2 (Berkeley) 3/9/86"; #endif LIBC_SCCS and not lint --- 1,14 ---- /* * $Log: strout.c,v $ + * Revision 1.2 87/02/06 10:07:43 gww + * Take into account all prefix characters (-,+,0x,0X), not just '-'. + * * Revision 1.1 87/01/14 14:07:46 gww * Initial revision * */ #if defined(LIBC_SCCS) && !defined(lint) ! static char *ERcsId = "$Header: strout.c,v 1.2 87/02/06 10:07:43 gww Exp $ ENIX BSD"; static char sccsid[] = "@(#)strout.c 5.2 (Berkeley) 3/9/86"; #endif LIBC_SCCS and not lint *************** *** 16,27 **** register count; int adjust; register FILE *file; ! { ! while (adjust < 0) { ! if (*string=='-' && fillch=='0') { putc(*string++, file); count--; } putc(fillch, file); adjust++; } --- 19,48 ---- register count; int adjust; register FILE *file; ! { ! /* output prefix characters before filling */ ! ! if ((adjust < 0) && (fillch == '0')) { ! switch (*string) { ! case '-': ! case '+': ! case ' ': putc(*string++, file); count--; + break; + case '0': + if ((string[1] == 'x') || (string[1] == 'X')) { + putc(*string++, file); + putc(*string++, file); + count -= 2; + } + break; + default: + break; } + } + + while (adjust < 0) { putc(fillch, file); adjust++; }