/* Allocates buffer and reads data
size -1 to read complete file
First time called it reads only header.
Second time called it reads the rest of the file.
*/
size_t getFileData(char * filename,
unsigned char ** buffer,
uint32_t offset,
size_t size){
static FILE* fp;
bool finish;
// If already opened skip
if (!fp){
fp = fopen(filename, "r");
if( fp == NULL )
{
printf("Cannot open file %s",filename);
return -3;
}
finish=0;
}
else
if (offset == -2)
fclose(fp);
else
finish=1;
if ( offset==0){ // allocation for header
*buffer = malloc(size);
memset( *buffer, '\0', size);
}
else
if (size==-1)
{
size = get_fsize(fp, 0L);
*buffer = realloc(*buffer, size);
memset( *buffer, '\0', 1);
// memset( *buffer, '\0', size-offset);
// fseek ( fp , offset , SEEK_SET );
}
fread(*buffer, 1, size-offset, fp);
if (finish)
fclose(fp); // the file is auto-closed on second call
return size;
}
Užití...
unsigned char * buffer;
getFileData(filename, &buffer, 0, header_est_size); // read 56 bytes header
... // proccess header
getFileData(filename, &buffer, h.header_size, -1); // read rest of the file
Alokace poprvé se povedla, hlavičku jsem načetl a zpracoval. Pak spouštím podruhé a spadne to v druhé větvi if na memset( *buffer, '\0', 1);
Těsně před tím než to krachne (proměnné uvnitř funkce):
size: 2115025
offset: 56
*buffer: neiniciováno... 0xab <repeats 7x> 0x0 <repeats 8x>
Už mě nenapadá co by mohlo být špatně. Vše vypadá jako že se to nepovedlo reallocovat, ale proč?