class CFPropertyList::Binary
def read_binary_object(fname,fd)
def read_binary_object(fname,fd) # first: read the marker byte buff = fd.read(1) object_length = buff.unpack("C*") object_length = object_length[0] & 0xF buff = buff.unpack("H*") object_type = buff[0][0].chr if(object_type != "0" && object_length == 15) then object_length = read_binary_object(fname,fd) object_length = object_length.value end retval = nil case object_type when '0' then # null, false, true, fillbyte retval = read_binary_null_type(object_length) when '1' then # integer retval = read_binary_int(fname,fd,object_length) when '2' then # real retval = read_binary_real(fname,fd,object_length) when '3' then # date retval = read_binary_date(fname,fd,object_length) when '4' then # data retval = read_binary_data(fname,fd,object_length) when '5' then # byte string, usually utf8 encoded retval = read_binary_string(fname,fd,object_length) when '6' then # unicode string (utf16be) retval = read_binary_unicode_string(fname,fd,object_length) when 'a' then # array retval = read_binary_array(fname,fd,object_length) when 'd' then # dictionary retval = read_binary_dict(fname,fd,object_length) end return retval end