From owner-freebsd-hackers@FreeBSD.ORG Fri Dec 5 23:23:01 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 425031065735 for ; Fri, 5 Dec 2008 23:23:01 +0000 (UTC) (envelope-from yanefbsd@gmail.com) Received: from rv-out-0506.google.com (rv-out-0506.google.com [209.85.198.234]) by mx1.freebsd.org (Postfix) with ESMTP id 0CDCB8FC23 for ; Fri, 5 Dec 2008 23:23:00 +0000 (UTC) (envelope-from yanefbsd@gmail.com) Received: by rv-out-0506.google.com with SMTP id b25so210807rvf.43 for ; Fri, 05 Dec 2008 15:23:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:cc:in-reply-to:mime-version:content-type :content-transfer-encoding:content-disposition:references; bh=ZWz78A82pmbzBNIvMrUS6iZoKSiEMU9PQlpP4demhxQ=; b=P9z3CdBys5gIqiZb8uxASG88ipwRD3oCfYUi0+ujvNWfcvQKG22Diux8C0pFD3+DzM T+HqWukwMMRpo+jjmEHdC2parJgJyQ2OiDrEJGzSVThRYwRlW6qj2EtGDVOuvSyvOUc+ ucts3TZmW2Y8dAaiFBeeJwqhqOMLRrIwZyf0E= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version :content-type:content-transfer-encoding:content-disposition :references; b=lnR2JDmslQvtsjNqD2L5pksWdWJ5mQKGFIGIi89zTj4d0rXKl89vUlfB4vQc1PPh2U H6JBpfqwUMJFWUnvasNbpKiGaehEbpWPgPBn2dm+3U//mVDQoavZVFboc5pJyUcv6NlG KMv9l7DA1Fd3fwXjll0YrT6C6ADOtwp+NRPVs= Received: by 10.141.76.21 with SMTP id d21mr240289rvl.154.1228519380606; Fri, 05 Dec 2008 15:23:00 -0800 (PST) Received: by 10.140.158.13 with HTTP; Fri, 5 Dec 2008 15:23:00 -0800 (PST) Message-ID: <7d6fde3d0812051523p6be3fc19re3322f3ddba78b1e@mail.gmail.com> Date: Fri, 5 Dec 2008 15:23:00 -0800 From: "Garrett Cooper" To: "Kostik Belousov" In-Reply-To: <20081205231458.GY2038@deviant.kiev.zoral.com.ua> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <7d6fde3d0812051448r1581d666v50d162cae348982a@mail.gmail.com> <20081205231458.GY2038@deviant.kiev.zoral.com.ua> Cc: freebsd-hackers@freebsd.org, Sheldon Givens Subject: Re: 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 23:23:01 -0000 On Fri, Dec 5, 2008 at 3:14 PM, Kostik Belousov 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 wrote: >> >> > On Fri, Dec 5, 2008 at 2:14 PM, Sheldon Givens 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