#include #include #include #include "fileutil.h" FILE *fopen(char const * restrict filename, char const * restrict mode) { FILE *fp = calloc(1, sizeof *fp); if(!fp) goto err; int flags = __fp_parse_mode(mode, fp); if(flags < 0) goto err; int fd = open(filename, flags, 0755); if(fd < 0) goto err; __fp_open(fp, fd, true); return fp; err: if(fp && fp->bufowned) free(fp->buf); free(fp); return NULL; }