From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS22989 209.51.188.0/24 X-Spam-Status: No, score=-3.7 required=3.0 tests=AWL,BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id BD6081F463 for ; Fri, 20 Dec 2019 08:20:01 +0000 (UTC) Received: from localhost ([::1]:51852 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iiDVw-0001LF-4H for normalperson@yhbt.net; Fri, 20 Dec 2019 03:20:00 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:55895) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iiDVq-0001L9-Oo for bug-gnulib@gnu.org; Fri, 20 Dec 2019 03:19:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iiDVn-0003Sk-S6 for bug-gnulib@gnu.org; Fri, 20 Dec 2019 03:19:54 -0500 Received: from mo6-p00-ob.smtp.rzone.de ([2a01:238:20a:202:5300::11]:17200) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iiDVm-0003CN-Sg for bug-gnulib@gnu.org; Fri, 20 Dec 2019 03:19:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1576829987; s=strato-dkim-0002; d=clisp.org; h=References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: X-RZG-CLASS-ID:X-RZG-AUTH:From:Subject:Sender; bh=78cL3pLoh8EGxBrLuUrq6jnfviiFTFIFdAbZtDwpVVI=; b=Y48IZTXv/PMX24GGC3HR07W3LpxoyUPcB5XlfrXfyNlcvJDIeXrYTHCp8hh+3+940b +g1yznvunj5N4BO1csGOcBBgE/96FGGTyh7X/yTPF4IPWQANypzrCHO2O185d9yNNGJ0 v9YdXPiYdNnJS39UTIlrQv89Z1i445wlZUZf4USBN8Xz1C5mY59HudFKrKtxU4BFQxqg T10Ns8aTNEmBicxkpS4yLbRZoSCoAvTzBbYhht0MoIgAGVW0SzThHyjYJYxjo9iSjH9V Q+WZwShnpImQxsl7nb/2uJm0HbXY4Mt6ITdSrXKx6DbtLCgdLejzsdCdT5YEzUjo9yIZ u1lg== X-RZG-AUTH: ":Ln4Re0+Ic/6oZXR1YgKryK8brlshOcZlIWs+iCP5vnk6shH+AHjwLuWOH6fzxfs=" X-RZG-CLASS-ID: mo00 Received: from bruno.haible.de by smtp.strato.de (RZmta 46.1.1 DYNA|AUTH) with ESMTPSA id v081d0vBK8Jk4bf (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (curve X9_62_prime256v1 with 256 ECDH bits, eq. 3072 bits RSA)) (Client did not present a certificate); Fri, 20 Dec 2019 09:19:46 +0100 (CET) From: Bruno Haible To: "Daniel Richard G." Subject: Re: z/OS, iconv, and charset aliases Date: Fri, 20 Dec 2019 09:19:46 +0100 Message-ID: <15474984.Y7zEzsZrB6@omega> User-Agent: KMail/5.1.3 (Linux/4.4.0-166-generic; KDE/5.18.0; x86_64; ; ) In-Reply-To: <0d8e6bae-ecbe-454f-a35b-007bb716253e@www.fastmail.com> References: <5601D024.8080308@cs.ucla.edu> <3421336.WRN79pdSnq@omega> <0d8e6bae-ecbe-454f-a35b-007bb716253e@www.fastmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart3871197.Q9YLkuaTdG" Content-Transfer-Encoding: 7Bit X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a01:238:20a:202:5300::11 X-BeenThere: bug-gnulib@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Gnulib discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: bug-gnulib@gnu.org Errors-To: bug-gnulib-bounces+normalperson=yhbt.net@gnu.org Sender: "bug-gnulib" This is a multi-part message in MIME format. --nextPart3871197.Q9YLkuaTdG Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Hi Daniel, > I've attached a file with the output of "iconv -l". The names appear > consistent with what's in iconv_open-aix.gperf. Thanks. From this, I think we can equate the following vendor names with GNU canonical names: Vendor name Canonical name References 00367 ASCII, ANSI_X3.4-1968 https://en.wikipedia.org/wiki/Code_page_367 https://haible.de/bruno/charsets/conversion-tables/ASCII.html ISO8859-1 ISO-8859-1 ISO8859-2 ISO-8859-2 ISO8859-4 ISO-8859-4 ISO8859-5 ISO-8859-5 ISO8859-6 ISO-8859-6 ISO8859-7 ISO-8859-7 ISO8859-8 ISO-8859-8 ISO8859-9 ISO-8859-9 ISO8859-13 ISO-8859-13 ISO8859-15 ISO-8859-15 IBM-437 CP437 IBM-850 CP850 IBM-852 CP852 IBM-855 CP855 IBM-856 CP856 IBM-861 CP861 IBM-862 CP862 IBM-864 CP864 IBM-866 CP866 IBM-869 CP869 TIS-620 CP874 https://haible.de/bruno/charsets/conversion-tables/Thai.html IBM-922 CP922 IBM-eucJC CP932 IBM-943 CP943 IBM-949 CP949 IBM-1046 CP1046 IBM-1124 CP1124 IBM-1125 CP1125 IBM-1250 CP1250 IBM-1251 CP1251 IBM-1252 CP1252 IBM-1253 CP1253 IBM-1254 CP1254 IBM-1255 CP1255 IBM-1256 CP1256 IBM-eucCN GB2312 EUCJP EUC-JP IBM-eucKR EUC-KR IBM-eucTW EUC-TW BIG5 BIG5 IBM-936 GBK TIS-620 TIS-620 UTF-8 UTF-8 Fortunately, all encodings listed as locale encodings in "Table 3. Supported language-territory names and LT codes for ASCII locales" of https://www.ibm.com/support/knowledgecenter/SSLTBW_2.4.0/com.ibm.zos.v2r4.cbcpx01/locnamc.htm are in this list. Omitting identical names on both sides (e.g. BIG5 BIG5), I arrive at the two attached patches. 2019-12-20 Bruno Haible iconv_open: Add support for z/OS encoding names. Reported by Daniel Richard G. in . * lib/iconv_open-zos.gperf: New file. * modules/iconv_open (Files): Add iconv_open-zos.gperf. (Makefile.am): Add rules for generating iconv_open-zos.h from it. * lib/iconv_open.c (ICONV_FLAVOR_ZOS): New macro. * m4/iconv_open.m4 (gl_FUNC_ICONV_OPEN): On z/OS, use ICONV_FLAVOR_ZOS. * doc/posix-functions/iconv_open.texi: Mention z/OS. 2019-12-20 Bruno Haible localcharset: Add support for z/OS encoding names. * lib/localcharset.h: Mention which encodings are used as locale encodings on z/OS. --nextPart3871197.Q9YLkuaTdG Content-Disposition: attachment; filename="0001-iconv_open-Add-support-for-z-OS-encoding-names.patch" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="UTF-8"; name="0001-iconv_open-Add-support-for-z-OS-encoding-names.patch" >From 49e78fcade5457b00b877fa7f7309056076a9b53 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Fri, 20 Dec 2019 09:12:37 +0100 Subject: [PATCH 1/2] iconv_open: Add support for z/OS encoding names. Reported by Daniel Richard G. in . * lib/iconv_open-zos.gperf: New file. * modules/iconv_open (Files): Add iconv_open-zos.gperf. (Makefile.am): Add rules for generating iconv_open-zos.h from it. * lib/iconv_open.c (ICONV_FLAVOR_ZOS): New macro. * m4/iconv_open.m4 (gl_FUNC_ICONV_OPEN): On z/OS, use ICONV_FLAVOR_ZOS. * doc/posix-functions/iconv_open.texi: Mention z/OS. --- ChangeLog | 12 +++++++ doc/posix-functions/iconv_open.texi | 2 +- lib/iconv_open-zos.gperf | 68 +++++++++++++++++++++++++++++++++++++ lib/iconv_open.c | 1 + m4/iconv_open.m4 | 13 +++---- modules/iconv_open | 12 ++++--- 6 files changed, 97 insertions(+), 11 deletions(-) create mode 100644 lib/iconv_open-zos.gperf diff --git a/ChangeLog b/ChangeLog index dece371..9d6d06b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,17 @@ 2019-12-20 Bruno Haible + iconv_open: Add support for z/OS encoding names. + Reported by Daniel Richard G. in + . + * lib/iconv_open-zos.gperf: New file. + * modules/iconv_open (Files): Add iconv_open-zos.gperf. + (Makefile.am): Add rules for generating iconv_open-zos.h from it. + * lib/iconv_open.c (ICONV_FLAVOR_ZOS): New macro. + * m4/iconv_open.m4 (gl_FUNC_ICONV_OPEN): On z/OS, use ICONV_FLAVOR_ZOS. + * doc/posix-functions/iconv_open.texi: Mention z/OS. + +2019-12-20 Bruno Haible + doc: Document the problem of the per-thread locale functions on z/OS. * doc/posix-functions/uselocale.texi: Document the z/OS problem. * doc/posix-functions/newlocale.texi: Likewise. diff --git a/doc/posix-functions/iconv_open.texi b/doc/posix-functions/iconv_open.texi index a70e1f5..d5f05ee 100644 --- a/doc/posix-functions/iconv_open.texi +++ b/doc/posix-functions/iconv_open.texi @@ -20,7 +20,7 @@ Portability problems fixed by Gnulib module @code{iconv_open}: @item This function recognizes only non-standard aliases for many encodings (not the IANA registered encoding names) on many platforms: -AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11 2010-11. +AIX 5.1, HP-UX 11, IRIX 6.5, Solaris 11 2010-11, z/OS. @end itemize Portability problems fixed by Gnulib module @code{iconv_open-utf}: diff --git a/lib/iconv_open-zos.gperf b/lib/iconv_open-zos.gperf new file mode 100644 index 0000000..d44b5d7 --- /dev/null +++ b/lib/iconv_open-zos.gperf @@ -0,0 +1,68 @@ +/* Character set conversion. + Copyright (C) 2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see . */ + +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; +%struct-type +%language=ANSI-C +%define slot-name standard_name +%define hash-function-name mapping_hash +%define lookup-function-name mapping_lookup +%readonly-tables +%global-table +%define word-array-name mappings +%pic +%% +ASCII, "00367" +ISO-8859-1, "ISO8859-1" +ISO-8859-2, "ISO8859-2" +ISO-8859-4, "ISO8859-4" +ISO-8859-5, "ISO8859-5" +ISO-8859-6, "ISO8859-6" +ISO-8859-7, "ISO8859-7" +ISO-8859-8, "ISO8859-8" +ISO-8859-9, "ISO8859-9" +ISO-8859-13, "ISO8859-13" +ISO-8859-15, "ISO8859-15" +CP437, "IBM-437" +CP850, "IBM-850" +CP852, "IBM-852" +CP855, "IBM-855" +CP856, "IBM-856" +CP861, "IBM-861" +CP862, "IBM-862" +CP864, "IBM-864" +CP866, "IBM-866" +CP869, "IBM-869" +CP874, "TIS-620" +CP922, "IBM-922" +CP932, "IBM-eucJC" +CP943, "IBM-943" +CP949, "IBM-949" +CP1046, "IBM-1046" +CP1124, "IBM-1124" +CP1125, "IBM-1125" +CP1250, "IBM-1250" +CP1251, "IBM-1251" +CP1252, "IBM-1252" +CP1253, "IBM-1253" +CP1254, "IBM-1254" +CP1255, "IBM-1255" +CP1256, "IBM-1256" +GB2312, "IBM-eucCN" +EUC-JP, "EUCJP" +EUC-KR, "IBM-eucKR" +EUC-TW, "IBM-eucTW" +GBK, "IBM-936" diff --git a/lib/iconv_open.c b/lib/iconv_open.c index 928ccf2..918b89c 100644 --- a/lib/iconv_open.c +++ b/lib/iconv_open.c @@ -36,6 +36,7 @@ #define ICONV_FLAVOR_IRIX "iconv_open-irix.h" #define ICONV_FLAVOR_OSF "iconv_open-osf.h" #define ICONV_FLAVOR_SOLARIS "iconv_open-solaris.h" +#define ICONV_FLAVOR_ZOS "iconv_open-zos.h" #ifdef ICONV_FLAVOR # include ICONV_FLAVOR diff --git a/m4/iconv_open.m4 b/m4/iconv_open.m4 index bfcd354..b4730a9 100644 --- a/m4/iconv_open.m4 +++ b/m4/iconv_open.m4 @@ -1,4 +1,4 @@ -# iconv_open.m4 serial 15 +# iconv_open.m4 serial 16 dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -23,11 +23,12 @@ AC_DEFUN([gl_FUNC_ICONV_OPEN], if test $gl_func_iconv_gnu = no; then iconv_flavor= case "$host_os" in - aix*) iconv_flavor=ICONV_FLAVOR_AIX ;; - irix*) iconv_flavor=ICONV_FLAVOR_IRIX ;; - hpux*) iconv_flavor=ICONV_FLAVOR_HPUX ;; - osf*) iconv_flavor=ICONV_FLAVOR_OSF ;; - solaris*) iconv_flavor=ICONV_FLAVOR_SOLARIS ;; + aix*) iconv_flavor=ICONV_FLAVOR_AIX ;; + irix*) iconv_flavor=ICONV_FLAVOR_IRIX ;; + hpux*) iconv_flavor=ICONV_FLAVOR_HPUX ;; + osf*) iconv_flavor=ICONV_FLAVOR_OSF ;; + solaris*) iconv_flavor=ICONV_FLAVOR_SOLARIS ;; + openedition*) iconv_flavor=ICONV_FLAVOR_ZOS ;; esac if test -n "$iconv_flavor"; then AC_DEFINE_UNQUOTED([ICONV_FLAVOR], [$iconv_flavor], diff --git a/modules/iconv_open b/modules/iconv_open index 7032dca..3486901 100644 --- a/modules/iconv_open +++ b/modules/iconv_open @@ -8,6 +8,7 @@ lib/iconv_open-hpux.gperf lib/iconv_open-irix.gperf lib/iconv_open-osf.gperf lib/iconv_open-solaris.gperf +lib/iconv_open-zos.gperf lib/iconv.c lib/iconv_close.c m4/iconv_open.m4 @@ -48,10 +49,13 @@ $(srcdir)/iconv_open-osf.h: $(srcdir)/iconv_open-osf.gperf $(srcdir)/iconv_open-solaris.h: $(srcdir)/iconv_open-solaris.gperf $(V_GPERF)$(GPERF) -m 10 $(srcdir)/iconv_open-solaris.gperf > $(srcdir)/iconv_open-solaris.h-t && \ mv $(srcdir)/iconv_open-solaris.h-t $(srcdir)/iconv_open-solaris.h -BUILT_SOURCES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h -MOSTLYCLEANFILES += iconv_open-aix.h-t iconv_open-hpux.h-t iconv_open-irix.h-t iconv_open-osf.h-t iconv_open-solaris.h-t -MAINTAINERCLEANFILES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h -EXTRA_DIST += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h +$(srcdir)/iconv_open-zos.h: $(srcdir)/iconv_open-zos.gperf + $(V_GPERF)$(GPERF) -m 10 $(srcdir)/iconv_open-zos.gperf > $(srcdir)/iconv_open-zos.h-t && \ + mv $(srcdir)/iconv_open-zos.h-t $(srcdir)/iconv_open-zos.h +BUILT_SOURCES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h iconv_open-zos.h +MOSTLYCLEANFILES += iconv_open-aix.h-t iconv_open-hpux.h-t iconv_open-irix.h-t iconv_open-osf.h-t iconv_open-solaris.h-t iconv_open-zos.h-t +MAINTAINERCLEANFILES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h iconv_open-zos.h +EXTRA_DIST += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h iconv_open-solaris.h iconv_open-zos.h Include: -- 2.7.4 --nextPart3871197.Q9YLkuaTdG Content-Disposition: attachment; filename="0002-localcharset-Add-support-for-z-OS-encoding-names.patch" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="UTF-8"; name="0002-localcharset-Add-support-for-z-OS-encoding-names.patch" >From 3f7d8da2ee9e513a9db318dc9c4aa91ca6ed8b3b Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Fri, 20 Dec 2019 09:17:20 +0100 Subject: [PATCH 2/2] localcharset: Add support for z/OS encoding names. * lib/localcharset.h: Mention which encodings are used as locale encodings on z/OS. --- ChangeLog | 6 ++++++ lib/localcharset.h | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9d6d06b..9a47dbc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2019-12-20 Bruno Haible + localcharset: Add support for z/OS encoding names. + * lib/localcharset.h: Mention which encodings are used as locale + encodings on z/OS. + +2019-12-20 Bruno Haible + iconv_open: Add support for z/OS encoding names. Reported by Daniel Richard G. in . diff --git a/lib/localcharset.h b/lib/localcharset.h index 5897140..81ebfae 100644 --- a/lib/localcharset.h +++ b/lib/localcharset.h @@ -48,15 +48,15 @@ extern const char * locale_charset (void); (darwin = Mac OS X, windows = native Windows) ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin minix cygwin - ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin - ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin + ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-3 Y glibc solaris cygwin ISO-8859-4 Y hpux osf solaris freebsd netbsd openbsd darwin - ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin + ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-6 Y glibc aix hpux solaris cygwin - ISO-8859-7 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin - ISO-8859-8 Y glibc aix hpux osf solaris cygwin - ISO-8859-9 Y glibc aix hpux irix osf solaris freebsd darwin cygwin + ISO-8859-7 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos + ISO-8859-8 Y glibc aix hpux osf solaris cygwin zos + ISO-8859-9 Y glibc aix hpux irix osf solaris freebsd darwin cygwin zos ISO-8859-13 glibc hpux solaris freebsd netbsd openbsd darwin cygwin ISO-8859-14 glibc cygwin ISO-8859-15 glibc aix irix osf solaris freebsd netbsd openbsd darwin cygwin @@ -79,7 +79,7 @@ extern const char * locale_charset (void); CP874 windows dos CP922 aix CP932 aix cygwin windows dos - CP943 aix + CP943 aix zos CP949 osf darwin windows dos CP950 windows dos CP1046 aix @@ -95,17 +95,17 @@ extern const char * locale_charset (void); CP1255 glibc windows CP1256 windows CP1257 windows - GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin cygwin + GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin cygwin zos EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin - EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin + EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin zos EUC-TW glibc aix hpux irix osf solaris netbsd - BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin + BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin zos BIG5-HKSCS glibc hpux solaris netbsd darwin GBK glibc aix osf solaris freebsd darwin cygwin windows dos GB18030 glibc hpux solaris freebsd netbsd darwin SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin JOHAB glibc solaris windows - TIS-620 glibc aix hpux osf solaris cygwin + TIS-620 glibc aix hpux osf solaris cygwin zos VISCII Y glibc TCVN5712-1 glibc ARMSCII-8 glibc freebsd netbsd darwin @@ -119,7 +119,7 @@ extern const char * locale_charset (void); HP-KANA8 hpux DEC-KANJI osf DEC-HANYU osf - UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin + UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin zos Note: Names which are not marked as being a MIME name should not be used in Internet protocols for information interchange (mail, news, etc.). -- 2.7.4 --nextPart3871197.Q9YLkuaTdG--