|
- static inline size_t
- frem(FILE * fp)
- {
- fseek(fp, 0, SEEK_END);
- return ftell(fp);
- }
-
- static char *
- slurp(const char * fn, size_t * rlen)
- {
- size_t len;
- FILE * fp = fopen(fn, "r");
- char * buf;
- if (!fp)
- { PERROR_RETURN("fopen", NULL); }
- if (!(buf = (char *) malloc((len = frem(fp)))))
- { PERROR_RETURN("malloc", NULL); }
- rewind(fp);
- if (len != fread(buf, 1, len, fp))
- {
- free(buf);
- { PERROR_RETURN("fopen", NULL); }
- }
- *rlen = len;
- return buf;
- }
|