From 258e1b92ebbfdebefabc120969ab87c3d8b75c3d Mon Sep 17 00:00:00 2001 From: Patrick Simianer Date: Sun, 15 Jun 2014 03:50:12 +0200 Subject: old c,cc examples --- c,cc/filelib.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 c,cc/filelib.c (limited to 'c,cc/filelib.c') diff --git a/c,cc/filelib.c b/c,cc/filelib.c new file mode 100644 index 0000000..57a27c3 --- /dev/null +++ b/c,cc/filelib.c @@ -0,0 +1,87 @@ +#include "filelib.h" + + +typedef struct +{ + hFile b_; + FILE* fp; +} hFile_; + +typedef struct +{ + hFile b_; + gzFile* fp; +} hgzFile; + +gzmode(const char* mode) +{ + // TODO + return true; +} + +hgzFile* +gzmakef(char* fname, const char* mode) +{ + hgzFile* hgz = malloc(sizeof(hgzFile)); + hgz->b_.name = fname; + hgz->b_.gz = true; + gzFile* fp = malloc(sizeof(gzFile)); + *fp = gzopen(fname, mode); + hgz->fp = fp; + return hgz; +} + +hFile* +makef(char* fname, const char* mode) +{ + if (endswith(fname, GZIP_EXT)) + return gzmakef(fname, mode); + hFile_* f = malloc(sizeof(hFile_)); + if (!f) return NULL; + f->b_.name = fname; + f->b_.gz = false; + if (!strcmp(fname, "-")) { + if (!strcmp(mode, "r") && !strcmp(mode, "r+")) f->fp = stdin; + else f->fp = stdout; + } else { + f->fp = fopen(fname, mode); + } + return f; +} + +bool +gzwriteln(const char* s, hFile* f) +{ + unsigned len = strlen(s); + gzwrite(*((hgzFile*)f)->fp, s, len); + gzwrite(*((hgzFile*)f)->fp, "\n", 1); + return gzflush(*((hgzFile*)f)->fp, Z_FINISH) == Z_OK; +} + +bool +writeln(const char* s, hFile* f) +{ + if (f->gz) + return gzwriteln(s, f); + return fputs(s, ((hFile_*)f)->fp)&&fputs("\n", ((hFile_*)f)->fp); +} + +bool +gzclosef(hFile* f) +{ + bool ret = gzclose(*((hgzFile*)f)->fp); + free(((hgzFile*)f)->fp); + free(f); + return ret; +} + +bool +closef(hFile* f) +{ + if (f->gz) + return gzclosef(f); + bool ret = fclose(((hFile_*)f)->fp); + free(f); + return ret; +} + -- cgit v1.2.3