Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : libs/eet

Dir     : e17/libs/eet/src/lib


Modified Files:
        eet_lib.c 


Log Message:
Delay string duplication until necessary.
Fix leak.

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/eet/src/lib/eet_lib.c,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -3 -r1.50 -r1.51
--- eet_lib.c   4 Nov 2005 03:22:22 -0000       1.50
+++ eet_lib.c   4 Nov 2005 17:44:01 -0000       1.51
@@ -916,10 +916,6 @@
        if (!ef->header->directory->nodes) return 0;
      }
 
-   /* dup name */
-   name = strdup(name);
-   if (!name) return 0;
-
    /* figure hash bucket */
    hash = eet_hash_gen(name, ef->header->directory->size);
 
@@ -930,11 +926,8 @@
    if (compress) data_size = 12 + ((size * 101) / 100);
 
    data2 = malloc(data_size);
-   if (!data2)
-     {
-       free(name);
-       return 0;
-     }
+   if (!data2) return 0;
+
    /* if we want to compress */
    if (compress)
      {
@@ -945,7 +938,6 @@
        if (compress2((Bytef *)data2, &buflen, (Bytef *)data,
                           (uLong)size, Z_BEST_COMPRESSION) != Z_OK)
          {
-            free(name);
             free(data2);
             return 0;
          }
@@ -981,7 +973,6 @@
                  efn->data_size = size;
                  efn->data = data2;
                  exists_already = 1;
-                 free(name);
                  break;
               }
          }
@@ -991,13 +982,18 @@
        efn = calloc(1, sizeof(Eet_File_Node));
        if (!efn)
          {
-            free(name);
+            free(data2);
+            return 0;
+         }
+       efn->name = strdup(name);
+       if (!efn->name)
+         {
+            free(efn);
             free(data2);
             return 0;
          }
        efn->next = ef->header->directory->nodes[hash];
        ef->header->directory->nodes[hash] = efn;
-       efn->name = name;
        efn->offset = 0;
        efn->compression = !!compress;
        efn->size = data_size;
@@ -1036,6 +1032,7 @@
        if (eet_string_match(efn->name, name))
          {
             if (efn->data) free(efn->data);
+            if (efn->name) free(efn->name);
             if (efn == ef->header->directory->nodes[hash])
               ef->header->directory->nodes[hash] = efn->next;
             else




-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to