[Fwd: [Python-Dev] test_gettext.py fails on 64-bit architectures]
Mark Favas
m.favas@per.dem.csiro.au
Fri, 01 Sep 2000 04:17:14 +0800
This is a multi-part message in MIME format.
--------------8FDA7E7BE838D95AC7E3DCE7
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
--
Email - m.favas@per.dem.csiro.au Mark C Favas
Phone - +61 8 9333 6268, 0418 926 074 CSIRO Exploration & Mining
Fax - +61 8 9383 9891 Private Bag No 5, Wembley
WGS84 - 31.95 S, 115.80 E Western Australia 6913
--------------8FDA7E7BE838D95AC7E3DCE7
Content-Type: message/rfc822
Content-Disposition: inline
Message-ID: <39AEBD01.601F7A83@per.dem.csiro.au>
Date: Fri, 01 Sep 2000 04:16:01 +0800
From: Mark Favas <m.favas@per.dem.csiro.au>
Organization: CSIRO Exploration & Mining
X-Mailer: Mozilla 4.75 [en] (X11; U; OSF1 V4.0 alpha)
X-Accept-Language: en
MIME-Version: 1.0
To: "Barry A. Warsaw" <bwarsaw@beopen.com>
Subject: Re: [Python-Dev] test_gettext.py fails on 64-bit architectures
References: <39AE07FF.478F413@per.dem.csiro.au> <14766.14278.609327.610929@anthem.concentric.net>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Hi Barry,
Close, but no cigar - fixes the miscalculation of BE_MAGIC, but "magic"
is still read from the .mo file as 0xffffffff950412de (the 64-bit rep of
the 32-bit negative integer 0x950412de)
Mark
"Barry A. Warsaw" wrote:
>
> >>>>> "MF" == Mark Favas <m.favas@per.dem.csiro.au> writes:
>
> MF> This is because the magic number is read in by the code in
> MF> Lib/gettext.py as FFFFFFFF950412DE (hex) (using unpack('<i',
> MF> buf[:4])[0]), and checked against LE_MAGIC (defined as
> MF> 950412DE) and BE_MAGIC (calculated as FFFFFFFFDE120495 using
> MF> struct.unpack('>i',struct.pack('<i', LE_MAGIC))[0])
>
> I was trying to be too clever. Just replace the BE_MAGIC value with
> 0xde120495, as in the included patch.
>
> MF> Replacing the "i" in the code that generates BE_MAGIC and
> MF> reads in "magic" by "I" makes the test work for me, but
> MF> there's other uses of "i" and "ii" when the rest of the .mo
> MF> file is processed that I'm unsure about with different inputs.
>
> Should be fine, I think. With < and > leading characters, those
> format strings should select `standard' sizes:
>
> Standard size and alignment are as follows: no alignment is
> required for any type (so you have to use pad bytes); short is 2
> bytes; int and long are 4 bytes. float and double are 32-bit and
> 64-bit IEEE floating point numbers, respectively.
>
> Please run the test again with this patch and let me know.
> -Barry
>
> Index: gettext.py
> ===================================================================
> RCS file: /cvsroot/python/python/dist/src/Lib/gettext.py,v
> retrieving revision 1.4
> diff -u -r1.4 gettext.py
> --- gettext.py 2000/08/30 03:29:58 1.4
> +++ gettext.py 2000/08/31 10:40:41
> @@ -125,7 +125,7 @@
> class GNUTranslations(NullTranslations):
> # Magic number of .mo files
> LE_MAGIC = 0x950412de
> - BE_MAGIC = struct.unpack('>i', struct.pack('<i', LE_MAGIC))[0]
> + BE_MAGIC = 0xde120495
>
> def _parse(self, fp):
> """Override this method to support alternative .mo formats."""
--
Email - m.favas@per.dem.csiro.au Mark C Favas
Phone - +61 8 9333 6268, 0418 926 074 CSIRO Exploration & Mining
Fax - +61 8 9383 9891 Private Bag No 5, Wembley
WGS84 - 31.95 S, 115.80 E Western Australia 6913
--------------8FDA7E7BE838D95AC7E3DCE7--