From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 435923858C52 for ; Sat, 4 Feb 2023 16:22:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 435923858C52 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1675527760; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tm3EdFo85nya+rKhz8TlRyRRvRJ2LwVMzTJSr2ylFFo=; b=jKaYwbPDM0GEzxSfmK95cVUnD5HuKcwqevLVh6VvPbK+MhVVwuAymFKlKTLVBkH3tSYZlr 4l6ch3Lzba8AQbveil5QsohCGFPq3yrl7lD3pQ4gJgA6euDYAGFTysnxwGIFHs/bAxXodg 7h7NooMoCZJMzeri3uPwJmBJ+9e60kk= Received: from mail-io1-f72.google.com (mail-io1-f72.google.com [209.85.166.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-358-GL4EgAiJMCWgVAjqqPWXsQ-1; Sat, 04 Feb 2023 11:22:38 -0500 X-MC-Unique: GL4EgAiJMCWgVAjqqPWXsQ-1 Received: by mail-io1-f72.google.com with SMTP id u6-20020a6be406000000b00716ceebf132so4774478iog.1 for ; Sat, 04 Feb 2023 08:22:38 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:organization:from:references :to:content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=tm3EdFo85nya+rKhz8TlRyRRvRJ2LwVMzTJSr2ylFFo=; b=OwryZmpaaFxYX60sxzRHtqLm/6Zs3Lgg4TGuxM+lX2/HW3HlOYRzIB9l9C0C+4SyOu 7aJL2e+5zg4wRo3XjW95rQSnJxw+P1rKsxdIrcFAZzv9Q6iuBbXLr/CzIlRLb99IBbDh W8zwuCQY3rKnHxKYnaPPsUMmZ8LM0E9OoYsQ1UtK/1LEu8+EnespqeS+/eP1lxUHYHlw bFFuR0pQDYLO5vntIvXIYAuFtRyXYTCUclGZ3wIEJsUqyaIiKzi28YVHVOPO0FQEExoF xIIV93h/RImthCDmGdqoCMc2Sl9ruQ3oEof0zN+paEj5M3T/AQgYjKKdMOscJER1l8cI y2lg== X-Gm-Message-State: AO0yUKVbmqYRUZ1y6WoulnE7lKPdGv9n4YyuYzMgxrRIwscWNUs+6Hks XYlssEUkZ5OiD9eKOffE1QTYljsk8eTnk48IxBD7s6C6P2LnmDzJNsBc6EcHIOlaDdAaTDl5F6k bxUipaajLIg9jDRTaz3nI X-Received: by 2002:a5d:954c:0:b0:723:fa7:fb6a with SMTP id a12-20020a5d954c000000b007230fa7fb6amr11648715ios.2.1675527757886; Sat, 04 Feb 2023 08:22:37 -0800 (PST) X-Google-Smtp-Source: AK7set+b/pw9ZjrWuQuZ2c8hVUUbe2dPOYZtwWoVei62dyZKy/tY/AOnX0CADhAbr0237+0Pk1j6Pw== X-Received: by 2002:a5d:954c:0:b0:723:fa7:fb6a with SMTP id a12-20020a5d954c000000b007230fa7fb6amr11648708ios.2.1675527757654; Sat, 04 Feb 2023 08:22:37 -0800 (PST) Received: from [192.168.0.241] (192-0-145-146.cpe.teksavvy.com. [192.0.145.146]) by smtp.gmail.com with ESMTPSA id a7-20020a5e8e07000000b007192441e5e6sm1644515ion.45.2023.02.04.08.22.36 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 04 Feb 2023 08:22:37 -0800 (PST) Message-ID: <78bdfe3c-d30b-7d66-7093-027b0dc608dc@redhat.com> Date: Sat, 4 Feb 2023 11:22:36 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.0 Subject: Re: [PATCH] Account for grouping in printf width (bug 23432) To: Andreas Schwab , libc-alpha@sourceware.org, Florian Weimer References: From: Carlos O'Donell Organization: Red Hat In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 1/19/23 06:50, Andreas Schwab via Libc-alpha wrote: > This is a partial fix for mishandling of grouping when formatting > integers. It properly computes the width in presence of grouping > characteres when the precision is larger than the number of significant > digits. I have a new version of this patch which I'll repost shortly after my regression testing passes. I would like to make a slight change in the existing code because prec is changed to mean something else completely in the middle of the digit processing. We should introduce a new usigned integer value to carry forward the additional bytes needed for precision and let the compiler optimize that. It is IMO a small enough change that it still fits into the category of making the code cleaner and solving the regression. I say this because we touch a line that makes no sense to me since 'prec' since the start of processing has meant the total precision parsed from the format specifier. I can also see where we go awry in bug 23432, but I'm really nervous to touch that because existing code may expect the existing practice. Changing to match POSIX is going to be an interesting threading of the needle, either developers never care about this use case or POSIX is just being weird in requiring the additional leading zeroes to have grouping characters. > --- > stdio-common/Makefile | 1 + > stdio-common/tst-grouping3.c | 37 +++++++++++++++++++++++++++++ > stdio-common/vfprintf-process-arg.c | 2 +- > 3 files changed, 39 insertions(+), 1 deletion(-) > create mode 100644 stdio-common/tst-grouping3.c > > diff --git a/stdio-common/Makefile b/stdio-common/Makefile > index 6e9d104524..b46d932a20 100644 > --- a/stdio-common/Makefile > +++ b/stdio-common/Makefile > @@ -195,6 +195,7 @@ tests := \ > tst-gets \ > tst-grouping \ > tst-grouping2 \ > + tst-grouping3 \ > tst-long-dbl-fphex \ > tst-memstream-string \ > tst-obprintf \ > diff --git a/stdio-common/tst-grouping3.c b/stdio-common/tst-grouping3.c > new file mode 100644 > index 0000000000..0031ad4010 > --- /dev/null > +++ b/stdio-common/tst-grouping3.c > @@ -0,0 +1,37 @@ > +/* Test printf with grouping and padding (bug 23432) > + Copyright (C) 2023 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + . */ > + > +#include > +#include > +#include > +#include > + > +static int > +do_test (void) > +{ > + char buf[80]; > + > + xsetlocale (LC_NUMERIC, "de_DE.UTF-8"); > + > + sprintf (buf, "%+-'13.9d", 1234567); > + TEST_COMPARE_STRING (buf, "+001.234.567 "); > + > + return 0; > +} > + > +#include > diff --git a/stdio-common/vfprintf-process-arg.c b/stdio-common/vfprintf-process-arg.c > index 2c651946df..cd3eaf5c0c 100644 > --- a/stdio-common/vfprintf-process-arg.c > +++ b/stdio-common/vfprintf-process-arg.c > @@ -257,7 +257,7 @@ LABEL (unsigned_number): /* Unsigned number of base BASE. */ > width -= 2; > } > > - width -= workend - string + prec; > + width -= number_length + prec; > > Xprintf_buffer_pad (buf, L_('0'), prec); > -- Cheers, Carlos.