summaryrefslogtreecommitdiffstats
path: root/substdi.c
diff options
context:
space:
mode:
Diffstat (limited to 'substdi.c')
-rw-r--r--substdi.c45
1 files changed, 14 insertions, 31 deletions
diff --git a/substdi.c b/substdi.c
index 42407a1..601d949 100644
--- a/substdi.c
+++ b/substdi.c
@@ -2,13 +2,9 @@
2#include "byte.h" 2#include "byte.h"
3#include "error.h" 3#include "error.h"
4 4
5static int oneread(op,fd,buf,len) 5static int oneread(ssize_t (*op)(int, void*, size_t), int fd, char *buf, int len)
6register int (*op)();
7register int fd;
8register char *buf;
9register int len;
10{ 6{
11 register int r; 7 int r;
12 8
13 for (;;) { 9 for (;;) {
14 r = op(fd,buf,len); 10 r = op(fd,buf,len);
@@ -17,13 +13,10 @@ register int len;
17 } 13 }
18} 14}
19 15
20static int getthis(s,buf,len) 16static int getthis(substdio *s, char *buf, int len)
21register substdio *s;
22register char *buf;
23register int len;
24{ 17{
25 register int r; 18 int r;
26 register int q; 19 int q;
27 20
28 r = s->p; 21 r = s->p;
29 q = r - len; 22 q = r - len;
@@ -33,11 +26,10 @@ register int len;
33 return r; 26 return r;
34} 27}
35 28
36int substdio_feed(s) 29int substdio_feed(substdio *s)
37register substdio *s;
38{ 30{
39 register int r; 31 int r;
40 register int q; 32 int q;
41 33
42 if (s->p) return s->p; 34 if (s->p) return s->p;
43 q = s->n; 35 q = s->n;
@@ -50,12 +42,9 @@ register substdio *s;
50 return r; 42 return r;
51} 43}
52 44
53int substdio_bget(s,buf,len) 45int substdio_bget(substdio *s, char *buf, int len)
54register substdio *s;
55register char *buf;
56register int len;
57{ 46{
58 register int r; 47 int r;
59 48
60 if (s->p > 0) return getthis(s,buf,len); 49 if (s->p > 0) return getthis(s,buf,len);
61 r = s->n; if (r <= len) return oneread(s->op,s->fd,buf,r); 50 r = s->n; if (r <= len) return oneread(s->op,s->fd,buf,r);
@@ -63,12 +52,9 @@ register int len;
63 return getthis(s,buf,len); 52 return getthis(s,buf,len);
64} 53}
65 54
66int substdio_get(s,buf,len) 55int substdio_get(substdio *s, char *buf, int len)
67register substdio *s;
68register char *buf;
69register int len;
70{ 56{
71 register int r; 57 int r;
72 58
73 if (s->p > 0) return getthis(s,buf,len); 59 if (s->p > 0) return getthis(s,buf,len);
74 if (s->n <= len) return oneread(s->op,s->fd,buf,len); 60 if (s->n <= len) return oneread(s->op,s->fd,buf,len);
@@ -76,15 +62,12 @@ register int len;
76 return getthis(s,buf,len); 62 return getthis(s,buf,len);
77} 63}
78 64
79char *substdio_peek(s) 65char *substdio_peek(substdio *s)
80register substdio *s;
81{ 66{
82 return s->x + s->n; 67 return s->x + s->n;
83} 68}
84 69
85void substdio_seek(s,len) 70void substdio_seek(substdio *s, int len)
86register substdio *s;
87register int len;
88{ 71{
89 s->n += len; 72 s->n += len;
90 s->p -= len; 73 s->p -= len;