Initial commit.
[hondza-y36pr2.git] / getline / getline.c
blobdaec68fd8dfdb8fd62fa7d97608022079ad2852e
1 /* getdelim() and getline() from dietlibc. GPLv2 */
3 #ifdef NEED_GETLINE
5 #include <stdlib.h>
6 #include <stdio.h>
7 #include <errno.h>
8 #include <sys/types.h>
10 #include "getline.h"
12 ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream) {
13 size_t i;
14 int x, tmp;
15 char *new;
17 if (!lineptr || !n) {
18 errno=EINVAL;
19 return -1;
21 if (!*lineptr) *n=0;
22 for (i=0; ; ) {
23 x=fgetc(stream);
24 if (i>=*n) {
25 tmp=*n+100;
26 new=realloc(*lineptr,tmp);
27 if (!new) return -1;
28 *lineptr=new; *n=tmp;
30 if (x==EOF) { if (!i) return -1; (*lineptr)[i]=0; return i; }
31 (*lineptr)[i]=x;
32 ++i;
33 if (x==delim) break;
35 (*lineptr)[i]=0;
36 return i;
39 ssize_t getline(char **lineptr, size_t *n, FILE *stream) {
40 return getdelim(lineptr,n,'\n',stream);
43 #endif /* NEED_GETLINE */