Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/eet

Dir     : e17/libs/eet/src/lib


Modified Files:
        Eet_private.h eet_data.c eet_image.c eet_lib.c 


Log Message:


reduce some allocs

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/eet/src/lib/Eet_private.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- Eet_private.h       26 May 2005 03:57:57 -0000      1.7
+++ Eet_private.h       4 Nov 2005 03:22:22 -0000       1.8
@@ -1,9 +1,7 @@
 #ifndef _EET_PRIVATE_H
 #define _EET_PRIVATE_H
 
-#ifdef HAVE_CONFIG_H
 #include "config.h"
-#endif
 
 #include <stdio.h>
 #include <unistd.h>
@@ -13,6 +11,9 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#if HAVE_ALLOCA_H
+#include <alloca.h>
+#endif
 
 #ifdef HAVE_NETINET_IN_H
 #include <netinet/in.h>
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/eet/src/lib/eet_data.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -3 -r1.25 -r1.26
--- eet_data.c  4 Oct 2005 11:31:44 -0000       1.25
+++ eet_data.c  4 Nov 2005 03:22:22 -0000       1.26
@@ -505,10 +505,11 @@
    Eet_Data_Chunk *chnk;
 
    if (!name) return NULL;
-   chnk = calloc(1, sizeof(Eet_Data_Chunk));
+   chnk = malloc(sizeof(Eet_Data_Chunk) + strlen(name) + 1);
    if (!chnk) return NULL;
 
-   chnk->name = strdup(name);
+   chnk->name = ((char *)chnk) + sizeof(Eet_Data_Chunk);
+   strcpy(chnk->name, name);
    chnk->size = size;
    chnk->data = data;
 
@@ -518,7 +519,6 @@
 static void
 eet_data_chunk_free(Eet_Data_Chunk *chnk)
 {
-   if (chnk->name) free(chnk->name);
    free(chnk);
 }
 
@@ -700,8 +700,9 @@
    Eet_Data_Descriptor *edd;
 
    if (!name) return NULL;
-   edd = calloc(1, sizeof(Eet_Data_Descriptor));
-   edd->name = strdup(name);
+   edd = calloc(1, sizeof(Eet_Data_Descriptor) + strlen(name) + 1);
+   edd->name = ((char *)edd) + sizeof(Eet_Data_Descriptor);
+   strcpy(edd->name, name);
    edd->size = size;
    edd->func.list_next = func_list_next;
    edd->func.list_append = func_list_append;
@@ -719,7 +720,6 @@
    int i;
 
    _eet_descriptor_hash_free(edd);
-   if (edd->name) free(edd->name);
    for (i = 0; i < edd->elements.num; i++)
      {
        if (edd->elements.set[i].name) free(edd->elements.set[i].name);
@@ -792,7 +792,7 @@
    freelist_num++;
    if (freelist_num > freelist_len)
      {
-       freelist_len += 16;
+       freelist_len += 64;
        freelist = realloc(freelist, freelist_len * sizeof(void *));
      }
    freelist[freelist_num - 1] = data;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/eet/src/lib/eet_image.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- eet_image.c 23 May 2005 04:32:03 -0000      1.3
+++ eet_image.c 4 Nov 2005 03:22:22 -0000       1.4
@@ -171,17 +171,10 @@
        _eet_memfile_read_close(f);
        return NULL;
      }
-   tdata = malloc((*w) * 16 * 3);
-   if (!tdata)
-     {
-       jpeg_destroy_decompress(&cinfo);
-       _eet_memfile_read_close(f);
-       return NULL;
-     }
+   tdata = alloca((*w) * 16 * 3);
    d = malloc((*w) * (*h) * 4);
    if (!d)
      {
-       free(tdata);
        jpeg_destroy_decompress(&cinfo);
        _eet_memfile_read_close(f);
        return NULL;
@@ -233,7 +226,6 @@
               }
          }
      }
-   free(tdata);
    /* end data decoding */
    jpeg_finish_decompress(&cinfo);
    jpeg_destroy_decompress(&cinfo);
@@ -305,40 +297,11 @@
        _eet_memfile_read_close(f);
        return NULL;
      }
-   tdata = malloc((*w) * 16 * 3);
-   if (!tdata)
-     {
-       jpeg_destroy_decompress(&cinfo);
-       _eet_memfile_read_close(f);
-       return NULL;
-     }
+   tdata = alloca((*w) * 16 * 3);
    ptr2 = d;
    count = 0;
    prevy = 0;
-   if (cinfo.output_components == 3)
-     {
-       for (i = 0; i < cinfo.rec_outbuf_height; i++)
-         line[i] = tdata + (i * (*w) * 3);
-       for (l = 0; l < (*h); l += cinfo.rec_outbuf_height)
-         {
-            jpeg_read_scanlines(&cinfo, line, cinfo.rec_outbuf_height);
-            scans = cinfo.rec_outbuf_height;
-            if (((*h) - l) < scans) scans = (*h) - l;
-            ptr = tdata;
-            for (y = 0; y < scans; y++)
-              {
-                 for (x = 0; x < (*w); x++)
-                   {
-                       *ptr2 =
-                        ((*ptr2) & 0x00ffffff) |
-                        (((ptr[0] + ptr[1] + ptr[2]) / 3) << 24);
-                      ptr += 3;
-                      ptr2++;
-                   }
-              }
-         }
-     }
-   else if (cinfo.output_components == 1)
+   if (cinfo.output_components == 1)
      {
        for (i = 0; i < cinfo.rec_outbuf_height; i++)
          line[i] = tdata + (i * (*w));
@@ -361,7 +324,6 @@
               }
          }
      }
-   free(tdata);
    /* end data decoding */
    jpeg_finish_decompress(&cinfo);
    jpeg_destroy_decompress(&cinfo);
@@ -486,13 +448,7 @@
    f =_eet_memfile_write_open(&d, &sz);
    if (!f) return NULL;
 
-   buf = malloc(3 * w);
-   if (!buf)
-     {
-       _eet_memfile_write_close(f);
-       if (d) free(d);
-       return NULL;
-     }
+   buf = alloca(3 * w);
 
    cinfo.err = jpeg_std_error(&(jerr.pub));
    jerr.pub.error_exit = _JPEGFatalErrorHandler;
@@ -501,7 +457,6 @@
    if (setjmp(jerr.setjmp_buffer))
      {
        jpeg_destroy_compress(&cinfo);
-       if (buf) free(buf);
        _eet_memfile_write_close(f);
        if (d) free(d);
        return NULL;
@@ -547,7 +502,6 @@
 
    _eet_memfile_write_close(f);
    *size = sz;
-   if (buf) free(buf);
    return d;
 }
 
@@ -583,13 +537,7 @@
        f = _eet_memfile_write_open(&d, &sz);
        if (!f) return NULL;
 
-       buf = malloc(3 * w);
-       if (!buf)
-         {
-            _eet_memfile_write_close(f);
-            if (d) free(d);
-            return NULL;
-         }
+       buf = alloca(3 * w);
 
        cinfo.err = jpeg_std_error(&(jerr.pub));
        jerr.pub.error_exit = _JPEGFatalErrorHandler;
@@ -598,7 +546,6 @@
        if (setjmp(jerr.setjmp_buffer))
          {
             jpeg_destroy_compress(&cinfo);
-            if (buf) free(buf);
             _eet_memfile_write_close(f);
             if (d) free(d);
             return NULL;
@@ -642,7 +589,6 @@
        jpeg_finish_compress(&cinfo);
        jpeg_destroy_compress(&cinfo);
 
-       if (buf) free(buf);
        _eet_memfile_write_close(f);
        d1 = d;
        sz1 = sz;
@@ -664,14 +610,7 @@
             return NULL;
          }
 
-       buf = malloc(3 * w);
-       if (!buf)
-         {
-            _eet_memfile_write_close(f);
-            if (d) free(d);
-            free(d1);
-            return NULL;
-         }
+       buf = alloca(3 * w);
 
        cinfo.err = jpeg_std_error(&(jerr.pub));
        jerr.pub.error_exit = _JPEGFatalErrorHandler;
@@ -680,7 +619,6 @@
        if (setjmp(jerr.setjmp_buffer))
          {
             jpeg_destroy_compress(&cinfo);
-            if (buf) free(buf);
             _eet_memfile_write_close(f);
             if (d) free(d);
             free(d1);
@@ -723,7 +661,6 @@
        jpeg_finish_compress(&cinfo);
        jpeg_destroy_compress(&cinfo);
 
-       if (buf) free(buf);
        _eet_memfile_write_close(f);
        d2 = d;
        sz2 = sz;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/eet/src/lib/eet_lib.c,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -3 -r1.49 -r1.50
--- eet_lib.c   3 Nov 2005 15:05:21 -0000       1.49
+++ eet_lib.c   4 Nov 2005 03:22:22 -0000       1.50
@@ -22,7 +22,6 @@
    int              references;
 
    char            *path;
-   char            *real_path;
 
    FILE            *fp;
    Eet_File_Mode    mode;
@@ -75,7 +74,7 @@
 #endif
 
 /* prototypes of internal calls */
-static Eet_File *eet_cache_find(char *real_path, Eet_File **cache, int 
cache_num);
+static Eet_File *eet_cache_find(char *path, Eet_File **cache, int cache_num);
 static void      eet_cache_add(Eet_File *ef, Eet_File ***cache, int 
*cache_num, int *cache_alloc);
 static void      eet_cache_del(Eet_File *ef, Eet_File ***cache, int 
*cache_num, int *cache_alloc);
 static int       eet_string_match(char *s1, char *s2);
@@ -94,7 +93,7 @@
 
 /* find an eet file in the currently in use cache */
 static Eet_File *
-eet_cache_find(char *real_path, Eet_File **cache, int cache_num)
+eet_cache_find(char *path, Eet_File **cache, int cache_num)
 {
    int i;
 
@@ -102,7 +101,7 @@
    for (i = 0; i < cache_num; i++)
      {
        /* if matches real path - return it */
-       if (eet_string_match(cache[i]->real_path, real_path))
+       if (eet_string_match(cache[i]->path, path))
          {
             if (!cache[i]->delete_me_now) return cache[i];
          }
@@ -299,7 +298,7 @@
 
                  name_size = strlen(efn->name);
                  buf_size = 20 + name_size;
-                 buf = malloc(buf_size);
+                 buf = alloca(buf_size);
                  if (!buf) return;
                  i1 = (unsigned long int)efn->offset;
                  i2 = htonl(i1);
@@ -317,13 +316,8 @@
                  i2 = htonl(i1);
                  *((int *)(buf + 16)) = (int)i2;
                  memcpy(buf + 20, efn->name, name_size);
-                 if (fwrite(buf, buf_size, 1, ef->fp) != 1)
-                   {
-                      free(buf);
-                      return;
-                   }
+                 if (fwrite(buf, buf_size, 1, ef->fp) != 1) return;
                  offset += buf_size;
-                 free(buf);
               }
          }
      }
@@ -384,12 +378,7 @@
          {
             Eet_File **closelist = NULL;
             
-            closelist = malloc(num * sizeof(Eet_File *));
-            if (!closelist)
-              {
-                 fprintf(stderr, "BAD ERROR! Eet malloc of closelist. 
Abort\n");
-                 abort();
-              }
+            closelist = alloca(num * sizeof(Eet_File *));
             num = 0;
             for (i = 0; i < eet_writers_num; i++)
               {
@@ -408,7 +397,6 @@
                    }
               }
             for (i = 0; i < num; i++) eet_close(closelist[i]);
-            free(closelist);
          }
      }
 }
@@ -417,39 +405,25 @@
 eet_open(const char *file, Eet_File_Mode mode)
 {
    Eet_File *ef;
-   char buf[PATH_MAX];
 
    if (!file) return NULL;
-
-//   printf("open %s\n", file);
-#ifdef HAVE_REALPATH
-   /* in case this is a symlink... find out where it REALLY points */
-   if (!realpath(file, buf))
-     {
-       if (mode == EET_FILE_MODE_READ) return NULL;
-     }
-#else
-   strncpy(buf, file, sizeof(buf));
-   buf[sizeof(buf) - 1] = 0;
-#endif
-
    /* find the current file handle in cache*/
    ef = NULL;
    if (mode == EET_FILE_MODE_READ)
      {
-       ef = eet_cache_find(buf, eet_writers, eet_writers_num);
+       ef = eet_cache_find((char *)file, eet_writers, eet_writers_num);
        if (ef)
          {
             eet_flush(ef);
             ef->delete_me_now = 1;
          }
-       ef = eet_cache_find(buf, eet_readers, eet_readers_num);
+       ef = eet_cache_find((char *)file, eet_readers, eet_readers_num);
      }
    else if ((mode == EET_FILE_MODE_WRITE) || (mode == 
EET_FILE_MODE_READ_WRITE))
      {
-       ef = eet_cache_find(buf, eet_readers, eet_readers_num);
+       ef = eet_cache_find((char *)file, eet_readers, eet_readers_num);
        if (ef) ef->delete_me_now = 1;
-       ef = eet_cache_find(buf, eet_writers, eet_writers_num);
+       ef = eet_cache_find((char *)file, eet_writers, eet_writers_num);
      }
    /* we found one */
    if (ef)
@@ -460,12 +434,12 @@
      }
 
    /* allocate struct for eet file and have it zero'd out */
-   ef = calloc(1, sizeof(Eet_File));
+   ef = calloc(1, sizeof(Eet_File) + strlen(file) + 1);
    if (!ef) return NULL;
 
    /* fill some of the members */
-   ef->path = strdup(file);
-   ef->real_path = strdup(buf);
+   ef->path = ((char *)ef) + sizeof(Eet_File);
+   strcpy(ef->path, file);
    ef->magic = EET_MAGIC_FILE;
    ef->references = 1;
    ef->mode = mode;
@@ -476,7 +450,7 @@
    else if (ef->mode == EET_FILE_MODE_WRITE)
      {
        /* opening for write - delete old copy of file right away */
-       unlink(ef->real_path);
+       unlink(ef->path);
        ef->fp = fopen(ef->path, "wb");
      }
    else
@@ -542,7 +516,7 @@
             return NULL;
          }
        /* allocate dynamic buffer for entire directory block */
-       dyn_buf = malloc(byte_entries);
+       dyn_buf = alloca(byte_entries);
        if (!dyn_buf)
          {
             ef->delete_me_now = 1;
@@ -554,7 +528,6 @@
        if (!ef->header)
          {
             ef->delete_me_now = 1;
-            free(dyn_buf);
             eet_close(ef);
             return NULL;
          }
@@ -564,7 +537,6 @@
        if (!ef->header->directory)
          {
             ef->delete_me_now = 1;
-            free(dyn_buf);
             eet_close(ef);
             return NULL;
          }
@@ -575,7 +547,6 @@
        if (!ef->header->directory->nodes)
          {
             ef->delete_me_now = 1;
-            free(dyn_buf);
             eet_close(ef);
             return NULL;
          }
@@ -584,7 +555,6 @@
        if (count != 1)
          {
             ef->delete_me_now = 1;
-            free(dyn_buf);
             eet_close(ef);
             return NULL;
          }
@@ -598,7 +568,6 @@
             int size;
             int data_size;
             int name_size;
-            char *name;
             int hash;
             Eet_File_Node *efn;
             void *data = NULL;
@@ -608,7 +577,6 @@
             if (p >= (dyn_buf + byte_entries))
               {
                  ef->delete_me_now = 1;
-                 free(dyn_buf);
                  eet_close(ef);
                  return NULL;
               }
@@ -631,7 +599,6 @@
             /* invalid size */
             if (size <= 0)
               {
-                 free(dyn_buf);
                  eet_close(ef);
                  return NULL;
               }
@@ -639,7 +606,6 @@
             if (name_size <= 0)
               {
                  ef->delete_me_now = 1;
-                 free(dyn_buf);
                  eet_close(ef);
                  return NULL;
               }
@@ -647,35 +613,25 @@
             if ((p + 16 + name_size) > (dyn_buf + byte_entries))
               {
                  ef->delete_me_now = 1;
-                 free(dyn_buf);
                  eet_close(ef);
                  return NULL;
               }
-            /* allocate name string */
-            name = malloc(name_size + 1);
-            if (!name)
+            /* allocate all the ram needed for this stored node accounting */
+            efn = malloc(sizeof(Eet_File_Node) + name_size + 1);
+            if (!efn)
               {
                  ef->delete_me_now = 1;
-                 free(dyn_buf);
                  eet_close(ef);
                  return NULL;
               }
+            efn->name = ((char *)efn) + sizeof(Eet_File_Node);
             /* copy name in and terminate it */
-            strncpy(name, (char *)p + 20, name_size);
-            name[name_size] = 0;
+            strncpy(efn->name, (char *)p + 20, name_size);
+            efn->name[name_size] = 0;
             /* get hask bucket it should go in */
-            hash = eet_hash_gen(name, ef->header->directory->size);
-            efn = calloc(1, sizeof(Eet_File_Node));
-            if (!efn)
-              {
-                 ef->delete_me_now = 1;
-                 free(dyn_buf);
-                 eet_close(ef);
-                 return NULL;
-              }
+            hash = eet_hash_gen(efn->name, ef->header->directory->size);
             efn->next = ef->header->directory->nodes[hash];
             ef->header->directory->nodes[hash] = efn;
-            efn->name = name;
             efn->offset = offset;
             efn->compression = flags;
             efn->size = size;
@@ -707,19 +663,16 @@
                    }
                   efn->data = data;
               }
-
             /* advance */
             p += 20 + name_size;
          }
-       /* done - free dynamic buffer */
-       free(dyn_buf);
      }
 
    /* we need to delete the original file in read-write mode and re-open for 
writing */
    if (ef->mode == EET_FILE_MODE_READ_WRITE)
      {
        fclose(ef->fp);
-       unlink(ef->real_path);
+       unlink(ef->path);
        ef->fp = fopen(ef->path, "wb");
      }
 
@@ -769,8 +722,6 @@
 
    /* free up members */
    if (ef->fp) fclose(ef->fp);
-   if (ef->path) free(ef->path);
-   if (ef->real_path) free(ef->real_path);
 
    /* free up data */
    if (ef->header)
@@ -788,7 +739,6 @@
                       
                       while ((efn = ef->header->directory->nodes[i]))
                         {
-                           if (efn->name) free(efn->name);
                            if (efn->data) free(efn->data);
                            ef->header->directory->nodes[i] = efn->next;
                            free(efn);
@@ -872,11 +822,16 @@
             else
               {
                  void *tmp_data;
+                 int free_tmp = 0;
 
                  /* get size of data in file */
                  tmp_size = efn->size;
-                 tmp_data = malloc(tmp_size);
-                 if (!tmp_data) break;
+                 if (!efn->data)
+                   {
+                      tmp_data = malloc(tmp_size);
+                      if (!tmp_data) break;
+                      free_tmp = 1;
+                   }
                  /* get size uncompressed */
                  size = efn->data_size;
                  /* allocate data */
@@ -887,7 +842,7 @@
 
                       /* if we already have the data in ram... copy that */
                       if (efn->data)
-                        memcpy(tmp_data, efn->data, tmp_size);
+                        tmp_data = efn->data;
                       /* or get data from disk */
                       else
                         {
@@ -913,13 +868,13 @@
                       if (uncompress((Bytef *)data, &dlen,
                                      tmp_data, (uLongf)tmp_size))
                         {
-                           free(tmp_data);
+                           if (free_tmp) free(tmp_data);
                            free(data);
                            data = NULL;
                            break;
                         }
                    }
-                 free(tmp_data);
+                 if (free_tmp) free(tmp_data);
                  break;
               }
          }
@@ -1066,8 +1021,8 @@
    if ((!ef) || (ef->magic != EET_MAGIC_FILE) || (!name))
      return 0;
 
-   /* deleting keys is only possible in RW mode */
-   if (ef->mode != EET_FILE_MODE_READ_WRITE) return 0;
+   /* deleting keys is only possible in RW or WRITE mode */
+   if (ef->mode == EET_FILE_MODE_READ) return 0;
 
    if (!ef->header) return 0;
 
@@ -1080,7 +1035,6 @@
        /* if it matches */
        if (eet_string_match(efn->name, name))
          {
-            if (efn->name) free(efn->name);
             if (efn->data) free(efn->data);
             if (efn == ef->header->directory->nodes[hash])
               ef->header->directory->nodes[hash] = efn->next;
@@ -1134,7 +1088,7 @@
                  /* only realloc in 32 entry chunks */
                  if (list_count > list_count_alloc)
                    {
-                      list_count_alloc += 32;
+                      list_count_alloc += 64;
                       new_list = realloc(list_ret, list_count_alloc * 
(sizeof(char *)));
                       if (!new_list)
                         {




-------------------------------------------------------
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