23 static int readCRLFLine(FILE *stream,
char **line,
size_t *size,
size_t linelimit,
int *endofstream,
int *truncated);
24 static void fillBuffer(
CRLFStringBuf *crlfsbuf,
int startPos,
int endPos);
27 crlfsbuf_new(
int bufferSize, FILE *stream,
size_t linelimit,
size_t buflimit)
36 crlfsbuf->
numb = bufferSize;
43 for (i = 0; i < crlfsbuf->
numb; i++)
44 (crlfsbuf->
buf)[i] = NULL;
50 for (i = 0; i < crlfsbuf->
numb; i++)
51 (crlfsbuf->
size)[i] = 0;
57 for (i = 0; i < crlfsbuf->
numb; i++)
82 fillBuffer(crlfsbuf, 0, crlfsbuf->
numb);
107 fillBuffer(sb, sb->
index + 1, sb->
numb - 1);
112 return (sb->
buf)[cur];
139 fillBuffer(sb, sb->
index + 1, sb->
numb - 1);
142 *buffer = (sb->
buf)[cur];
143 *size = (sb->
size)[cur];
144 *length = (sb->
length)[cur];
185 for (i = 0; i < sb->
numb; i++) {
186 if ((sb->
buf)[i] != NULL)
187 fwrite((sb->
buf)[i],
sizeof(
char), (sb->
length)[i], stream);
198 for (i = 0; i < sb->
numb; i++) {
222 fillBuffer(
CRLFStringBuf *crlfsbuf,
int startPos,
int endPos)
224 int i, blimit, limit, truncated;
231 i = startPos % crlfsbuf->
numb;
237 crlfsbuf->
length[i] = readCRLFLine(crlfsbuf->
stream, &(crlfsbuf->
buf[i]), &(crlfsbuf->
size[i]),
259 readCRLFLine(FILE *stream,
char **line,
size_t *size,
size_t linelimit,
int *endofstream,
int *truncated)
265 if (feof(stream) || *endofstream)
269 if ((*line) == NULL && (*size) == 0) {
271 (*line) =
XMALLOC(
char, *size);
274 memset(*line, 0, *size);
284 if (llen + 1 <= (*size) - 1) {
290 *line =
XREALLOC(
char, *line, *size);
296 if (linelimit > 0 && llen >= linelimit) {
297 fprintf(stderr,
"readCRLFLine: LineLimit: %d, Line Length: %d\n", linelimit, llen);
302 }
while ((*line)[llen - 1] !=
'\n');
305 (*line)[llen] =
'\0';