Hi, Unfortunately it doesn't seem to be working yet. It looks like the "sizeof" in two of the macros are an oversight, and further down OFF16B and OFF32B were getting redefined on a NATINT_PACK but not WORDS_BIGENDIAN machine. Here's my shot at fixing it: --- pack.c~ Tue Oct 17 00:28:22 2000 +++ pack.c Tue Oct 17 00:36:28 2000 @@ -24,12 +24,15 @@ #ifdef NATINT_PACK # define OFF16B(p) ((char*)(p) + (natint?0:(sizeof(short) - SIZE16))) # define OFF32B(p) ((char*)(p) + (natint?0:(sizeof(long) - SIZE32))) -# define NATINT_I32(x) (natint?sizeof(NUM2LONG(x)):(NUM2I32(x))) -# define NATINT_U32(x) (natint?sizeof(NUM2ULONG(x)):(NUM2U32(x))) +# define NATINT_I32(x) (natint?(NUM2LONG(x)):(NUM2I32(x))) +# define NATINT_U32(x) (natint?(NUM2ULONG(x)):(NUM2U32(x))) # define NATINT_LEN(type,len) (natint?sizeof(type):(len)) # ifdef WORDS_BIGENDIAN # define OFF16(p) OFF16B(p) # define OFF32(p) OFF32B(p) +# else +# define OFF16(p) (char*)(p) +# define OFF32(p) (char*)(p) # endif #else # define NATINT_I32(x) NUM2I32(x) At least "make test" now doesn't fail, and the tests I did with pack and unpack of "N" and "n" and a few others all seemed to be working. Thanks, Wes. ## Wes Nakamura - wknaka / pobox.com On Mon, 16 Oct 2000, Yukihiro Matsumoto wrote: : Hi, : : In message "[ruby-talk:5554] Problem with pack on 64-bit machines" : on 00/10/16, Wes Nakamura <wknaka / pobox.com> writes: : : |I think I've found a problem with ruby 1.6.1 (non-cvs) Array#pack when : |on a 64-bit machine (in this case, an alpha running linux, so it's : |64-bit little-endian). : | : |e.g.: : | : |>> [1].pack "N" : |=> "\000\000\000\000" : |>> [0x0102030405060708].pack "N" : |=> "\001\002\003\004" : |>> [0x0000000001020304].pack "N" : |=> "\000\000\000\000" : : Thank you. I found two bugs. : : * offset shoule be applied for network byteorder, even on little : endien machines. : : * integer size should be checked even for unsigned integers. : : I think I fixed this. Try the latest CVS, or soon releasing 1.6.2. : Thank you again. : : matz. : p.s. : I also appreciate the staffs in the Unversity of Tokyo, who supplied me : an account to Alpha Linux machine. : : :