Enlightenment CVS committal
Author : raster
Project : e17
Module : libs/eet
Dir : e17/libs/eet/src/lib
Modified Files:
Eet.h eet_lib.c
Log Message:
add a delete call
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/eet/src/lib/Eet.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -3 -r1.17 -r1.18
--- Eet.h 25 Nov 2004 05:15:48 -0000 1.17
+++ Eet.h 2 Dec 2004 04:25:25 -0000 1.18
@@ -188,6 +188,23 @@
* closed though).
*/
EAPI int eet_write (Eet_File *ef, char *name, void *data, int size,
int compress);
+
+ /**
+ * Delete a specified entry from an Eet file being written or re-written
+ * @param ef A valid eet file handle opened for writing.
+ * @param name Name of the entry. eg: "/base/file_i_want".
+ * @return Success or failure of the delete.
+ *
+ * This function will delete the specified chunk of data from the eet file
+ * and return greater than 0 on success. 0 will be returned on failure.
+ *
+ * The eet file handle must be a valid file handle for an eet file opened
+ * for writing. If it is not, 0 will be returned and no action will be
+ * performed.
+ *
+ * Name, must not be NULL, otherwise 0 will be returned.
+ */
+ EAPI int eet_delete(Eet_File *ef, char *name);
/**
* List all entries in eet file matching shell glob.
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/eet/src/lib/eet_lib.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- eet_lib.c 31 Oct 2004 11:21:30 -0000 1.18
+++ eet_lib.c 2 Dec 2004 04:25:25 -0000 1.19
@@ -281,34 +281,37 @@
unsigned char *buf;
int buf_size;
int name_size;
-
- name_size = strlen(ef->header->directory->hash[i].node[j].name);
- buf_size = 20 + name_size;
- buf = malloc(buf_size);
- if (!buf) return;
- i1 = (unsigned long
int)ef->header->directory->hash[i].node[j].offset;
- i2 = htonl(i1);
- *((int *)(buf + 0)) = (int)i2;
- i1 = (unsigned long
int)ef->header->directory->hash[i].node[j].compression;
- i2 = htonl(i1);
- *((int *)(buf + 4)) = (int)i2;
- i1 = (unsigned long
int)ef->header->directory->hash[i].node[j].size;
- i2 = htonl(i1);
- *((int *)(buf + 8)) = (int)i2;
- i1 = (unsigned long
int)ef->header->directory->hash[i].node[j].data_size;
- i2 = htonl(i1);
- *((int *)(buf + 12)) = (int)i2;
- i1 = (unsigned long int)name_size;
- i2 = htonl(i1);
- *((int *)(buf + 16)) = (int)i2;
- memcpy(buf + 20, ef->header->directory->hash[i].node[j].name,
name_size);
- if (fwrite(buf, buf_size, 1, ef->fp) != 1)
+
+ if (ef->header->directory->hash[i].node[j].compression >= 0)
{
+ name_size =
strlen(ef->header->directory->hash[i].node[j].name);
+ buf_size = 20 + name_size;
+ buf = malloc(buf_size);
+ if (!buf) return;
+ i1 = (unsigned long
int)ef->header->directory->hash[i].node[j].offset;
+ i2 = htonl(i1);
+ *((int *)(buf + 0)) = (int)i2;
+ i1 = (unsigned long
int)ef->header->directory->hash[i].node[j].compression;
+ i2 = htonl(i1);
+ *((int *)(buf + 4)) = (int)i2;
+ i1 = (unsigned long
int)ef->header->directory->hash[i].node[j].size;
+ i2 = htonl(i1);
+ *((int *)(buf + 8)) = (int)i2;
+ i1 = (unsigned long
int)ef->header->directory->hash[i].node[j].data_size;
+ i2 = htonl(i1);
+ *((int *)(buf + 12)) = (int)i2;
+ i1 = (unsigned long int)name_size;
+ i2 = htonl(i1);
+ *((int *)(buf + 16)) = (int)i2;
+ memcpy(buf + 20, ef->header->directory->hash[i].node[j].name,
name_size);
+ if (fwrite(buf, buf_size, 1, ef->fp) != 1)
+ {
+ free(buf);
+ return;
+ }
+ offset += buf_size;
free(buf);
- return;
}
- offset += buf_size;
- free(buf);
}
}
/* write data */
@@ -914,6 +917,7 @@
ef->header->directory->hash[hash].node[i].data_size = size;
ef->header->directory->hash[hash].node[i].data = data2;
exists_already = 1;
+ break;
}
}
}
@@ -946,6 +950,51 @@
return data_size;
}
+int
+eet_delete(Eet_File *ef, char *name)
+{
+ int hash, node_size;
+ Eet_File_Node *node;
+ int exists_already = 0;
+
+ /* check to see its' an eet file pointer */
+ if ((!ef) || (ef->magic != EET_MAGIC_FILE)
+ || (!name) ||
+ ((ef->mode != EET_FILE_MODE_WRITE) &&
+ (ef->mode != EET_FILE_MODE_RW)))
+ return 0;
+
+ if (!ef->header) return 0;
+
+ /* figure hash bucket */
+ hash = eet_hash_gen(name, ef->header->directory->size);
+ node_size = ef->header->directory->hash[hash].size;
+
+ /* Does this node already exist? */
+ if (ef->mode == EET_FILE_MODE_RW)
+ {
+ int i;
+ for (i = 0; i < node_size; i++)
+ {
+ /* if it matches */
+ if
(eet_string_match(ef->header->directory->hash[hash].node[i].name, name))
+ {
+ free(ef->header->directory->hash[hash].node[i].data);
+ ef->header->directory->hash[hash].node[i].compression = -1;
+ ef->header->directory->hash[hash].node[i].size = 0;
+ ef->header->directory->hash[hash].node[i].data_size = 0;
+ ef->header->directory->hash[hash].node[i].data = NULL;
+ exists_already = 1;
+ break;
+ }
+ }
+ }
+ /* flags that writes are pending */
+ if (exists_already) ef->writes_pending = 1;
+ /* update access time */
+ return exists_already;
+}
+
char **
eet_list(Eet_File *ef, char *glob, int *count_ret)
{
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://productguide.itmanagersjournal.com/
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs