Date: Fri, 05 Dec 2008 15:05:05 -0800 From: Julian Elischer <julian@elischer.org> To: Garrett Cooper <yanefbsd@gmail.com> Cc: freebsd-hackers@freebsd.org, Sheldon Givens <sheldon@sigsegv.ca> Subject: Re: Small change to wc Message-ID: <4939B3A1.6060307@elischer.org> In-Reply-To: <7d6fde3d0812051448r1581d666v50d162cae348982a@mail.gmail.com> References: <f4ecc0930812051414n17867e1fi80d6ed458e879bde@mail.gmail.com> <7d6fde3d0812051448r1581d666v50d162cae348982a@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Garrett Cooper wrote:
> On Fri, Dec 5, 2008 at 2:14 PM, Sheldon Givens <sheldon@sigsegv.ca> wrote:
>> 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---
>
> What's the plus side of having this? I can accomplish the same with
> something like awk without the additional overhead, which would be
> guaranteed to be portable.
true, but this is a well known extension that people use and to tell
the truth, I have no idea how I would do it in awk without reading a
lot where in wc it's obvious from the synopsis.
> -Garrett
> _______________________________________________
> freebsd-hackers@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4939B3A1.6060307>
