From fb4f03d25610de0a32dd2a350951347ebeea6ace Mon Sep 17 00:00:00 2001 From: tjr Date: Mon, 29 Jul 2002 14:50:54 +0000 Subject: When translating and the -c option is specified, handle the case where the second string argument is more than one character in length in the way required by SUSv3 (and the way GNU textutils and SVR4 do it). --- usr.bin/tr/tr.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'usr.bin') diff --git a/usr.bin/tr/tr.c b/usr.bin/tr/tr.c index 524f66b..ff623cd 100644 --- a/usr.bin/tr/tr.c +++ b/usr.bin/tr/tr.c @@ -238,12 +238,17 @@ main(argc, argv) (void)next(&s2); } - if (cflag) - for (cnt = 0, p = string1; cnt < NCHARS; ++p, ++cnt) - *p = *p == OOBCH ? ch : cnt; - else if (Cflag) - for (cnt = 0, p = string1; cnt < NCHARS; ++p, ++cnt) - *p = *p == OOBCH && ISCHAR(cnt) ? ch : cnt; + if (cflag || Cflag) { + s2.str = argv[1]; + s2.state = NORMAL; + for (cnt = 0, p = string1; cnt < NCHARS; ++p, ++cnt) { + if (*p == OOBCH && (!Cflag || ISCHAR(cnt))) { + (void)next(&s2); + *p = s2.lastch; + } else + *p = cnt; + } + } if (sflag) for (lastch = OOBCH; (ch = getchar()) != EOF;) { -- cgit v1.1