Sophie

Sophie

distrib > Mageia > 8 > i586 > by-pkgid > c10308044d5c491bdcab79f420a50e93 > files > 4

erlang-snappy-1.1.1-0.19.git348da43.mga8.src.rpm

From: Peter Membrey <peter@membrey.hk>
Date: Fri, 16 May 2014 22:22:37 +0800
Subject: [PATCH] Returns empty binary and bypasses the compression library if
 an empty binary is passed in.


diff --git a/c_src/snappy_nif.cc b/c_src/snappy_nif.cc
index 1a80815..527b4d4 100644
--- a/c_src/snappy_nif.cc
+++ b/c_src/snappy_nif.cc
@@ -138,11 +138,22 @@ ERL_NIF_TERM
 snappy_compress_erl(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
 {
     ErlNifBinary input;
+    ErlNifBinary empty;
+
+    // init empty;
+    memset(&empty,0,sizeof(ErlNifBinary));
 
     if(!enif_inspect_iolist_as_binary(env, argv[0], &input)) {
         return enif_make_badarg(env);
     }
 
+    // If empty binary has been provided, return an empty binary.
+    // Snappy will do this in any case, so might as well skip the
+    // overhead...
+    if(input.size == 0) {
+        return make_ok(env, enif_make_binary(env,&empty));
+     }
+
     try {
         snappy::ByteArraySource source(SC_PTR(input.data), input.size);
         SnappyNifSink sink(env);
@@ -163,6 +174,9 @@ snappy_decompress_erl(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
     ErlNifBinary ret;
     size_t len;
 
+    // init ret;
+    memset(&ret,0,sizeof(ErlNifBinary));
+
     if(!enif_inspect_iolist_as_binary(env, argv[0], &bin)) {
         return enif_make_badarg(env);
     }