commit d600a6b5b358c28d482b01f10bfa3292b17f5d12
parent 75ac0d217266dba48a887df96d37398140e22b9e
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Tue, 16 Sep 1997 16:25:38 -0300
a generic input stream interface
Diffstat:
A | lzio.c | | | 82 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | lzio.h | | | 49 | +++++++++++++++++++++++++++++++++++++++++++++++++ |
D | zio.c | | | 79 | ------------------------------------------------------------------------------- |
D | zio.h | | | 48 | ------------------------------------------------ |
4 files changed, 131 insertions(+), 127 deletions(-)
diff --git a/lzio.c b/lzio.c
@@ -0,0 +1,82 @@
+/*
+** $Id: zio.c,v 1.2 1997/06/20 19:25:54 roberto Exp $
+** a generic input stream interface
+** See Copyright Notice in lua.h
+*/
+
+
+
+#include <stdio.h>
+#include <string.h>
+
+#include "lzio.h"
+
+
+
+/* ----------------------------------------------------- memory buffers --- */
+
+static int zmfilbuf(ZIO* z)
+{
+ return EOZ;
+}
+
+ZIO* zmopen(ZIO* z, char* b, int size)
+{
+ if (b==NULL) return NULL;
+ z->n=size;
+ z->p= (unsigned char *)b;
+ z->filbuf=zmfilbuf;
+ z->u=NULL;
+ return z;
+}
+
+/* ------------------------------------------------------------ strings --- */
+
+ZIO* zsopen(ZIO* z, char* s)
+{
+ if (s==NULL) return NULL;
+ return zmopen(z,s,strlen(s));
+}
+
+/* -------------------------------------------------------------- FILEs --- */
+
+static int zffilbuf(ZIO* z)
+{
+ int n=fread(z->buffer,1,ZBSIZE,z->u);
+ if (n==0) return EOZ;
+ z->n=n-1;
+ z->p=z->buffer;
+ return *(z->p++);
+}
+
+
+ZIO* zFopen(ZIO* z, FILE* f)
+{
+ if (f==NULL) return NULL;
+ z->n=0;
+ z->p=z->buffer;
+ z->filbuf=zffilbuf;
+ z->u=f;
+ return z;
+}
+
+
+/* --------------------------------------------------------------- read --- */
+int zread(ZIO *z, void *b, int n)
+{
+ while (n) {
+ int m;
+ if (z->n == 0) {
+ if (z->filbuf(z) == EOZ)
+ return n; /* retorna quantos faltaram ler */
+ zungetc(z); /* poe o resultado de filbuf no buffer */
+ }
+ m = (n <= z->n) ? n : z->n; /* minimo de n e z->n */
+ memcpy(b, z->p, m);
+ z->n -= m;
+ z->p += m;
+ b = (char *)b + m;
+ n -= m;
+ }
+ return 0;
+}
diff --git a/lzio.h b/lzio.h
@@ -0,0 +1,49 @@
+/*
+** $Id: $
+** Buffered streams
+** See Copyright Notice in lua.h
+*/
+
+
+#ifndef lzio_h
+#define lzio_h
+
+#include <stdio.h>
+
+
+
+/* For Lua only */
+#define zFopen luaZ_Fopen
+#define zsopen luaZ_sopen
+#define zmopen luaZ_mopen
+#define zread luaZ_read
+
+#define EOZ (-1) /* end of stream */
+
+typedef struct zio ZIO;
+
+ZIO* zFopen(ZIO* z, FILE* f); /* open FILEs */
+ZIO* zsopen(ZIO* z, char* s); /* string */
+ZIO* zmopen(ZIO* z, char* b, int size); /* memory */
+
+int zread(ZIO* z, void* b, int n); /* read next n bytes */
+
+#define zgetc(z) (--(z)->n>=0 ? ((int)*(z)->p++): (z)->filbuf(z))
+#define zungetc(z) (++(z)->n,--(z)->p)
+
+
+
+/* --------- Private Part ------------------ */
+
+#define ZBSIZE 256 /* buffer size */
+
+struct zio {
+ int n; /* bytes still unread */
+ unsigned char* p; /* current position in buffer */
+ int (*filbuf)(ZIO* z);
+ void* u; /* additional data */
+ unsigned char buffer[ZBSIZE]; /* buffer */
+};
+
+
+#endif
diff --git a/zio.c b/zio.c
@@ -1,79 +0,0 @@
-/*
-* zio.c
-* a generic input stream interface
-* $Id: zio.c,v 1.1 1997/06/16 16:50:22 roberto Exp roberto $
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "zio.h"
-
-
-/* ----------------------------------------------------- memory buffers --- */
-
-static int zmfilbuf(ZIO* z)
-{
- return EOZ;
-}
-
-ZIO* zmopen(ZIO* z, char* b, int size)
-{
- if (b==NULL) return NULL;
- z->n=size;
- z->p= (unsigned char *)b;
- z->filbuf=zmfilbuf;
- z->u=NULL;
- return z;
-}
-
-/* ------------------------------------------------------------ strings --- */
-
-ZIO* zsopen(ZIO* z, char* s)
-{
- if (s==NULL) return NULL;
- return zmopen(z,s,strlen(s));
-}
-
-/* -------------------------------------------------------------- FILEs --- */
-
-static int zffilbuf(ZIO* z)
-{
- int n=fread(z->buffer,1,ZBSIZE,z->u);
- if (n==0) return EOZ;
- z->n=n-1;
- z->p=z->buffer;
- return *(z->p++);
-}
-
-
-ZIO* zFopen(ZIO* z, FILE* f)
-{
- if (f==NULL) return NULL;
- z->n=0;
- z->p=z->buffer;
- z->filbuf=zffilbuf;
- z->u=f;
- return z;
-}
-
-
-/* --------------------------------------------------------------- read --- */
-int zread(ZIO *z, void *b, int n)
-{
- while (n) {
- int m;
- if (z->n == 0) {
- if (z->filbuf(z) == EOZ)
- return n; /* retorna quantos faltaram ler */
- zungetc(z); /* poe o resultado de filbuf no buffer */
- }
- m = (n <= z->n) ? n : z->n; /* minimo de n e z->n */
- memcpy(b, z->p, m);
- z->n -= m;
- z->p += m;
- b = (char *)b + m;
- n -= m;
- }
- return 0;
-}
diff --git a/zio.h b/zio.h
@@ -1,48 +0,0 @@
-/*
-* zio.h
-* a generic input stream interface
-* $Id: zio.h,v 1.4 1997/06/19 18:55:28 roberto Exp roberto $
-*/
-
-#ifndef zio_h
-#define zio_h
-
-#include <stdio.h>
-
-
-
-/* For Lua only */
-#define zFopen luaZ_Fopen
-#define zsopen luaZ_sopen
-#define zmopen luaZ_mopen
-#define zread luaZ_read
-
-#define EOZ (-1) /* end of stream */
-
-typedef struct zio ZIO;
-
-ZIO* zFopen(ZIO* z, FILE* f); /* open FILEs */
-ZIO* zsopen(ZIO* z, char* s); /* string */
-ZIO* zmopen(ZIO* z, char* b, int size); /* memory */
-
-int zread(ZIO* z, void* b, int n); /* read next n bytes */
-
-#define zgetc(z) (--(z)->n>=0 ? ((int)*(z)->p++): (z)->filbuf(z))
-#define zungetc(z) (++(z)->n,--(z)->p)
-
-
-
-/* --------- Private Part ------------------ */
-
-#define ZBSIZE 256 /* buffer size */
-
-struct zio {
- int n; /* bytes still unread */
- unsigned char* p; /* current position in buffer */
- int (*filbuf)(ZIO* z);
- void* u; /* additional data */
- unsigned char buffer[ZBSIZE]; /* buffer */
-};
-
-
-#endif