int fzp_printf(struct fzp *fzp, const char *format, ...) { static char buf[4096]; int ret=-1; va_list ap; va_start(ap, format); vsnprintf(buf, sizeof(buf), format, ap); if(fzp) switch(fzp->type) { case FZP_FILE: ret=fprintf(fzp->fp, "%s", buf); break; case FZP_COMPRESSED: ret=gzprintf(fzp->zp, "%s", buf); break; default: unknown_type(fzp->type, __func__); break; } else not_open(__func__); va_end(ap); return ret; }
static struct fzp *fzp_do_open(const char *path, const char *mode, enum fzp_type type) { struct fzp *fzp=NULL; if(!(fzp=fzp_alloc())) goto error; fzp->type=type; switch(type) { case FZP_FILE: if(!(fzp->fp=open_fp(path, mode))) goto error; return fzp; case FZP_COMPRESSED: if(!(fzp->zp=open_zp(path, mode))) goto error; return fzp; default: unknown_type(fzp->type, __func__); goto error; } error: fzp_close(&fzp); return NULL; }
void fzp_ERR_print_errors_fp(struct fzp *fzp) { if(fzp) switch(fzp->type) { case FZP_FILE: ERR_print_errors_fp(fzp->fp); break; case FZP_COMPRESSED: logp("ERR_print_errors_zp() does not exist in %s\n", __func__); break; default: unknown_type(fzp->type, __func__); break; } }
char *fzp_gets(struct fzp *fzp, char *s, int size) { if(fzp) switch(fzp->type) { case FZP_FILE: return fgets(s, size, fzp->fp); case FZP_COMPRESSED: return gzgets(fzp->zp, s, size); default: unknown_type(fzp->type, __func__); goto error; } not_open(__func__); error: return NULL; }
int fzp_truncate(const char *path, enum fzp_type type, off_t length, int compression) { switch(type) { case FZP_FILE: return truncate(path, length); case FZP_COMPRESSED: return gztruncate(path, length, compression); default: unknown_type(type, __func__); goto error; } error: return -1; }
int fzp_flush(struct fzp *fzp) { if(fzp) switch(fzp->type) { case FZP_FILE: return fflush(fzp->fp); case FZP_COMPRESSED: return gzflush(fzp->zp, Z_FINISH); default: unknown_type(fzp->type, __func__); goto error; } not_open(__func__); error: return EOF; }
off_t fzp_tell(struct fzp *fzp) { if(fzp) switch(fzp->type) { case FZP_FILE: return ftello(fzp->fp); case FZP_COMPRESSED: return gztell(fzp->zp); default: unknown_type(fzp->type, __func__); goto error; } not_open(__func__); error: return -1; }
size_t fzp_write(struct fzp *fzp, const void *ptr, size_t nmemb) { if(fzp) switch(fzp->type) { case FZP_FILE: return fwrite(ptr, 1, nmemb, fzp->fp); case FZP_COMPRESSED: return gzwrite(fzp->zp, ptr, (unsigned)nmemb); default: unknown_type(fzp->type, __func__); goto error; } not_open(__func__); error: return 0; }
extern int fzp_fileno(struct fzp *fzp) { if(fzp) switch(fzp->type) { case FZP_FILE: return fileno(fzp->fp); case FZP_COMPRESSED: logp("gzfileno() does not exist in %s\n", __func__); goto error; default: unknown_type(fzp->type, __func__); goto error; } not_open(__func__); error: return -1; }
int fzp_eof(struct fzp *fzp) { if(fzp) switch(fzp->type) { case FZP_FILE: return feof(fzp->fp); case FZP_COMPRESSED: return gzeof(fzp->zp); default: unknown_type(fzp->type, __func__); goto error; } not_open(__func__); error: // Non-zero means end of file. Should be OK to use -1 here. return -1; }
X509 *fzp_PEM_read_X509(struct fzp *fzp) { if(fzp) switch(fzp->type) { case FZP_FILE: return PEM_read_X509(fzp->fp, NULL, NULL, NULL); case FZP_COMPRESSED: logp("PEM_read_X509() does not exist in %s\n", __func__); goto error; default: unknown_type(fzp->type, __func__); goto error; } not_open(__func__); error: return NULL; }
void fzp_setlinebuf(struct fzp *fzp) { #ifndef HAVE_WIN32 if(fzp) switch(fzp->type) { case FZP_FILE: setlinebuf(fzp->fp); return; case FZP_COMPRESSED: logp("gzsetlinebuf() does not exist in %s\n", __func__); return; default: unknown_type(fzp->type, __func__); return; } not_open(__func__); #endif }
int fzp_seek(struct fzp *fzp, off_t offset, int whence) { if(fzp) switch(fzp->type) { case FZP_FILE: return fseeko(fzp->fp, offset, whence); case FZP_COMPRESSED: // Notice that gzseek returns the new offset. if(gzseek(fzp->zp, offset, whence)==offset) return 0; goto error; default: unknown_type(fzp->type, __func__); goto error; } not_open(__func__); error: return -1; }
int fzp_close(struct fzp **fzp) { int ret=-1; if(!fzp || !*fzp) return 0; switch((*fzp)->type) { case FZP_FILE: ret=close_fp(&((*fzp)->fp)); break; case FZP_COMPRESSED: ret=close_zp(&((*fzp)->zp)); break; default: unknown_type((*fzp)->type, __func__); break; } fzp_free(fzp); return ret; }
/* Return true if it's an unknown ODD message. cursor is a tal ptr. */ bool is_unknown_msg_discardable(const u8 *cursor) { enum wire_type t = fromwire_peektype(cursor); return unknown_type(t) && (t & 1); }