forked from enlightenment/efl
parent
51a616eda7
commit
4c88b00112
|
@ -16,6 +16,7 @@ AC_HEADER_STDC
|
|||
AC_C_CONST
|
||||
AM_ENABLE_SHARED
|
||||
AM_PROG_LIBTOOL
|
||||
AC_FUNC_ALLOCA
|
||||
|
||||
AC_CHECK_HEADER(zlib.h,, AC_MSG_ERROR("Cannot find zlib.h. Make sure your CFLAGS environment variable contains include lines for the location of this file"))
|
||||
AC_CHECK_HEADER(jpeglib.h,, AC_MSG_ERROR("Cannot find jpeglib.h. Make sure your CFLAGS environment variable contains include lines for the location of this file"))
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -505,10 +505,11 @@ eet_data_chunk_new(void *data, int size, char *name)
|
|||
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 @@ eet_data_chunk_new(void *data, int size, char *name)
|
|||
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_new(char *name,
|
|||
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 @@ eet_data_descriptor_free(Eet_Data_Descriptor *edd)
|
|||
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 @@ _eet_freelist_add(void *data)
|
|||
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;
|
||||
|
|
|
@ -171,17 +171,10 @@ eet_data_image_jpeg_rgb_decode(void *data, int size, unsigned int *w, unsigned i
|
|||
_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 @@ eet_data_image_jpeg_rgb_decode(void *data, int size, unsigned int *w, unsigned i
|
|||
}
|
||||
}
|
||||
}
|
||||
free(tdata);
|
||||
/* end data decoding */
|
||||
jpeg_finish_decompress(&cinfo);
|
||||
jpeg_destroy_decompress(&cinfo);
|
||||
|
@ -305,40 +297,11 @@ eet_data_image_jpeg_alpha_decode(void *data, int size, unsigned int *d, unsigned
|
|||
_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 @@ eet_data_image_jpeg_alpha_decode(void *data, int size, unsigned int *d, unsigned
|
|||
}
|
||||
}
|
||||
}
|
||||
free(tdata);
|
||||
/* end data decoding */
|
||||
jpeg_finish_decompress(&cinfo);
|
||||
jpeg_destroy_decompress(&cinfo);
|
||||
|
@ -486,13 +448,7 @@ eet_data_image_jpeg_convert(int *size, void *data, unsigned int w, unsigned int
|
|||
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 @@ eet_data_image_jpeg_convert(int *size, void *data, unsigned int w, unsigned int
|
|||
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_data_image_jpeg_convert(int *size, void *data, unsigned int w, unsigned int
|
|||
|
||||
_eet_memfile_write_close(f);
|
||||
*size = sz;
|
||||
if (buf) free(buf);
|
||||
return d;
|
||||
}
|
||||
|
||||
|
@ -583,13 +537,7 @@ eet_data_image_jpeg_alpha_convert(int *size, void *data, unsigned int w, unsigne
|
|||
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 @@ eet_data_image_jpeg_alpha_convert(int *size, void *data, unsigned int w, unsigne
|
|||
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 @@ eet_data_image_jpeg_alpha_convert(int *size, void *data, unsigned int w, unsigne
|
|||
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 @@ eet_data_image_jpeg_alpha_convert(int *size, void *data, unsigned int w, unsigne
|
|||
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 @@ eet_data_image_jpeg_alpha_convert(int *size, void *data, unsigned int w, unsigne
|
|||
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 @@ eet_data_image_jpeg_alpha_convert(int *size, void *data, unsigned int w, unsigne
|
|||
jpeg_finish_compress(&cinfo);
|
||||
jpeg_destroy_compress(&cinfo);
|
||||
|
||||
if (buf) free(buf);
|
||||
_eet_memfile_write_close(f);
|
||||
d2 = d;
|
||||
sz2 = sz;
|
||||
|
|
|
@ -22,7 +22,6 @@ struct _Eet_File
|
|||
int references;
|
||||
|
||||
char *path;
|
||||
char *real_path;
|
||||
|
||||
FILE *fp;
|
||||
Eet_File_Mode mode;
|
||||
|
@ -75,7 +74,7 @@ struct
|
|||
#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 @@ static int eet_cacheburst_mode = 0;
|
|||
|
||||
/* 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 @@ eet_cache_find(char *real_path, Eet_File **cache, int cache_num)
|
|||
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 @@ eet_flush(Eet_File *ef)
|
|||
|
||||
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 @@ eet_flush(Eet_File *ef)
|
|||
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_cacheburst(int on)
|
|||
{
|
||||
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 @@ eet_cacheburst(int on)
|
|||
}
|
||||
}
|
||||
for (i = 0; i < num; i++) eet_close(closelist[i]);
|
||||
free(closelist);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -417,39 +405,25 @@ Eet_File *
|
|||
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 @@ eet_open(const char *file, Eet_File_Mode mode)
|
|||
}
|
||||
|
||||
/* 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 @@ eet_open(const char *file, Eet_File_Mode mode)
|
|||
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 @@ eet_open(const char *file, Eet_File_Mode mode)
|
|||
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 @@ eet_open(const char *file, Eet_File_Mode mode)
|
|||
if (!ef->header)
|
||||
{
|
||||
ef->delete_me_now = 1;
|
||||
free(dyn_buf);
|
||||
eet_close(ef);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -564,7 +537,6 @@ eet_open(const char *file, Eet_File_Mode mode)
|
|||
if (!ef->header->directory)
|
||||
{
|
||||
ef->delete_me_now = 1;
|
||||
free(dyn_buf);
|
||||
eet_close(ef);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -575,7 +547,6 @@ eet_open(const char *file, Eet_File_Mode mode)
|
|||
if (!ef->header->directory->nodes)
|
||||
{
|
||||
ef->delete_me_now = 1;
|
||||
free(dyn_buf);
|
||||
eet_close(ef);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -584,7 +555,6 @@ eet_open(const char *file, Eet_File_Mode mode)
|
|||
if (count != 1)
|
||||
{
|
||||
ef->delete_me_now = 1;
|
||||
free(dyn_buf);
|
||||
eet_close(ef);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -598,7 +568,6 @@ eet_open(const char *file, Eet_File_Mode mode)
|
|||
int size;
|
||||
int data_size;
|
||||
int name_size;
|
||||
char *name;
|
||||
int hash;
|
||||
Eet_File_Node *efn;
|
||||
void *data = NULL;
|
||||
|
@ -608,7 +577,6 @@ eet_open(const char *file, Eet_File_Mode mode)
|
|||
if (p >= (dyn_buf + byte_entries))
|
||||
{
|
||||
ef->delete_me_now = 1;
|
||||
free(dyn_buf);
|
||||
eet_close(ef);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -631,7 +599,6 @@ eet_open(const char *file, Eet_File_Mode mode)
|
|||
/* invalid size */
|
||||
if (size <= 0)
|
||||
{
|
||||
free(dyn_buf);
|
||||
eet_close(ef);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -639,7 +606,6 @@ eet_open(const char *file, Eet_File_Mode mode)
|
|||
if (name_size <= 0)
|
||||
{
|
||||
ef->delete_me_now = 1;
|
||||
free(dyn_buf);
|
||||
eet_close(ef);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -647,35 +613,25 @@ eet_open(const char *file, Eet_File_Mode mode)
|
|||
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)
|
||||
{
|
||||
ef->delete_me_now = 1;
|
||||
free(dyn_buf);
|
||||
eet_close(ef);
|
||||
return NULL;
|
||||
}
|
||||
/* copy name in and terminate it */
|
||||
strncpy(name, (char *)p + 20, name_size);
|
||||
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));
|
||||
/* 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(efn->name, (char *)p + 20, name_size);
|
||||
efn->name[name_size] = 0;
|
||||
/* get hask bucket it should go in */
|
||||
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 @@ eet_open(const char *file, Eet_File_Mode mode)
|
|||
}
|
||||
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 @@ eet_close(Eet_File *ef)
|
|||
|
||||
/* 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 @@ eet_close(Eet_File *ef)
|
|||
|
||||
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 @@ eet_read(Eet_File *ef, char *name, int *size_ret)
|
|||
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 @@ eet_read(Eet_File *ef, char *name, int *size_ret)
|
|||
|
||||
/* 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 @@ eet_read(Eet_File *ef, char *name, int *size_ret)
|
|||
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 @@ eet_delete(Eet_File *ef, char *name)
|
|||
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 @@ eet_delete(Eet_File *ef, char *name)
|
|||
/* 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 @@ eet_list(Eet_File *ef, char *glob, int *count_ret)
|
|||
/* 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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue