Date: Wed, 6 Feb 2002 23:06:12 +1100 (EST) From: "Tim J. Robbins" <tim@robbins.dropbear.id.au> To: FreeBSD-gnats-submit@freebsd.org Subject: bin/34663: [PATCH] vintage tr(1) -c "" bug Message-ID: <200202061206.g16C6CB38865@descent.robbins.dropbear.id.au>
next in thread | raw e-mail | index | archive | help
>Number: 34663 >Category: bin >Synopsis: [PATCH] vintage tr(1) -c "" bug >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Feb 06 04:10:02 PST 2002 >Closed-Date: >Last-Modified: >Originator: Tim J. Robbins >Release: FreeBSD 4.5-STABLE i386 >Organization: >Environment: System: FreeBSD descent.robbins.dropbear.id.au 4.5-STABLE FreeBSD 4.5-STABLE #1: Mon Jan 28 23:17:03 EST 2002 tim@descent.robbins.dropbear.id.au:/usr/obj/usr/src/sys/DESCENT i386 >Description: tr's -c option gives incorrect results when the first string is empty. >How-To-Repeat: tim@descent$ echo "test" | tr -c "" "A" | hd 00000000 ff ff ff ff ff |.....| 00000005 These results are incorrect. The complement of `no characters' is `all characters', so all characters should be turned into A's. Using 4.3BSD tr.c ("@(#)tr.c 4.2 (Berkeley) 4/22/85"): tim@descent$ echo "test" | /tmp/tr -c "" "A" | hd 00000000 41 41 41 41 41 |AAAAA| 00000005 >Fix: ch, which is used to hold the last character from string2, needs to be initialised outside the loop. The 0xff's in the incorrect output are (unsigned char)-1's, left over from when ch was being used to hold the return value of getopt(). Index: tr/tr.c =================================================================== RCS file: /home/ncvs/src/usr.bin/tr/tr.c,v retrieving revision 1.9 diff -u -r1.9 tr.c --- tr/tr.c 2001/12/11 23:36:25 1.9 +++ tr/tr.c 2002/02/06 11:57:19 @@ -213,6 +213,7 @@ errx(1, "empty string2"); /* If string2 runs out of characters, use the last one specified. */ + ch = s2.lastch; if (sflag) while (next(&s1)) { string1[s1.lastch] = ch = s2.lastch; After applying this patch, the results match those of 4.3BSD tr: tim@descent$ echo 'test' | tr -c "" "A" | hd 00000000 41 41 41 41 41 |AAAAA| 00000005 >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200202061206.g16C6CB38865>