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>