Enlightenment CVS committal

Author  : tsauerbeck
Project : e17
Module  : libs/eet

Dir     : e17/libs/eet/src/lib


Modified Files:
        eet_lib.c 


Log Message:
more code cleanup
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/eet/src/lib/eet_lib.c,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -3 -r1.55 -r1.56
--- eet_lib.c   29 Nov 2005 11:44:51 -0000      1.55
+++ eet_lib.c   29 Nov 2005 18:49:30 -0000      1.56
@@ -80,6 +80,8 @@
 static int       eet_string_match(char *s1, char *s2);
 static int       eet_hash_gen(char *key, int hash_size);
 static void      eet_flush(Eet_File *ef);
+static Eet_File_Node *find_node_by_name (Eet_File *ef, char *name);
+static int read_data_from_disk(Eet_File *ef, Eet_File_Node *efn, void *buf, 
int len);
 
 /* cache. i don't expect this to ever be large, so arrays will do */
 static int        eet_writers_num     = 0;
@@ -784,123 +786,85 @@
 {
    void *data = NULL;
    int size = 0;
-   int hash;
    Eet_File_Node *efn;
    
+   if (size_ret) *size_ret = 0;
+
    /* check to see its' an eet file pointer */
    if ((!ef) || (ef->magic != EET_MAGIC_FILE) || (!name) ||
        ((ef->mode != EET_FILE_MODE_READ) &&
         (ef->mode != EET_FILE_MODE_READ_WRITE)))
      {
-       if (size_ret) *size_ret = 0;
        return NULL;
      }
    /* no header, return NULL */
    if (!ef->header) return NULL;
    /* no directory, return NULL */
    if (!ef->header->directory) return NULL;
-   /* get hash bucket this should be in */
-   hash = eet_hash_gen(name, ef->header->directory->size);
+
    /* hunt hash bucket */
-   for (efn = ef->header->directory->nodes[hash]; efn; efn = efn->next)
+   efn = find_node_by_name(ef, name);
+   if (!efn) return NULL;
+
+   /* get size (uncompressed, if compressed at all) */
+   size = efn->data_size;
+
+   /* allocate data */
+   data = malloc(size);
+   if (!data) return NULL;
+
+   /* uncompressed data */
+   if (efn->compression == 0)
      {
-       /* if it matches */
-       if (eet_string_match(efn->name, name))
+       /* if we alreayd have the data in ram... copy that */
+       if (efn->data)
+         memcpy(data, efn->data, efn->size);
+       else if (!read_data_from_disk(ef, efn, data, size))
+         {
+            free(data);
+            return NULL;
+         }
+     }
+   /* compressed data */
+   else
+     {
+       void *tmp_data;
+       int free_tmp = 0, compr_size = efn->size;
+       uLongf dlen;
+
+       /* if we already have the data in ram... copy that */
+       if (efn->data)
+         tmp_data = efn->data;
+       else
          {
-            /* uncompressed data */
-            if (efn->compression == 0)
+            tmp_data = malloc(compr_size);
+            if (!tmp_data)
               {
-                 /* get size */
-                 size = efn->size;
-                 /* allocate data */
-                 data = malloc(size);
-                 if (data)
-                   {
-                      /* if we alreayd have the data in ram... copy that */
-                      if (efn->data)
-                        memcpy(data, efn->data, efn->size);
-                      /* or get data from disk */
-                      else
-                        {
-                           /* seek to data location */
-                           if (fseek(ef->fp, efn->offset, SEEK_SET) < 0)
-                             {
-                                free(data);
-                                data = NULL;
-                                break;
-                             }
-                           /* read it */
-                           if (fread(data, size, 1, ef->fp) != 1)
-                             {
-                                free(data);
-                                data = NULL;
-                                break;
-                             }
-                        }
-                   }
-                 break;
+                 free(data);
+                 return NULL;
               }
-            /* compressed data */
-            else
-              {
-                 void *tmp_data;
-                 int free_tmp = 0, compr_size = efn->size;
-                 uLongf dlen;
-
-                 /* get size uncompressed */
-                 size = efn->data_size;
-                 /* allocate data */
-                 data = malloc(size);
-                 if (!data) break;
-
-                 /* if we already have the data in ram... copy that */
-                 if (efn->data)
-                   tmp_data = efn->data;
-                 else
-                   {
-                      tmp_data = malloc(compr_size);
-                      if (!tmp_data)
-                        {
-                           free(data);
-                           data = NULL;
-                           break;
-                        }
-
-                      free_tmp = 1;
-
-                      /* get data from disk */
-                      /* seek to data location */
-                      if (fseek(ef->fp, efn->offset, SEEK_SET) < 0)
-                        {
-                           free(tmp_data);
-                           free(data);
-                           data = NULL;
-                           break;
-                        }
-                      /* read it */
-                      if (fread(tmp_data, compr_size, 1, ef->fp) != 1)
-                        {
-                           free(tmp_data);
-                           free(data);
-                           data = NULL;
-                           break;
-                        }
-                   }
 
-                 /* decompress it */
-                 dlen = size;
-                 if (uncompress((Bytef *)data, &dlen,
-                          tmp_data, (uLongf)compr_size))
-                   {
-                      free(data);
-                      data = NULL;
-                   }
+            free_tmp = 1;
 
-                 if (free_tmp) free(tmp_data);
-                 break;
+            if (!read_data_from_disk(ef, efn, tmp_data, compr_size))
+              {
+                 free(data);
+                 return NULL;
               }
          }
+
+       /* decompress it */
+       dlen = size;
+       if (uncompress((Bytef *)data, &dlen,
+                tmp_data, (uLongf)compr_size))
+         {
+            free(data);
+            return NULL;
+         }
+
+       if (free_tmp) free(tmp_data);
      }
+
    /* fill in return values */
    if (size_ret) *size_ret = size;
    return data;
@@ -1147,3 +1111,28 @@
 
    return ret;
 }
+
+static Eet_File_Node *
+find_node_by_name(Eet_File *ef, char *name)
+{
+   Eet_File_Node *efn;
+   int hash;
+
+   /* get hash bucket this should be in */
+   hash = eet_hash_gen(name, ef->header->directory->size);
+
+   for (efn = ef->header->directory->nodes[hash]; efn; efn = efn->next)
+     if (eet_string_match(efn->name, name)) return efn;
+
+   return NULL;
+}
+
+static int
+read_data_from_disk(Eet_File *ef, Eet_File_Node *efn, void *buf, int len)
+{
+   /* seek to data location */
+   if (fseek(ef->fp, efn->offset, SEEK_SET) < 0) return 0;
+
+   /* read it */
+   return (fread(buf, len, 1, ef->fp) == 1);
+}




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to