VIRT_FILE *virt_fopen(char *fname, char *flags) { VIRT_FILE *f; f = malloc(sizeof(*f)); if (f==NULL) { errno=ENOMEM; return NULL; } if (buf==NULL) buf=malloc(BUFSIZE); if (buf==NULL) { free(f); errno=ENOMEM; return NULL; } f->curpos=f->offbody=msgsize=f->lines=f->waslf=0; #ifdef __MSDOS__ f->file = fopen(fname, flags); if (f->file==NULL) { free(f); return NULL; } strncpy(f->fname, fname, sizeof(f->fname)); #else f->buf=createbuf(BUFSIZE); if (f->buf==NULL) { free(f); errno=ENOMEM; return NULL; } f->bufsize=BUFSIZE; #endif return f; }
int aflinbuf(FILE *f, int mem) { off_t fsize; afgetfsize(f, &fsize); bufsize = ((size_t) mem) * 1048576; /* printf("aflinbuf: %i %lu %lu\n", mem, (unsigned long) fsize, (unsigned long) bufsize);*/ bufsize = fsize < bufsize ? fsize : bufsize; fbuf = f; if (createbuf() < 0) return -1; if (fillbuf() < 0) return -1; return 0; }