]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/serialization.cpp
Merge pull request #447 from sapier/add_lua_log_parameter_check
[dragonfireclient.git] / src / serialization.cpp
index f150d45f05edd150b253fbd4184d43fad117f566..c57e1642a79e881d2df488f5b33dce423fa72d87 100644 (file)
@@ -3,22 +3,23 @@ Minetest-c55
 Copyright (C) 2010 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 General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
 (at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+GNU Lesser General Public License for more details.
 
-You should have received a copy of the GNU General Public License along
+You should have received a copy of the GNU Lesser General Public License along
 with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
 #include "serialization.h"
-#include "utility.h"
+
+#include "util/serialize.h"
 #ifdef _WIN32
        #define ZLIB_WINAPI
 #endif
@@ -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);