From owner-freebsd-standards@FreeBSD.ORG Mon Oct 1 15:50:02 2012 Return-Path: Delivered-To: freebsd-standards@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 99F731065686 for ; Mon, 1 Oct 2012 15:50:02 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 69FDE8FC1B for ; Mon, 1 Oct 2012 15:50:02 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id q91Fo2B1087105 for ; Mon, 1 Oct 2012 15:50:02 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id q91Fo25F087104; Mon, 1 Oct 2012 15:50:02 GMT (envelope-from gnats) Resent-Date: Mon, 1 Oct 2012 15:50:02 GMT Resent-Message-Id: <201210011550.q91Fo25F087104@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-standards@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Ed Maste Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 688C2106566C for ; Mon, 1 Oct 2012 15:45:16 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 539A38FC16 for ; Mon, 1 Oct 2012 15:45:16 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id q91FjGSA086483 for ; Mon, 1 Oct 2012 15:45:16 GMT (envelope-from emaste@freefall.freebsd.org) Received: (from emaste@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id q91FjGSc086482; Mon, 1 Oct 2012 15:45:16 GMT (envelope-from emaste) Message-Id: <201210011545.q91FjGSc086482@freefall.freebsd.org> Date: Mon, 1 Oct 2012 15:45:16 GMT From: Ed Maste To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Cc: Subject: standards/172215: localeconv() grouping appears not to match POSIX X-BeenThere: freebsd-standards@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Ed Maste List-Id: Standards compliance List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Oct 2012 15:50:02 -0000 >Number: 172215 >Category: standards >Synopsis: localeconv() grouping appears not to match POSIX >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-standards >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Oct 01 15:50:02 UTC 2012 >Closed-Date: >Last-Modified: >Originator: Ed Maste >Release: FreeBSD 9.0-STABLE i386 >Organization: FreeBSD >Environment: System: FreeBSD freefall.freebsd.org 9.0-STABLE FreeBSD 9.0-STABLE #6 r235139: Tue May 8 21:19:03 UTC 2012 simon@freefall.freebsd.org:/usr/obj/usr/src/sys/FREEFALL i386 >Description: I can find two references to the expected return from localeconv() for grouping / mon_grouping. First, the behaviour in SUSv2 http://pubs.opengroup.org/onlinepubs/007908799/xbd/locale.html matches what FreeBSD currently does -- { CHAR_MAX, '\0' }: The third column shows the equivalent string in the ISO C standard that would be used by the localeconv() function to accommodate this grouping mon_grouping Formatted Value ISO C String -1 123456789 "\177" In 1003.1 (2004) for POSIX Locale http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap07.html it suggests that the return should be empty string: langinfo POSIX Locale localeconv() localedef Item Constant Value Value Value mon_grouping - N/A "" -1 This came up on the gnulib mailing list recently, which has a testcase for localeconv that contains #ifdef'd-out cases for l->grouping and l->mon_gropuing on FreeBSD. http://lists.gnu.org/archive/html/bug-gnulib/2012-08/msg00142.html >How-To-Repeat: >Fix: I suspect this could be accomplished with the following patch: Index: lib/libc/locale/fix_grouping.c =================================================================== --- fix_grouping.c (revision 240919) +++ fix_grouping.c (working copy) @@ -31,7 +31,7 @@ #include #include -static const char nogrouping[] = { CHAR_MAX, '\0' }; +static const char nogrouping[] = { '\0' }; /* * Internal helper used to convert grouping sequences from string >Release-Note: >Audit-Trail: >Unformatted: