From nobody Tue Oct 25 21:51:27 2022 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Mxly81TNLz4g65W; Tue, 25 Oct 2022 21:51:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Mxly774H0z3gKn; Tue, 25 Oct 2022 21:51:27 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1666734688; 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; bh=aPExmZtogESTMOB3fTE+v4x4Jzn5G/Dlb07YejVPEeA=; b=BQZ0qHrDIRKEK7k49Ax2GBvNxlMap9pylcWSUZyXXJ0XH0tcXfj4EG6A4ioOnQferntDYg wR3BH3x7XLJ5XqDKftAwu0R2okffStjkMqQ1m6mFe7KDXpxcDPU+4IvdiIarSGwr1QlWc1 7/1kao54kA1T/HAskA08VuDPmjiXqRAkVl8M0LdQIGOaEspWR0NWxP3UiobxBa7py2+ISD +nMgyfJEeGxE4tZFqXfqi3//TeRd7qcmBFNhZnOtBZnHx4zcE/EuFGYtft/iZl2e0gmSjt ZFyl0aUm1kMkFaE4Ou89Mc+60SJCZc4E9ElabhMXq8qHXig5OTo+eUsf89f5Xg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Mxly769jMzsyP; Tue, 25 Oct 2022 21:51:27 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 29PLpRU5088090; Tue, 25 Oct 2022 21:51:27 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 29PLpRXW088075; Tue, 25 Oct 2022 21:51:27 GMT (envelope-from git) Date: Tue, 25 Oct 2022 21:51:27 GMT Message-Id: <202210252151.29PLpRXW088075@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 947efadc3d6e - main - strfmon: Fix alignment when enclosed by parentheses List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 947efadc3d6e778a824618d82f53f061bec69b77 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1666734688; 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; bh=aPExmZtogESTMOB3fTE+v4x4Jzn5G/Dlb07YejVPEeA=; b=NARVHmET31/bG/04nLtY9Fy8auDETFOY/XTXR2dyFlQQzTuCAMeLpmcvUGQQtutGtHjtTv ReaFDyPXpAcl5tUMH7hz1AyK5QsKMjAqy7FaUoNwhDDplVtzxgxIKF1qsG9xy+1/C/9yKQ ejwdLt3Dkim9mPvM7J9bNh0OIpd58v64Awrp4+ekGeiW73gr1fEQDvsE/84uEpfkDLHjSE I4u6dafK0hYrc3fo3e/o/RLTWACI93QOyZTLoMzGQtVXcSfNWhCSCPPocUEsXt0wPtjkZC khmwXGEzBeW1GnlISfrNjd6XnT0zf1A4cXCbtlmA8QwJG47+5rBDA3ikHda+QQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1666734688; a=rsa-sha256; cv=none; b=F2QroM4HB4c5PcmvmhEvSixx1HfCpLXsxfAqthHuK4b6rdLs/9jShxarbZZzNh96B1PeKV 2WrSwDUf61JyLEssv7U09nsZloX2tW4L2Hk6VFfx3C8cEL3YdsLyjmzkr4NetmA5WX/FUe t3yUvJ82fCdNnYj1yCL5z1BTJhdXFyRZ0Rz1vq/+zYOBQa4Vdr6CLWFCv4SmDH+yTgS53W qSuf3ZSgXMGKQjkbMnNoJ+dxGNygJPM8mHkAY326KLG4VV/BSerayye8D3rELUP3HHOq0v puLqSyOXKNLjGnqIV5b/mbmB8Lji4gwlsuuzoqxOnNrL6K/rYHUVSZK4sRbSxQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=947efadc3d6e778a824618d82f53f061bec69b77 commit 947efadc3d6e778a824618d82f53f061bec69b77 Author: Jose Luis Duran AuthorDate: 2022-10-14 23:26:32 +0000 Commit: Konstantin Belousov CommitDate: 2022-10-25 21:40:17 +0000 strfmon: Fix alignment when enclosed by parentheses Take into consideration the possibility of quantities enclosed by parentheses when aligning. Matches the examples from The Open Group's: Format Before After %(#5n [$ 123.45] [ $ 123.45 ] Use an alternative pos/neg style [($ 123.45)] [($ 123.45)] [$ 3,456.78] [ $ 3,456.78 ] %!(#5n [ 123.45] [ 123.45 ] Disable the currency symbol [( 123.45)] [( 123.45)] [ 3,456.78] [ 3,456.78 ] https://pubs.opengroup.org/onlinepubs/9699919799/functions/strfmon.html SD5-XSH-ERN-29 is applied, updating the examples for %(#5n and %!(#5n. Obtained from: Darwin Reviewed by: kib PR: 267282 Github PR: #619 MFC after: 1 week --- lib/libc/stdlib/strfmon.c | 12 ++++++++++-- lib/libc/tests/stdlib/strfmon_test.c | 4 ++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/libc/stdlib/strfmon.c b/lib/libc/stdlib/strfmon.c index a7a48317c97c..80a73ee28916 100644 --- a/lib/libc/stdlib/strfmon.c +++ b/lib/libc/stdlib/strfmon.c @@ -373,8 +373,12 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc, PRINTS(signstr); } - if (sign_posn == 0 && (flags & IS_NEGATIVE)) - PRINT(')'); + if (sign_posn == 0) { + if (flags & IS_NEGATIVE) + PRINT(')'); + else if (left_prec >= 0) + PRINT(' '); + } if (dst - tmpptr < width) { if (flags & LEFT_JUSTIFY) { @@ -466,6 +470,10 @@ __calc_left_pad(int flags, char *cur_symb) } switch (sign_posn) { + case 0: + if (flags & IS_NEGATIVE) + left_chars++; + break; case 1: left_chars += strlen(signstr); break; diff --git a/lib/libc/tests/stdlib/strfmon_test.c b/lib/libc/tests/stdlib/strfmon_test.c index b5b22f9a483d..d4d1f6a580d9 100644 --- a/lib/libc/tests/stdlib/strfmon_test.c +++ b/lib/libc/tests/stdlib/strfmon_test.c @@ -81,8 +81,8 @@ ATF_TC_BODY(strfmon_examples, tc) { "%^#5n", "[ $ 123.45] [-$ 123.45] [ $ 3456.78]" }, { "%^#5.0n", "[ $ 123] [-$ 123] [ $ 3457]" }, { "%^#5.4n", "[ $ 123.4500] [-$ 123.4500] [ $ 3456.7810]" }, - { "%(#5n", "[$ 123.45] [($ 123.45)] [$ 3,456.78]" }, /* XXX */ - { "%!(#5n", "[ 123.45] [( 123.45)] [ 3,456.78]" }, /* XXX */ + { "%(#5n", "[ $ 123.45 ] [($ 123.45)] [ $ 3,456.78 ]" }, + { "%!(#5n", "[ 123.45 ] [( 123.45)] [ 3,456.78 ]" }, { "%-14#5.4n", "[ $ 123.4500 ] [-$ 123.4500 ] [ $ 3,456.7810 ]" }, { "%14#5.4n", "[ $ 123.4500] [ -$ 123.4500] [ $ 3,456.7810]" }, };