aboutsummaryrefslogtreecommitdiff
path: root/src/base/gz
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/gz')
-rw-r--r--src/base/gz/flush.c7
-rw-r--r--src/base/gz/get.c17
-rw-r--r--src/base/gz/interface.c12
-rw-r--r--src/base/gz/internal.h6
-rw-r--r--src/base/gz/open.c13
-rw-r--r--src/base/gz/printf.c15
-rw-r--r--src/base/gz/put.c7
-rw-r--r--src/base/gz/putstring.c8
-rw-r--r--src/base/gz/read.c16
-rw-r--r--src/base/gz/rules.mk11
-rw-r--r--src/base/gz/seek.c7
-rw-r--r--src/base/gz/write.c7
12 files changed, 126 insertions, 0 deletions
diff --git a/src/base/gz/flush.c b/src/base/gz/flush.c
new file mode 100644
index 0000000..011a3ab
--- /dev/null
+++ b/src/base/gz/flush.c
@@ -0,0 +1,7 @@
+#include "internal.h"
+
+error
+gz·flush(gz·Stream *s)
+{
+ return gzflush(s, Z_FINISH);
+}
diff --git a/src/base/gz/get.c b/src/base/gz/get.c
new file mode 100644
index 0000000..24ba23a
--- /dev/null
+++ b/src/base/gz/get.c
@@ -0,0 +1,17 @@
+#include "internal.h"
+
+byte
+gz·getbyte(gz·Stream *s)
+{
+ // NOTE: Can't call macro
+ byte b[2];
+ gzread(s, b, 1);
+
+ return b[0];
+}
+
+error
+gz·ungetbyte(gz·Stream *s, byte c)
+{
+ return gzungetc(c, s);
+}
diff --git a/src/base/gz/interface.c b/src/base/gz/interface.c
new file mode 100644
index 0000000..15b8f10
--- /dev/null
+++ b/src/base/gz/interface.c
@@ -0,0 +1,12 @@
+#include "internal.h"
+
+io·Reader gz·Reader = (io·Reader){ gz·read };
+io·Peeker gz·Peeker = (io·Peeker){ gz·getbyte, gz·ungetbyte };
+io·Seeker gz·Seeker = (io·Seeker){ gz·seek, gz·tell };
+io·PeekReader gz·Peekreader = (io·PeekReader){ gz·read, gz·getbyte, gz·ungetbyte };
+
+io·Writer gz·Writer = (io·Writer){ gz·write };
+io·Putter gz·Putter = (io·Putter){ gz·putbyte, gz·putstring };
+io·PutWriter gz·PutWriter = (io·PutWriter){ gz·write, gz·putbyte, gz·putstring };
+
+io·ReadWriter gz·ReadWriter = (io·ReadWriter){ gz·read, gz·write };
diff --git a/src/base/gz/internal.h b/src/base/gz/internal.h
new file mode 100644
index 0000000..6a268c4
--- /dev/null
+++ b/src/base/gz/internal.h
@@ -0,0 +1,6 @@
+#pragma once
+
+#include <u.h>
+#include <base.h>
+
+#include <zlib.h>
diff --git a/src/base/gz/open.c b/src/base/gz/open.c
new file mode 100644
index 0000000..c84ce5e
--- /dev/null
+++ b/src/base/gz/open.c
@@ -0,0 +1,13 @@
+#include "internal.h"
+
+gz·Stream*
+gz·open(byte *path, byte *mode)
+{
+ return gzopen(path, mode);
+}
+
+error
+gz·close(gz·Stream* s)
+{
+ return gzclose(s);
+}
diff --git a/src/base/gz/printf.c b/src/base/gz/printf.c
new file mode 100644
index 0000000..d7f75cf
--- /dev/null
+++ b/src/base/gz/printf.c
@@ -0,0 +1,15 @@
+#include "internal.h"
+
+int
+gz·printf(gz·Stream *s, byte *fmt, ...)
+{
+ error err;
+
+ va_list args;
+ va_start(args, fmt);
+ err = gzprintf(s, fmt, args);
+ va_end(args);
+
+ return err;
+}
+
diff --git a/src/base/gz/put.c b/src/base/gz/put.c
new file mode 100644
index 0000000..fa9807d
--- /dev/null
+++ b/src/base/gz/put.c
@@ -0,0 +1,7 @@
+#include "internal.h"
+
+error
+gz·putbyte(gz·Stream *s, byte c)
+{
+ return gzputc(s, c);
+}
diff --git a/src/base/gz/putstring.c b/src/base/gz/putstring.c
new file mode 100644
index 0000000..64ff470
--- /dev/null
+++ b/src/base/gz/putstring.c
@@ -0,0 +1,8 @@
+#include "internal.h"
+
+error
+gz·putstring(gz·Stream *s, byte *str)
+{
+ return gzputs(s, str);
+}
+
diff --git a/src/base/gz/read.c b/src/base/gz/read.c
new file mode 100644
index 0000000..112fe4d
--- /dev/null
+++ b/src/base/gz/read.c
@@ -0,0 +1,16 @@
+#include "internal.h"
+
+int
+gz·read(gz·Stream *s, int sz, int n, void* buf)
+{
+ return gzread(s, buf, n*sz);
+}
+
+int
+gz·readln(gz·Stream *s, int n, byte *buf)
+{
+ byte* b;
+ b = gzgets(s, buf, n);
+
+ return strlen(b);
+}
diff --git a/src/base/gz/rules.mk b/src/base/gz/rules.mk
new file mode 100644
index 0000000..a933291
--- /dev/null
+++ b/src/base/gz/rules.mk
@@ -0,0 +1,11 @@
+SRCS_$(d)+=\
+ $(d)/gz/flush.c\
+ $(d)/gz/get.c\
+ $(d)/gz/interface.c\
+ $(d)/gz/open.c\
+ $(d)/gz/printf.c\
+ $(d)/gz/put.c\
+ $(d)/gz/putstring.c\
+ $(d)/gz/read.c\
+ $(d)/gz/seek.c\
+ $(d)/gz/write.c\
diff --git a/src/base/gz/seek.c b/src/base/gz/seek.c
new file mode 100644
index 0000000..328886d
--- /dev/null
+++ b/src/base/gz/seek.c
@@ -0,0 +1,7 @@
+#include "internal.h"
+
+int
+gz·seek(gz·Stream *s, long off, enum SeekPos whence)
+{
+ return gzseek(s, off, whence);
+}
diff --git a/src/base/gz/write.c b/src/base/gz/write.c
new file mode 100644
index 0000000..862d833
--- /dev/null
+++ b/src/base/gz/write.c
@@ -0,0 +1,7 @@
+#include "internal.h"
+
+int
+gz·write(gz·Stream *s, int sz, int n, void* buf)
+{
+ return gzwrite(s, buf, n*sz);
+}