-
Notifications
You must be signed in to change notification settings - Fork 30
/
Copy pathgetln2.c
38 lines (35 loc) · 790 Bytes
/
getln2.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "byte.h"
#include "getln.h"
int
getln2 (buffer *ss, stralloc *sa, char **cont, unsigned int *clen, int sep)
{
int n = 0;
register char *x = 0;
register unsigned int i = 0;
if (!stralloc_ready (sa, 0))
return -1;
sa->len = 0;
for (;;)
{
n = buffer_feed (ss);
if (0 > n)
return -1;
if (n == 0)
{
*clen = 0;
return 0;
}
x = buffer_PEEK (ss);
i = byte_chr (x, n, sep);
if (i < (unsigned)n)
{
buffer_SEEK (ss, *clen = i + 1);
*cont = x;
return 0;
}
if (!stralloc_readyplus (sa, n))
return -1;
i = sa->len;
sa->len = i + buffer_get (ss, sa->s + i, n);
}
}