Delay string duplication until necessary.

Fix leak.


SVN revision: 18287
This commit is contained in:
sebastid 2005-11-04 17:44:01 +00:00 committed by sebastid
parent ce987876a8
commit fb95ab1814
1 changed files with 10 additions and 13 deletions

View File

@ -916,10 +916,6 @@ eet_write(Eet_File *ef, char *name, void *data, int size, int compress)
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 @@ eet_write(Eet_File *ef, char *name, void *data, int size, int compress)
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 @@ eet_write(Eet_File *ef, char *name, void *data, int size, int compress)
if (compress2((Bytef *)data2, &buflen, (Bytef *)data,
(uLong)size, Z_BEST_COMPRESSION) != Z_OK)
{
free(name);
free(data2);
return 0;
}
@ -981,7 +973,6 @@ eet_write(Eet_File *ef, char *name, void *data, int size, int compress)
efn->data_size = size;
efn->data = data2;
exists_already = 1;
free(name);
break;
}
}
@ -991,13 +982,18 @@ eet_write(Eet_File *ef, char *name, void *data, int size, int compress)
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 @@ eet_delete(Eet_File *ef, char *name)
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