#include #include #include #include /* local.h from lib/libc/stdio/ */ #include "local.h" FILE * __allocfd(void) { FILE *f; struct __sFILEX *ext; f = malloc(sizeof(FILE)); if (!f) return NULL; ext = malloc(sizeof(struct __sFILEX)); if (!ext) { free(f); return NULL; } f._file = -1; f._flags = __SWR | __SSTR | __SALC; f._bf._base = f._p = (unsigned char *)malloc(128); if (f._bf._base == NULL) { free(ext); free(f); errno = ENOMEM; return (-1); } f._bf._size = f._w = 127; /* Leave room for the NUL */ f._extra = &ext; INITEXTRA(&f); return f; } char * __finishfd(FILE *f) { char *str; *f._p = '\0'; str = (char *)f._bf._base; free(f->_extra); free(f); return (ret); }