From owner-freebsd-hackers@FreeBSD.ORG Fri Dec 5 22:44:55 2008 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 45FDA106564A for ; Fri, 5 Dec 2008 22:44:55 +0000 (UTC) (envelope-from sheldon@sigsegv.ca) Received: from wf-out-1314.google.com (wf-out-1314.google.com [209.85.200.175]) by mx1.freebsd.org (Postfix) with ESMTP id 2669B8FC13 for ; Fri, 5 Dec 2008 22:44:55 +0000 (UTC) (envelope-from sheldon@sigsegv.ca) Received: by wf-out-1314.google.com with SMTP id 24so192938wfg.7 for ; Fri, 05 Dec 2008 14:44:54 -0800 (PST) Received: by 10.142.241.15 with SMTP id o15mr189879wfh.258.1228515272391; Fri, 05 Dec 2008 14:14:32 -0800 (PST) Received: by 10.142.136.4 with HTTP; Fri, 5 Dec 2008 14:14:32 -0800 (PST) Message-ID: Date: Fri, 5 Dec 2008 14:14:32 -0800 From: "Sheldon Givens" To: freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Subject: Small change to wc X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Dec 2008 22:44:55 -0000 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---