lib/fiddle/pack.rb in fiddle-1.0.0 vs lib/fiddle/pack.rb in fiddle-1.0.1

- old
+ new

@@ -16,11 +16,11 @@ -TYPE_INT => ALIGN_INT, -TYPE_LONG => ALIGN_LONG, } PACK_MAP = { - TYPE_VOIDP => ((SIZEOF_VOIDP == SIZEOF_LONG_LONG) ? "q" : "l!"), + TYPE_VOIDP => "l!", TYPE_CHAR => "c", TYPE_SHORT => "s!", TYPE_INT => "i!", TYPE_LONG => "l!", TYPE_FLOAT => "f", @@ -46,10 +46,11 @@ } if defined?(TYPE_LONG_LONG) ALIGN_MAP[TYPE_LONG_LONG] = ALIGN_MAP[-TYPE_LONG_LONG] = ALIGN_LONG_LONG PACK_MAP[TYPE_LONG_LONG] = PACK_MAP[-TYPE_LONG_LONG] = "q" SIZE_MAP[TYPE_LONG_LONG] = SIZE_MAP[-TYPE_LONG_LONG] = SIZEOF_LONG_LONG + PACK_MAP[TYPE_VOIDP] = "q" if SIZEOF_LONG_LONG == SIZEOF_VOIDP end def align(addr, align) d = addr % align if( d == 0 ) @@ -78,24 +79,30 @@ def pack(ary) case SIZEOF_VOIDP when SIZEOF_LONG ary.pack(@template) - when SIZEOF_LONG_LONG - ary.pack(@template) else - raise(RuntimeError, "sizeof(void*)?") + if defined?(TYPE_LONG_LONG) and + SIZEOF_VOIDP == SIZEOF_LONG_LONG + ary.pack(@template) + else + raise(RuntimeError, "sizeof(void*)?") + end end end def unpack(ary) case SIZEOF_VOIDP when SIZEOF_LONG ary.join().unpack(@template) - when SIZEOF_LONG_LONG - ary.join().unpack(@template) else - raise(RuntimeError, "sizeof(void*)?") + if defined?(TYPE_LONG_LONG) and + SIZEOF_VOIDP == SIZEOF_LONG_LONG + ary.join().unpack(@template) + else + raise(RuntimeError, "sizeof(void*)?") + end end end private