diff -r c768f27357ec -r 68220e4ccb15 libpurple/protocols/facebook/thrift.c --- a/libpurple/protocols/facebook/thrift.c Fri Aug 07 23:59:38 2015 -0400 +++ b/libpurple/protocols/facebook/thrift.c Sat Aug 08 19:43:59 2015 -0400 @@ -77,6 +77,7 @@ priv->bytes = bytes; priv->offset = offset; } else { + priv->bytes = g_byte_array_new(); priv->flags |= FB_THRIFT_FLAG_INTERNAL; } @@ -88,6 +89,16 @@ return thft; } +const GByteArray * +fb_thrift_get_bytes(FbThrift *thft) +{ + FbThriftPrivate *priv; + + g_return_val_if_fail(FB_IS_THRIFT(thft), NULL); + priv = thft->priv; + return priv->bytes; +} + guint fb_thrift_get_pos(FbThrift *thft) { @@ -728,7 +739,7 @@ void fb_thrift_write_vi16(FbThrift *thft, guint16 u16) { - fb_thrift_write_vi32(thft, u16); + fb_thrift_write_vi64(thft, u16); } void @@ -755,7 +766,6 @@ fb_thrift_write_vi64(thft, u32); } - void fb_thrift_write_i64(FbThrift *thft, gint64 i64) { @@ -790,10 +800,14 @@ do { last = (u64 & ~0x7F) == 0; - byte = !last ? ((u64 & 0x7F) | 0x80) : (u64 & 0x0F); + byte = u64 & 0x7F; + + if (!last) { + byte |= 0x80; + u64 >>= 7; + } fb_thrift_write_byte(thft, byte); - u64 >>= 7; } while (!last); }