From: Jean Privat Date: Wed, 3 Jun 2015 02:00:06 +0000 (-0400) Subject: Merge: Manage errors on reading binary data X-Git-Tag: v0.7.6~68 X-Git-Url: http://nitlanguage.org?hp=-c Merge: Manage errors on reading binary data Pull-Request: #1430 Reviewed-by: Alexandre Terrasa Reviewed-by: Jean Privat --- 4992fcabb79f22daf550d74308d4635f3b86090b diff --combined lib/binary/binary.nit index 10d9017,0664375..f4be1eb --- a/lib/binary/binary.nit +++ b/lib/binary/binary.nit @@@ -45,13 -45,10 +45,13 @@@ in "C" ` #include // Android compatibility + #ifndef be32toh + #define be32toh(val) betoh32(val) + #define le32toh(val) letoh32(val) + #endif + #ifndef be64toh #define be64toh(val) betoh64(val) - #endif - #ifndef le64toh #define le64toh(val) letoh64(val) #endif `} @@@ -151,11 -148,15 +151,15 @@@ redef abstract class Reade super BinaryStream # Read a single byte and return `true` if its value is different than 0 + # + # Returns `false` when an error is pending (`last_error != null`). fun read_bool: Bool do return read_byte != 0 # Get an `Array` of 8 `Bool` by reading a single byte # # To be used with `BinaryWriter::write_bits`. + # + # Returns an array of `false` when an error is pending (`last_error != null`). fun read_bits: Array[Bool] do var int = read_byte @@@ -166,12 -167,14 +170,14 @@@ # Read a null terminated string # # To be used with `Writer::write_string`. + # + # Returns a truncated string when an error is pending (`last_error != null`). fun read_string: String do var buf = new FlatBuffer loop var byte = read_byte - if byte == 0x00 then return buf.to_s + if byte == null or byte == 0x00 then return buf.to_s buf.chars.add byte.ascii end end @@@ -179,6 -182,8 +185,8 @@@ # Read the length as a 64 bits integer, then the content of the block # # To be used with `Writer::write_block`. + # + # Returns a truncated string when an error is pending (`last_error != null`). fun read_block: String do var length = read_int64 @@@ -190,6 -195,8 +198,8 @@@ # # Using this format may result in a loss of precision as it uses less bits # than Nit `Float`. + # + # Returns `0.0` when an error is pending (`last_error != null`). fun read_float: Float do if last_error != null then return 0.0 @@@ -226,6 -233,8 +236,8 @@@ `} # Read a floating point on 64 bits and return it as a `Float` + # + # Returns `0.0` when an error is pending (`last_error != null`). fun read_double: Float do if last_error != null then return 0.0 @@@ -274,6 -283,8 +286,8 @@@ # # Using this format may result in a loss of precision as the length of a # Nit `Int` may be less than 64 bits on some platforms. + # + # Returns `0` when an error is pending (`last_error != null`). fun read_int64: Int do if last_error != null then return 0