diff options
Diffstat (limited to 'facebook/facebook-thrift.c')
-rw-r--r-- | facebook/facebook-thrift.c | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/facebook/facebook-thrift.c b/facebook/facebook-thrift.c index bde1eb1..9604e4d 100644 --- a/facebook/facebook-thrift.c +++ b/facebook/facebook-thrift.c @@ -26,7 +26,6 @@ struct _FbThriftPrivate guint offset; guint pos; guint lastbool; - gint16 lastid; }; G_DEFINE_TYPE(FbThrift, fb_thrift, G_TYPE_OBJECT); @@ -330,7 +329,8 @@ fb_thrift_read_str(FbThrift *thft, gchar **value) } gboolean -fb_thrift_read_field(FbThrift *thft, FbThriftType *type, gint16 *id) +fb_thrift_read_field(FbThrift *thft, FbThriftType *type, gint16 *id, + gint16 lastid) { FbThriftPrivate *priv; gint16 i16; @@ -338,6 +338,7 @@ fb_thrift_read_field(FbThrift *thft, FbThriftType *type, gint16 *id) g_return_val_if_fail(FB_IS_THRIFT(thft), FALSE); g_return_val_if_fail(type != NULL, FALSE); + g_return_val_if_fail(id != NULL, FALSE); priv = thft->priv; if (!fb_thrift_read_byte(thft, &byte)) { @@ -352,29 +353,22 @@ fb_thrift_read_field(FbThrift *thft, FbThriftType *type, gint16 *id) *type = fb_thrift_ct2t(byte & 0x0F); i16 = (byte & 0xF0) >> 4; - if (*type == FB_THRIFT_TYPE_BOOL) { - priv->lastbool = 0x01; - - if ((byte & 0x0F) == 0x01) { - priv->lastbool |= 0x01 << 2; - } - - return TRUE; - } - if (i16 == 0) { - if (!fb_thrift_read_i16(thft, &i16)) { + if (!fb_thrift_read_i16(thft, id)) { return FALSE; } } else { - i16 = priv->lastid + i16; + *id = lastid + i16; } - if (id != NULL) { - *id = i16; + if (*type == FB_THRIFT_TYPE_BOOL) { + priv->lastbool = 0x01; + + if ((byte & 0x0F) == 0x01) { + priv->lastbool |= 0x01 << 2; + } } - priv->lastid = i16; return TRUE; } @@ -585,7 +579,8 @@ fb_thrift_write_str(FbThrift *thft, const gchar *value) } void -fb_thrift_write_field(FbThrift *thft, FbThriftType type, gint16 id) +fb_thrift_write_field(FbThrift *thft, FbThriftType type, gint16 id, + gint16 lastid) { FbThriftPrivate *priv; gint16 diff; @@ -598,16 +593,14 @@ fb_thrift_write_field(FbThrift *thft, FbThriftType type, gint16 id) } type = fb_thrift_t2ct(type); - diff = id - priv->lastid; + diff = id - lastid; - if ((id <= priv->lastid) || (diff > 0x0F)) { + if ((id <= lastid) || (diff > 0x0F)) { fb_thrift_write_byte(thft, type); fb_thrift_write_i16(thft, id); } else { fb_thrift_write_byte(thft, (diff << 4) | type); } - - priv->lastid = id; } void |