# HG changeset patch # User Elliott Sales de Andrade # Date 1292569941 0 # Node ID 5981b4116b5279a0ed147d06e1bc9c3e89514f8e # Parent 09c46c8f2f8f60ba2c77bb76960797a5b9418a2d Add some buffer reading/writing functions. I don't know if these are really the best implementations, but we'll see how they work out with each use. diff -r 09c46c8f2f8f -r 5981b4116b52 libpurple/protocols/msn/msnutils.c --- a/libpurple/protocols/msn/msnutils.c Thu Dec 16 22:27:43 2010 +0000 +++ b/libpurple/protocols/msn/msnutils.c Fri Dec 17 07:12:21 2010 +0000 @@ -617,3 +617,87 @@ output[32] = '\0'; } +guint8 +msn_read8(const char *buf) +{ + return (guint8)buf[0]; +} + +guint16 +msn_read16le(const char *buf) +{ + return GUINT16_FROM_LE(*(guint16 *)buf); +} + +guint16 +msn_read16be(const char *buf) +{ + return GUINT16_FROM_BE(*(guint16 *)buf); +} + +guint32 +msn_read32le(const char *buf) +{ + return GUINT32_FROM_LE(*(guint32 *)buf); +} + +guint32 +msn_read32be(const char *buf) +{ + return GUINT32_FROM_BE(*(guint32 *)buf); +} + +guint64 +msn_read64le(const char *buf) +{ + return GUINT64_FROM_LE(*(guint64 *)buf); +} + +guint64 +msn_read64be(const char *buf) +{ + return GUINT64_FROM_BE(*(guint64 *)buf); +} + +void +msn_write8(char *buf, guint8 data) +{ + *(guint8 *)buf = data; +} + +void +msn_write16le(char *buf, guint16 data) +{ + *(guint16 *)buf = GUINT16_TO_LE(data); +} + +void +msn_write16be(char *buf, guint16 data) +{ + *(guint16 *)buf = GUINT16_TO_BE(data); +} + +void +msn_write32le(char *buf, guint32 data) +{ + *(guint32 *)buf = GUINT32_TO_LE(data); +} + +void +msn_write32be(char *buf, guint32 data) +{ + *(guint32 *)buf = GUINT32_TO_BE(data); +} + +void +msn_write64le(char *buf, guint64 data) +{ + *(guint64 *)buf = GUINT64_TO_LE(data); +} + +void +msn_write64be(char *buf, guint64 data) +{ + *(guint64 *)buf = GUINT64_TO_BE(data); +} + diff -r 09c46c8f2f8f -r 5981b4116b52 libpurple/protocols/msn/msnutils.h --- a/libpurple/protocols/msn/msnutils.h Thu Dec 16 22:27:43 2010 +0000 +++ b/libpurple/protocols/msn/msnutils.h Fri Dec 17 07:12:21 2010 +0000 @@ -94,4 +94,142 @@ */ void msn_handle_chl(char *input, char *output); +/** + * Read a byte from a buffer + * + * @param buf Pointer to buffer. + * + * @return 8-bit byte + */ +guint8 msn_read8(const char *buf); + +/** + * Read a little-endian short from a buffer + * + * @param buf Pointer to buffer. + * + * @return 16-bit short + */ +guint16 msn_read16le(const char *buf); + +/** + * Read a big-endian short from a buffer + * + * @param buf Pointer to buffer. + * + * @return 16-bit short + */ +guint16 msn_read16be(const char *buf); + +/** + * Read a little-endian int from a buffer + * + * @param buf Pointer to buffer. + * + * @return 32-bit int + */ +guint32 msn_read32le(const char *buf); + +/** + * Read a big-endian int from a buffer + * + * @param buf Pointer to buffer. + * + * @return 32-bit int + */ +guint32 msn_read32be(const char *buf); + +/** + * Read a little-endian long from a buffer + * + * @param buf Pointer to buffer. + * + * @return 64-bit long + */ +guint64 msn_read64le(const char *buf); + +/** + * Read a big-endian long from a buffer + * + * @param buf Pointer to buffer. + * + * @return 64-bit long + */ +guint64 msn_read64be(const char *buf); + +/** + * Write a byte to a buffer + * + * @param buf Pointer to buffer. + * @param data 8-bit byte. + */ +void msn_write8(char *buf, guint8 data); + +/** + * Write a little-endian short to a buffer + * + * @param buf Pointer to buffer. + * @param data short. + */ +void msn_write16le(char *buf, guint16 data); + +/** + * Write a big-endian short to a buffer + * + * @param buf Pointer to buffer. + * @param data short. + */ +void msn_write16be(char *buf, guint16 data); + +/** + * Write a little-endian int to a buffer + * + * @param buf Pointer to buffer. + * @param data int. + */ +void msn_write32le(char *buf, guint32 data); + +/** + * Write a big-endian int to a buffer + * + * @param buf Pointer to buffer. + * @param data int. + */ +void msn_write32be(char *buf, guint32 data); + +/** + * Write a little-endian long to a buffer + * + * @param buf Pointer to buffer. + * @param data long. + */ +void msn_write64le(char *buf, guint64 data); + +/** + * Write a big-endian long to a buffer + * + * @param buf Pointer to buffer. + * @param data short + */ +void msn_write64be(char *buf, guint64 data); + +/** + * Same as above, but these increment the buf pointer. + */ +#define msn_pop8(buf) msn_read8((buf+=1)-1) +#define msn_pop16le(buf) msn_read16le((buf+=2)-2) +#define msn_pop16be(buf) msn_read16be((buf+=2)-2) +#define msn_pop32le(buf) msn_read32le((buf+=4)-4) +#define msn_pop32be(buf) msn_read32be((buf+=4)-4) +#define msn_pop64le(buf) msn_read64le((buf+=8)-8) +#define msn_pop64be(buf) msn_read64be((buf+=8)-8) +#define msn_push8(buf, data) msn_write8(buf, data), buf+=1 +#define msn_push16le(buf, data) msn_write16le(buf, data), buf+=2 +#define msn_push16be(buf, data) msn_write16be(buf, data), buf+=2 +#define msn_push32le(buf, data) msn_write32le(buf, data), buf+=4 +#define msn_push32be(buf, data) msn_write32be(buf, data), buf+=4 +#define msn_push64le(buf, data) msn_write64le(buf, data), buf+=8 +#define msn_push64be(buf, data) msn_write64be(buf, data), buf+=8 + #endif /* MSN_UTILS_H */ +