forked from enlightenment/efl
parent
6d73fde23a
commit
e2aff84f25
|
@ -783,7 +783,7 @@ void *
|
||||||
eet_read(Eet_File *ef, char *name, int *size_ret)
|
eet_read(Eet_File *ef, char *name, int *size_ret)
|
||||||
{
|
{
|
||||||
void *data = NULL;
|
void *data = NULL;
|
||||||
int size = 0, tmp_size;
|
int size = 0;
|
||||||
int hash;
|
int hash;
|
||||||
Eet_File_Node *efn;
|
Eet_File_Node *efn;
|
||||||
|
|
||||||
|
@ -844,66 +844,65 @@ eet_read(Eet_File *ef, char *name, int *size_ret)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
void *tmp_data;
|
void *tmp_data;
|
||||||
int free_tmp = 0;
|
int free_tmp = 0, compr_size = efn->size;
|
||||||
|
uLongf dlen;
|
||||||
|
|
||||||
/* get size of data in file */
|
|
||||||
tmp_size = efn->size;
|
|
||||||
if (!efn->data)
|
|
||||||
{
|
|
||||||
tmp_data = malloc(tmp_size);
|
|
||||||
if (!tmp_data) break;
|
|
||||||
free_tmp = 1;
|
|
||||||
}
|
|
||||||
/* get size uncompressed */
|
/* get size uncompressed */
|
||||||
size = efn->data_size;
|
size = efn->data_size;
|
||||||
/* allocate data */
|
/* allocate data */
|
||||||
data = malloc(size);
|
data = malloc(size);
|
||||||
if (data)
|
if (!data) break;
|
||||||
{
|
|
||||||
uLongf dlen;
|
|
||||||
|
|
||||||
/* if we already have the data in ram... copy that */
|
/* if we already have the data in ram... copy that */
|
||||||
if (efn->data)
|
if (efn->data)
|
||||||
tmp_data = efn->data;
|
tmp_data = efn->data;
|
||||||
/* or get data from disk */
|
else
|
||||||
else
|
{
|
||||||
|
tmp_data = malloc(compr_size);
|
||||||
|
if (!tmp_data)
|
||||||
{
|
{
|
||||||
/* seek to data location */
|
free(data);
|
||||||
if (fseek(ef->fp, efn->offset, SEEK_SET) < 0)
|
data = NULL;
|
||||||
{
|
break;
|
||||||
free(tmp_data);
|
|
||||||
free(data);
|
|
||||||
data = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
/* read it */
|
|
||||||
if (fread(tmp_data, tmp_size, 1, ef->fp) != 1)
|
|
||||||
{
|
|
||||||
free(tmp_data);
|
|
||||||
free(data);
|
|
||||||
data = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* decompress it */
|
|
||||||
dlen = size;
|
free_tmp = 1;
|
||||||
if (uncompress((Bytef *)data, &dlen,
|
|
||||||
tmp_data, (uLongf)tmp_size))
|
/* get data from disk */
|
||||||
|
/* seek to data location */
|
||||||
|
if (fseek(ef->fp, efn->offset, SEEK_SET) < 0)
|
||||||
{
|
{
|
||||||
if (free_tmp) free(tmp_data);
|
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);
|
free(data);
|
||||||
data = NULL;
|
data = NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* decompress it */
|
||||||
|
dlen = size;
|
||||||
|
if (uncompress((Bytef *)data, &dlen,
|
||||||
|
tmp_data, (uLongf)compr_size))
|
||||||
|
{
|
||||||
|
free(data);
|
||||||
|
data = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (free_tmp) free(tmp_data);
|
if (free_tmp) free(tmp_data);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* fill in return values */
|
/* fill in return values */
|
||||||
*size_ret = size;
|
if (size_ret) *size_ret = size;
|
||||||
/* update access time */
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue