[Python-Dev] test_gettext.py fails on 64-bit architectures
Barry A. Warsaw
bwarsaw@beopen.com
Thu, 31 Aug 2000 06:47:34 -0400 (EDT)
>>>>> "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."""