From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15333 invoked by alias); 6 May 2002 11:26:08 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 15142 invoked by uid 71); 6 May 2002 11:26:04 -0000 Resent-Date: 6 May 2002 11:26:04 -0000 Resent-Message-ID: <20020506112604.15141.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org, java-prs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, Bruno Haible Received:(qmail 14443 invoked from network); 6 May 2002 11:25:11 -0000 Received: from unknown (HELO sceaux.ilog.fr) (193.55.64.10) by sources.redhat.com with SMTP; 6 May 2002 11:25:11 -0000 Received: from ftp.ilog.fr (ftp.ilog.fr [193.55.64.11]) by sceaux.ilog.fr (8.11.6/8.11.6) with SMTP id g46BMeB26647 for ; Mon, 6 May 2002 13:22:41 +0200 (MET DST) Received: from laposte.ilog.fr ([193.55.64.67]) by ftp.ilog.fr (NAVGW 2.5.1.16) with SMTP id M2002050613250726095 for ; Mon, 06 May 2002 13:25:08 +0200 Received: from honolulu.ilog.fr ([172.17.4.133]) by laposte.ilog.fr (8.11.6/8.11.5) with ESMTP id g46BP5211488; Mon, 6 May 2002 13:25:05 +0200 (MET DST) Received: (from haible@localhost) by honolulu.ilog.fr (8.9.3/8.9.3/SuSE Linux 8.9.3-0.1) id NAA28023; Mon, 6 May 2002 13:22:50 +0200 Message-Id:<15574.26506.671273.891178@honolulu.ilog.fr> Date: Mon, 06 May 2002 04:26:00 -0000 From: Bruno Haible To: gcc-gnats@gcc.gnu.org Subject: libgcj/6576: java.util.ResourceBundle.getResource ignores locale X-SW-Source: 2002-05/txt/msg00145.txt.bz2 List-Id: >Number: 6576 >Category: libgcj >Synopsis: java.util.ResourceBundle.getResource ignores locale >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Mon May 06 04:26:04 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Bruno Haible >Release: 3.1 20020423 (prerelease) >Organization: GNU hackers >Environment: System: Linux linuix 2.4.18-4GB #1 Wed Mar 27 13:57:05 UTC 2002 i686 unknown Architecture: i686 host: i686-pc-linux-gnu build: i686-pc-linux-gnu target: i686-pc-linux-gnu configured with: ../configure --prefix=/packages/gnu-snapshot --enable-shared --enable-version-specific-runtime-libs --enable-nls >Description: The java.util.ResourceBundle.getBundle(String,Locale) function appears to ignore the locale argument. >How-To-Repeat: $ export CLASSPATH=. $ cat <<\EOF > prog_fr.java /* Automatically generated by GNU msgfmt. Do not modify! */ public class prog_fr extends java.util.ResourceBundle { private static final java.util.Hashtable table; static { java.util.Hashtable t = new java.util.Hashtable(); t.put("","Content-Type: text/plain; charset=UTF-8\nPlural-Forms: nplurals=2; plural=(n > 1);\n"); t.put("'Your command, please?', asked the waiter.","\u00abVotre commande, s'il vous plait\u00bb, dit le gar\u00e7on."); t.put("a piece of cake",new java.lang.String[] { "un morceau de gateau", "{0,number} morceaux de gateau" }); t.put("{0} is replaced by {1}.","{1} remplace {0}."); table = t; } public static final java.util.Hashtable plural; static { java.util.Hashtable p = new java.util.Hashtable(); p.put("a piece of cake","{0,number} pieces of cake"); plural = p; } public java.lang.Object lookup (java.lang.String msgid) { return table.get(msgid); } public java.lang.Object handleGetObject (java.lang.String msgid) throws java.util.MissingResourceException { java.lang.Object value = table.get(msgid); return (value instanceof java.lang.String[] ? ((java.lang.String[])value)[0] : value); } public java.util.Enumeration getKeys () { return table.keys(); } public static long pluralEval (long n) { return ((n > 1) ? 1 : 0); } public java.util.ResourceBundle getParent () { return parent; } } EOF $ gcj -C -O -d . prog_fr.java $ cat <<\EOF > DumpResource.java import java.lang.reflect.*; import java.util.*; import java.io.*; public class DumpResource { public DumpResource (String resource_name, String locale_name) { // Split locale_name into language_country_variant. String language; String country; String variant; language = locale_name; { int i = language.indexOf('_'); if (i >= 0) { country = language.substring(i+1); language = language.substring(0,i); } else country = ""; } { int j = country.indexOf('_'); if (j >= 0) { variant = country.substring(j+1); country = country.substring(0,j); } else variant = ""; } Locale locale = new Locale(language,country,variant); // Get the resource. System.out.println("Calling getBundle("+resource_name+","+locale+")."); ResourceBundle catalog = ResourceBundle.getBundle(resource_name,locale); } public static void main (String[] args) { new DumpResource(args[0], args.length > 1 ? args[1] : ""); System.exit(0); } } EOF $ gcj -C -O -d . DumpResource.java $ gij DumpResource prog fr Calling getBundle(prog,fr). Exception in thread "main" java.util.MissingResourceException: Bundle prog not found at 0x4025bf70: java.lang.Throwable.Throwable(java.lang.String) (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x4024aed6: java.lang.Exception.Exception(java.lang.String) (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x4024fba6: java.lang.RuntimeException.RuntimeException(java.lang.String) (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x402a0ea9: java.util.MissingResourceException.MissingResourceException(java.lang.String, java.lang.String, java.lang.String) (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x402a4ec9: java.util.ResourceBundle.getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader) (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x402a495b: java.util.ResourceBundle.getBundle(java.lang.String, java.util.Locale) (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x403d76e7: ffi_call_SYSV (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x403d7697: ffi_raw_call (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x4022e20b: _Jv_InterpMethod.continue1(_Jv_InterpMethodInvocation) (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x403e2644: _Jv_InterpMethod.run(ffi_cif, void, ffi_raw, _Jv_InterpMethodInvocation) (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x4022c024: _Jv_InterpMethod.run_normal(ffi_cif, void, ffi_raw, void) (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x403d754c: ?? (??:0) at 0x403d76e7: ffi_call_SYSV (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x403d7697: ffi_raw_call (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x4022e20b: _Jv_InterpMethod.continue1(_Jv_InterpMethodInvocation) (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x403e2644: _Jv_InterpMethod.run(ffi_cif, void, ffi_raw, _Jv_InterpMethodInvocation) (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x4022c024: _Jv_InBFD: Dwarf Error: Invalid or unhandled FORM value: 14. BFD: Dwarf Error: Invalid or unhandled FORM value: 14. BFD: Dwarf Error: Invalid or unhandled FORM value: 14. BFD: Dwarf Error: Invalid or unhandled FORM value: 14. terpMethod.run_normal(ffi_cif, void, ffi_raw, void) (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x403d754c: ?? (??:0) at 0x40232408: gnu.gcj.runtime.FirstThread.call_main() (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x402bab18: gnu.gcj.runtime.FirstThread.run() (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x4023dbcc: _Jv_ThreadRun(java.lang.Thread) (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x4021a2c4: _Jv_RunMain(java.lang.Class, byte const, int, byte const, boolean) (/packages/gnu-snapshot/lib/libgcj.so.3) at 0x08048a20: main (get_vector/../../../libjava/gij.cc:140) at 0x405de668: __libc_start_main (/lib/libc.so.6) at 0x08048781: _start (??:0) When I look (using strace) what files gij is trying to open(), I see that it searching for "./prog.properties" and "./prog.class" but not for "./prog_fr.properties" and "./prog_fr.class". It should search first for "./prog_fr.properties" and "./prog_fr.class" and then only for "./prog.properties" and "./prog.class". >Fix: Fix the internal working of this function. >Release-Note: >Audit-Trail: >Unformatted: