ooops! :)
authorraster <raster>
Sun, 15 Dec 2002 01:32:13 +0000 (01:32 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sun, 15 Dec 2002 01:32:13 +0000 (01:32 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/e17/libs/eet@6491 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/eet_lib.c

index e1cef9d..c40d8e9 100644 (file)
@@ -781,7 +781,8 @@ eet_write(Eet_File *ef, char *name, void *data, int size, int compress)
    if (!name2) return 0;
    /* dup data */
    data_size = size;
-   if (compress == 1)     
+   /* have bigger buffer for compress */
+   if (compress == 1)
      data_size = 12 + ((size * 101) / 100);
    data2 = malloc(data_size);
    if (!data2)
@@ -793,10 +794,12 @@ eet_write(Eet_File *ef, char *name, void *data, int size, int compress)
    if (compress == 1)
      {
        uLongf buflen;
-       
+       int ok;
+         
        /* compress the data with max compression */
-       if (compress2((Bytef *)data2, &buflen, (Bytef *)data, 
-                     (uLong)size, 9) != Z_OK)
+       buflen = (uLongf)data_size;
+       if ((ok = compress2((Bytef *)data2, &buflen, (Bytef *)data, 
+                          (uLong)size, 9)) != Z_OK)
          {
             free(name2);
             free(data2);
@@ -809,6 +812,13 @@ eet_write(Eet_File *ef, char *name, void *data, int size, int compress)
             compress = 0;
             data_size = size;
          }
+       else
+         {
+            void *data3;
+            
+            data3 = realloc(data2, data_size);
+            if (data3) data2 = data3;
+         }
      }
    if (!compress)
      memcpy(data2, data, size);