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