platform.c: provide getline implementation
Signed-off-by: Timo Teras <timo.teras@iki.fi> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
b9ba580917
commit
0a5b310067
@ -350,6 +350,7 @@ typedef unsigned smalluint;
|
|||||||
#define HAVE_STRSIGNAL 1
|
#define HAVE_STRSIGNAL 1
|
||||||
#define HAVE_STRVERSCMP 1
|
#define HAVE_STRVERSCMP 1
|
||||||
#define HAVE_VASPRINTF 1
|
#define HAVE_VASPRINTF 1
|
||||||
|
#define HAVE_GETLINE 1
|
||||||
#define HAVE_XTABS 1
|
#define HAVE_XTABS 1
|
||||||
#define HAVE_MNTENT_H 1
|
#define HAVE_MNTENT_H 1
|
||||||
#define HAVE_NET_ETHERNET_H 1
|
#define HAVE_NET_ETHERNET_H 1
|
||||||
@ -470,4 +471,8 @@ extern char *strsep(char **stringp, const char *delim) FAST_FUNC;
|
|||||||
extern int vasprintf(char **string_ptr, const char *format, va_list p) FAST_FUNC;
|
extern int vasprintf(char **string_ptr, const char *format, va_list p) FAST_FUNC;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_GETLINE
|
||||||
|
extern ssize_t getline(char **lineptr, size_t *n, FILE *stream) FAST_FUNC;
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -145,3 +145,32 @@ char* FAST_FUNC stpcpy(char *p, const char *to_add)
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_GETLINE
|
||||||
|
ssize_t FAST_FUNC getline(char **lineptr, size_t *n, FILE *stream)
|
||||||
|
{
|
||||||
|
int ch;
|
||||||
|
char *line = *lineptr;
|
||||||
|
size_t alloced = *n;
|
||||||
|
size_t len = 0;
|
||||||
|
|
||||||
|
do {
|
||||||
|
ch = fgetc(stream);
|
||||||
|
if (ch == EOF)
|
||||||
|
break;
|
||||||
|
if (len + 1 >= alloced) {
|
||||||
|
alloced += alloced/4 + 64;
|
||||||
|
line = xrealloc(line, alloced);
|
||||||
|
}
|
||||||
|
line[len++] = ch;
|
||||||
|
} while (ch != '\n');
|
||||||
|
|
||||||
|
if (len == 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
line[len] = '\0';
|
||||||
|
*lineptr = line;
|
||||||
|
*n = alloced;
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user