Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Dec 2008 14:14:32 -0800
From:      "Sheldon Givens" <sheldon@sigsegv.ca>
To:        freebsd-hackers@freebsd.org
Subject:   Small change to wc
Message-ID:  <f4ecc0930812051414n17867e1fi80d6ed458e879bde@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
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---



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?f4ecc0930812051414n17867e1fi80d6ed458e879bde>