Date: Fri, 5 Dec 2008 15:28:00 -0800 From: "Sheldon Givens" <sheldon@sigsegv.ca> To: "Garrett Cooper" <yanefbsd@gmail.com>, freebsd-hackers@freebsd.org Subject: Re: Small change to wc Message-ID: <f4ecc0930812051528t5d005585ta5c3af7e3ed5d72b@mail.gmail.com> In-Reply-To: <7d6fde3d0812051523p6be3fc19re3322f3ddba78b1e@mail.gmail.com> References: <f4ecc0930812051414n17867e1fi80d6ed458e879bde@mail.gmail.com> <7d6fde3d0812051448r1581d666v50d162cae348982a@mail.gmail.com> <f4ecc0930812051510v323ae95anccaca18d28fd174@mail.gmail.com> <20081205231458.GY2038@deviant.kiev.zoral.com.ua> <7d6fde3d0812051523p6be3fc19re3322f3ddba78b1e@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
I've successfully built it in multiple circumstances. The only thing I'm worried about (I'm on the road now and can't test) is what will occur if wc is fed a zero-length input... ie, a "touched" file or a echo "" | wc -L. On Fri, Dec 5, 2008 at 3:23 PM, Garrett Cooper <yanefbsd@gmail.com> wrote: > On Fri, Dec 5, 2008 at 3:14 PM, Kostik Belousov <kostikbel@gmail.com> > wrote: > > On Fri, Dec 05, 2008 at 03:10:56PM -0800, Sheldon Givens wrote: > >> What's the problem having it? The total code is mere bytes and it eases > the > >> transition for others who are migrating from Linux. > >> You're absolutely right in that it can be done with awk (fairly simply, > too) > >> but it doesn't hurt to explore options. Additionally, with awk, you > can't > >> get other figures with the same command, which increases ease of use. > >> IE: What's the equivalent to "wc -clwL" in awk? Would you really rather > run > >> wc -clw && awk '{if(length>x){x=length}}END{if(x>0){print x}else{print > >> 0}}'`? > >> > >> Isn't wc -L a more elegant solution than awk > >> '{if(length>x){x=length}}END{if(x>0){print x}else{print 0}}'`? > >> > >> Should I continue? > > > > Real argument pro is that you have one less thing to worry when you > > trying to run some script, written on Linux, on the FreeBSD system. > > > >> > >> On Fri, Dec 5, 2008 at 2:48 PM, Garrett Cooper <yanefbsd@gmail.com> > 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. > >> > -Garrett > > Very true. Ok, I've been easily won over :). > The patch looks largely ok, but have you gone through compiling it in > your own dev tree (vatting out possible warnings, etc). > -Garrett >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?f4ecc0930812051528t5d005585ta5c3af7e3ed5d72b>