#include #include #include #include "stdioutil.h" typedef struct foapriv FOAPRIV; struct foapriv { char **sp; int *lp; char *b; int l; } ; static int foa_w(void *pv, const char *data, int len) { FOAPRIV *p; p = pv; if (len > 0) { if (p->sp) { p->b = realloc(p->b,p->l+len); bcopy(data,p->b+p->l,len); } p->l += len; } return(len); } static int foa_c(void *pv) { FOAPRIV *p; p = pv; if (p->sp) *p->sp = p->b; if (p->lp) *p->lp = p->l; free(p); return(0); } FILE *fopenalloc(char **sp, int *lp) { FOAPRIV *p; FILE *f; p = malloc(sizeof(FOAPRIV)); if (! p) return(0); f = funopen(p,0,&foa_w,0,&foa_c); if (! f) { free(p); return(0); } p->sp = sp; p->lp = lp; p->b = 0; p->l = 0; return(f); }