From e64df3b025f999c9f7989bb87adc14ad456b29e1 Mon Sep 17 00:00:00 2001 From: joewilliams Date: Thu, 7 Jun 2012 10:44:37 -0700 Subject: [PATCH] try a couple suggestions from davisp --- c_src/lz4.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/c_src/lz4.c b/c_src/lz4.c index 354945f..c319024 100644 --- a/c_src/lz4.c +++ b/c_src/lz4.c @@ -44,8 +44,13 @@ static inline void store_le32(char *c, u_int32_t x) static inline u_int32_t load_le32(const char *c) { - const u_int8_t *d = (const u_int8_t *)c; - return d[0] | (d[1] << 8) | (d[2] << 16) | (d[3] << 24); + const u_int8_t *d = (const u_int8_t *)c; + u_int32_t r = d[0]; + + r = (r << 8) | d[1]; + r = (r << 8) | d[2]; + r = (r << 8) | d[3]; + return r; } static const int hdr_size = sizeof(u_int32_t); @@ -89,6 +94,7 @@ compress(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { ErlNifBinary source; char *result_buf = NULL; int dest_size; + int real_size; if (!enif_inspect_binary(env, argv[0], &source)) return enif_make_badarg(env); @@ -98,7 +104,8 @@ compress(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { store_le32(result_buf, source.size); - LZ4_compress(source.data, result_buf + hdr_size, source.size); + real_size = LZ4_compress(source.data, result_buf + hdr_size, source.size); + enif_realloc_binary(&result, real_size); return enif_make_tuple2(env, atom_ok, result); }