lib/amq/pack.rb in amq-protocol-1.9.0 vs lib/amq/pack.rb in amq-protocol-1.9.1

- old
+ new

@@ -5,11 +5,12 @@ module AMQ # Implements pack to/unpack from 64bit string in network byte order # compatible with Ruby 1.8+. module Pack UINT64 = "Q".freeze - INT16 = "c".freeze + UINT16_BE = "n".freeze + INT16 = "c".freeze if Endianness.big_endian? def self.pack_uint64_big_endian(long_long) [long_long].pack(UINT64) end @@ -40,11 +41,11 @@ result = [long_long].pack(INT16) result.bytes.to_a.reverse.map(&:chr).join end def self.unpack_int16_big_endian(data) - data = data.bytes.to_a.reverse.map(&:chr).join - data.unpack(INT16) + value = data.bytes.to_a.map(&:chr).join.unpack(UINT16_BE)[0] + [(value & ~(1 << 15)) - (value & (1 << 15))] end end end # Backwards compatibility