/*
* Helper function to read the content of a file into a buffer
* avoids incompatible systemcalls
*/
static void *read_file(FILE *fp, size_t *o_filelen)
{
size_t filelen = 0, len = 0;
char *content = NULL;
#define STARTER_READ_CHUNKSIZE 64000
while (!feof(fp))
{
if (!content)
{
len = 0;
filelen = STARTER_READ_CHUNKSIZE;
content = (char *) malloc(filelen + 1);
}
else
{
len = filelen;
filelen += STARTER_READ_CHUNKSIZE;
content = (char *) realloc(content, filelen + 1);
}
len = fread(&content[len], 1, STARTER_READ_CHUNKSIZE, fp);
}
filelen += len - STARTER_READ_CHUNKSIZE;
if (filelen)
{
content = (char *) realloc(content, filelen + 1);
}
else
{
free(content);
content = NULL;
}
if (content) content[filelen] = 0;
*o_filelen = filelen;
return (void *) content;
} /* read_file */
C/C++代码
最新推荐文章于 2020-11-28 16:07:31 发布