Small change to wc

Sheldon Givens sheldon at sigsegv.ca
Fri Dec 5 14:44:55 PST 2008


Hello everyone,
In the process of migrating the last of a few Linux servers to FreeBSD, we
ran in to a bit of a snag with one of our scripts when BSD wc didn't have an
equivalent to the Linux -L. This flag tells wc to keep track of the longest
line in the input.

Here's a little diff to add this functionality to BSD wc.

With this patch, an additional parameter is added to output that shows the
length of the longest line

My apologies if this is in the wrong format. I don't often post here.

Happy Holidays,

Sheldon Givens


---snip---
65,66c65,66
< uintmax_t tlinect, twordct, tcharct;
< int doline, doword, dochar, domulti;
---
> uintmax_t tlinect, twordct, tcharct, tlongline;
> int doline, doword, dochar, domulti, dolongline;
78c78
<       while ((ch = getopt(argc, argv, "clmw")) != -1)
---
>       while ((ch = getopt(argc, argv, "clmwL")) != -1)
93a94,96
>               case 'L':
>                       dolongline = 1;
>                       break;
127a131,132
>               if (dolongline)
>                       (void)printf(" %7ju", tlongline);
137c142
<       uintmax_t linect, wordct, charct;
---
>       uintmax_t linect, wordct, charct, llcnt, tmpll;
146c151
<       linect = wordct = charct = 0;
---
>       linect = wordct = charct = llcnt = tmpll = 0;
171c176,179
<                                       if (*p == '\n')
---
>                                       if (*p == '\n') {
>                                               if (tmpll > llcnt)
>                                                       llcnt = tmpll;
>                                               tmpll = 0;
172a181
>                                       } else { tmpll++; }
179a189,192
>                       if (dolongline) {
>                               tlongline = llcnt;
>                               (void)printf(" %7ju", tlongline);
>                       }
197c210
<                               return (0);
---
>                       return (0);
231a245
>                       tmpll++;
234c248,251
<                       if (wch == L'\n')
---
>                       if (wch == L'\n') {
>                               if (tmpll > llcnt)
>                                       llcnt = tmpll;
>                               tmpll = 0;
235a253
>                       }
258a277,280
>       if (dolongline) {
>               tlongline = llcnt;
>               (void)printf(" %7ju", llcnt - 1);
>       }
266c288
<       (void)fprintf(stderr, "usage: wc [-clmw] [file ...]\n");
---
>       (void)fprintf(stderr, "usage: wc [-clmwL] [file ...]\n");

---unsnip---


More information about the freebsd-hackers mailing list