Garrett Cooper wrote:
On Fri, Dec 5, 2008 at 2:14 PM, Sheldon Givens <[EMAIL PROTECTED]> 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 "[EMAIL PROTECTED]"

_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to