early check of the open mode, slightly more efficient

SVN revision: 12933
This commit is contained in:
tsauerbeck 2005-01-12 19:59:11 +00:00 committed by tsauerbeck
parent c422759847
commit ea8cac4716
1 changed files with 18 additions and 15 deletions

View File

@ -1,3 +1,7 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#include "Eet.h" #include "Eet.h"
#include "Eet_private.h" #include "Eet_private.h"
@ -963,13 +967,16 @@ eet_write(Eet_File *ef, char *name, void *data, int size, int compress)
int int
eet_delete(Eet_File *ef, char *name) eet_delete(Eet_File *ef, char *name)
{ {
int hash, node_size; int hash, node_size, i;
int exists_already = 0; int exists_already = 0;
/* check to see its' an eet file pointer */ /* check to see its' an eet file pointer */
if ((!ef) || (ef->magic != EET_MAGIC_FILE) || (!name)) if ((!ef) || (ef->magic != EET_MAGIC_FILE) || (!name))
return 0; return 0;
/* deleting keys is only possible in RW mode */
if (ef->mode != EET_FILE_MODE_RW) return 0;
if (!ef->header) return 0; if (!ef->header) return 0;
/* figure hash bucket */ /* figure hash bucket */
@ -977,22 +984,18 @@ eet_delete(Eet_File *ef, char *name)
node_size = ef->header->directory->hash[hash].size; node_size = ef->header->directory->hash[hash].size;
/* Does this node already exist? */ /* Does this node already exist? */
if (ef->mode == EET_FILE_MODE_RW) for (i = 0; i < node_size; i++)
{ {
int i; /* if it matches */
for (i = 0; i < node_size; i++) if (eet_string_match(ef->header->directory->hash[hash].node[i].name, name))
{ {
/* if it matches */ free(ef->header->directory->hash[hash].node[i].data);
if (eet_string_match(ef->header->directory->hash[hash].node[i].name, name)) ef->header->directory->hash[hash].node[i].compression = -1;
{ ef->header->directory->hash[hash].node[i].size = 0;
free(ef->header->directory->hash[hash].node[i].data); ef->header->directory->hash[hash].node[i].data_size = 0;
ef->header->directory->hash[hash].node[i].compression = -1; ef->header->directory->hash[hash].node[i].data = NULL;
ef->header->directory->hash[hash].node[i].size = 0; exists_already = 1;
ef->header->directory->hash[hash].node[i].data_size = 0; break;
ef->header->directory->hash[hash].node[i].data = NULL;
exists_already = 1;
break;
}
} }
} }
/* flags that writes are pending */ /* flags that writes are pending */