]> git.lizzy.rs Git - minetest.git/blobdiff - src/serialization.cpp
Don't use msvc libs for mingw build
[minetest.git] / src / serialization.cpp
index 64fd4f8ba5541481ede66085192673f336c3599d..1fd75c97aae219608c67e9990ff595693cd1a07a 100644 (file)
@@ -1,6 +1,6 @@
 /*
-Minetest-c55
-Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
+Minetest
+Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
@@ -18,8 +18,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 */
 
 #include "serialization.h"
-#include "utility.h"
-#ifdef _WIN32
+
+#include "util/serialize.h"
+#ifdef _MSC_VER
        #define ZLIB_WINAPI
 #endif
 #include "zlib.h"
@@ -56,9 +57,7 @@ void compressZlib(SharedBuffer<u8> data, std::ostream &os)
 {
        z_stream z;
        const s32 bufsize = 16384;
-       //char input_buffer[bufsize];
        char output_buffer[bufsize];
-       int input_i = 0;
        int status = 0;
        int ret;
 
@@ -70,26 +69,16 @@ void compressZlib(SharedBuffer<u8> data, std::ostream &os)
        if(ret != Z_OK)
                throw SerializationError("compressZlib: deflateInit failed");
        
-       z.avail_in = 0;
-       
+       // Point zlib to our input buffer
+       z.next_in = (Bytef*)&data[0];
+       z.avail_in = data.getSize();
+       // And get all output
        for(;;)
        {
-               int flush = Z_NO_FLUSH;
                z.next_out = (Bytef*)output_buffer;
                z.avail_out = bufsize;
-
-               if(z.avail_in == 0)
-               {
-                       //z.next_in = (char*)&data[input_i];
-                       z.next_in = (Bytef*)&data[input_i];
-                       z.avail_in = data.getSize() - input_i;
-                       input_i += z.avail_in;
-                       if(input_i == (int)data.getSize())
-                               flush = Z_FINISH;
-               }
-               if(z.avail_in == 0)
-                       break;
-               status = deflate(&z, flush);
+               
+               status = deflate(&z, Z_FINISH);
                if(status == Z_NEED_DICT || status == Z_DATA_ERROR
                                || status == Z_MEM_ERROR)
                {
@@ -99,6 +88,9 @@ void compressZlib(SharedBuffer<u8> data, std::ostream &os)
                int count = bufsize - z.avail_out;
                if(count)
                        os.write(output_buffer, count);
+               // This determines zlib has given all output
+               if(status == Z_STREAM_END)
+                       break;
        }
 
        deflateEnd(&z);