Module Name: src Committed By: dyoung Date: Fri Sep 13 16:53:05 UTC 2019
Modified Files: src/usr.bin/unexpand: unexpand.c Log Message: Fix a handful of bugs in unexpand(1): 1. -a and -t were mutually exclusive when they should not be. 2. `unexpand -t n` did not treat a file like there were stops at n, 2 n, 3 n, 4 n, and so on. So expanded tabs after column 4 were not collapsed. 3. a debug fprintf wrote every tabstop set with `-t` to the standard error stream. TBD write some tests. To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/usr.bin/unexpand/unexpand.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/unexpand/unexpand.c diff -u src/usr.bin/unexpand/unexpand.c:1.15 src/usr.bin/unexpand/unexpand.c:1.16 --- src/usr.bin/unexpand/unexpand.c:1.15 Wed Feb 3 05:32:14 2016 +++ src/usr.bin/unexpand/unexpand.c Fri Sep 13 16:53:05 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: unexpand.c,v 1.15 2016/02/03 05:32:14 christos Exp $ */ +/* $NetBSD: unexpand.c,v 1.16 2019/09/13 16:53:05 dyoung Exp $ */ /*- * Copyright (c) 1980, 1993 @@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 19 #if 0 static char sccsid[] = "@(#)unexpand.c 8.1 (Berkeley) 6/6/93"; #endif -__RCSID("$NetBSD: unexpand.c,v 1.15 2016/02/03 05:32:14 christos Exp $"); +__RCSID("$NetBSD: unexpand.c,v 1.16 2019/09/13 16:53:05 dyoung Exp $"); #endif /* not lint */ /* @@ -86,13 +86,9 @@ main(int argc, char **argv) while ((c = getopt(argc, argv, "at:")) != -1) { switch (c) { case 'a': - if (nstops) - usage(); - all++; + all = 1; break; case 't': - if (all) - usage(); while ((tab = strsep(&optarg, ", \t")) != NULL) { if (*tab == '\0') continue; @@ -121,9 +117,6 @@ main(int argc, char **argv) argc -= optind; argv += optind; - for (i = 0; i < nstops; i++) - fprintf(stderr, "%lu %zu\n", i, tabstops[i]); - do { if (argc > 0) { if (freopen(argv[0], "r", stdin) == NULL) @@ -150,8 +143,11 @@ tabify(const char *line, size_t len) dcol++; continue; } else if (*p == '\t') { - if (nstops == 0) { - dcol = (1 + dcol / DSTOP) * DSTOP; + if (nstops <= 1) { + size_t stop = (nstops == 0) + ? DSTOP + : tabstops[0]; + dcol = (1 + dcol / stop) * stop; continue; } else { for (n = 0; n < nstops && @@ -165,13 +161,16 @@ tabify(const char *line, size_t len) } /* Output our tabs */ - if (nstops == 0) { - while (((ocol + DSTOP) / DSTOP) <= (dcol / DSTOP)) { + if (nstops <= 1) { + size_t stop = (nstops == 0) + ? DSTOP + : tabstops[0]; + while (((ocol + stop) / stop) <= (dcol / stop)) { if (dcol - ocol < 2) break; if (putchar('\t') == EOF) goto out; - ocol = (1 + ocol / DSTOP) * DSTOP; + ocol = (1 + ocol / stop) * stop; } } else { for (n = 0; n < nstops && tabstops[n] <= ocol; n++)