From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id c1973182 for ; Mon, 24 Dec 2018 17:06:26 +0000 (UTC) Received: (qmail 29212 invoked by alias); 24 Dec 2018 17:06:12 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 43940 Received: (qmail 24154 invoked by uid 1010); 24 Dec 2018 17:06:12 -0000 X-Qmail-Scanner-Diagnostics: from out1-smtp.messagingengine.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.100.2/25112. spamassassin: 3.4.2. Clear:RC:0(66.111.4.25):SA:0(-2.6/5.0):. Processed in 5.108139 secs); 24 Dec 2018 17:06:12 -0000 X-Envelope-From: d.s@daniel.shahaf.name X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= daniel.shahaf.name; h=date:from:to:cc:subject:message-id :references:mime-version:content-type:in-reply-to; s=fm2; bh=AOL 4oIyR3cJ1rJ/U//9IyhZYWGElcYMaWR2qwwu8/5I=; b=MZwMmHt5kmF1GIVrYMa LlUInSiMZyQxPJNoEq/yxQ0QoDGHTMwGON7/aqG8FebgtzsrVmHgax+pPib0AB4y 2djZ/oCMVagNTQpfmePryLIT1RfBs2+ozQttSszAgXiDCHSPwTllXt2lXtXpqc1v RSH2rW+bG4D4o89QjbvSMWTNWIyKbU1rW5ToooaeWmjcNISK7xzEtgW10XaRJI5r lBFvLnG2ARWQZU2MAMYXcDwNbvNvUcAzQHyXQoqIhkxez8sbnkByi7IenZ4bd8vu Gd0kMWPQZnYU/XvRFhn3mGBn9oZCrwDmyLHI2Jd+yp6arW6cizWJLBSuzISVX4fv 5cA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=AOL4oI yR3cJ1rJ/U//9IyhZYWGElcYMaWR2qwwu8/5I=; b=ab7IaAV/9tT/cJjrPj7B6R +UaPmamEdqUBOwUOddw5W4V7qpy8IY3oYmUPh87Z29cOLywqsfemyZYFohGkHIFJ AaC+DUNHWdYFM2uTcn4Eqa/6F1e3uTtJZe1oZ//ohHv/TzzhfzJKAZOW+XjtPrwk aMK9D8t7l1M24oKiSBJPlbULYmjr274RD4Hwtsa0OlHETMBKHA3KoAXaHITPMZ6o R1+YWPkw6qN5NGFTp2vxRGuU0eenSoHNujJemf2KIZQKIWxJj2hvhJlUP2IswSAL PNLo9Awl03nVmcnYwbaXp9bv02MXPa/TOIvlnnoIXtyVEuuwPWf2t4JV0Z1E7moQ == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedtkedrudekuddgleejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfquhhtnecuuegrihhlohhuthemucef tddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpeffhffvuffkfh ggtggujggfsehttddttddtredvnecuhfhrohhmpeffrghnihgvlhcuufhhrghhrghfuceo ugdrshesuggrnhhivghlrdhshhgrhhgrfhdrnhgrmhgvqeenucfkphepjeelrddujeekrd dutdeirdegleenucfrrghrrghmpehmrghilhhfrhhomhepugdrshesuggrnhhivghlrdhs hhgrhhgrfhdrnhgrmhgvnecuvehluhhsthgvrhfuihiivgeptd X-ME-Proxy: Date: Mon, 24 Dec 2018 17:06:01 +0000 From: Daniel Shahaf To: dana Cc: Zsh workers Subject: Re: [PATCH] ztrftime(): Fix truncation for %. Message-ID: <20181224170601.i7fiz4zv5fboqtrw@tarpaulin.shahaf.local2> References: <20181224054021.GK1941@sym.noone.org> <20181224071421.GL1941@sym.noone.org> <1545655545.1499531.1617344072.151563DD@webmail.messagingengine.com> <4E316F0B-5606-4E93-8988-28A5444612E6@dana.is> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4E316F0B-5606-4E93-8988-28A5444612E6@dana.is> User-Agent: NeoMutt/20170113 (1.7.2) dana wrote on Mon, Dec 24, 2018 at 10:24:16 -0600: > On 24 Dec 2018, at 06:45, Daniel Shahaf wrote: > >Shouldn't the former print [124]? > > No, %. only uses the nanoseconds value given to ztrftime(), which is > implicitly 0 in the former case. It's not substituting an arbitrary series of > inputs in the style of printf, it only takes those two time arguments to > ztrftime(). D'oh, thanks. > +++ b/Src/utils.c > @@ -3334,19 +3334,22 @@ morefmt: > #endif > switch (*fmt++) { > case '.': > + { > if (digs > 9) > digs = 9; > + if (ztrftimebuf(&bufsize, digs)) > + return -1; > + long fnsec = nsec; > if (digs < 9) { > int trunc; > for (trunc = 8 - digs; trunc; trunc--) > + fnsec /= 10; > + fnsec = (nsec < 999999500 ? (fnsec + 5) : fnsec) / 10; > } Why the magic number 999999500? Why not 999999950 or 999995000 or 99950? And why would it a problem to add 5 when nsec=999999500? > + sprintf(buf, "%0*ld", digs, fnsec); > buf += digs; > break; > + } > case '\0': > /* Guard against premature end of string */ > *buf++ = '%';