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_STRVERSCMP 1
|
||||
#define HAVE_VASPRINTF 1
|
||||
#define HAVE_GETLINE 1
|
||||
#define HAVE_XTABS 1
|
||||
#define HAVE_MNTENT_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;
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_GETLINE
|
||||
extern ssize_t getline(char **lineptr, size_t *n, FILE *stream) FAST_FUNC;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -145,3 +145,32 @@ char* FAST_FUNC stpcpy(char *p, const char *to_add)
|
||||
return p;
|
||||
}
|
||||
#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