diff options
author | Timo Teras <timo.teras@iki.fi> | 2011-06-29 02:19:58 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2011-06-29 02:19:58 +0200 |
commit | 0a5b310067abfde9bf74a42352fc421e1c27e2b9 (patch) | |
tree | ae491b7ba5150035850c7e535a16060ce63735d1 /libbb | |
parent | b9ba580917b59e4770ba99db7c61288f2476eb61 (diff) | |
download | busybox-w32-0a5b310067abfde9bf74a42352fc421e1c27e2b9.tar.gz busybox-w32-0a5b310067abfde9bf74a42352fc421e1c27e2b9.tar.bz2 busybox-w32-0a5b310067abfde9bf74a42352fc421e1c27e2b9.zip |
platform.c: provide getline implementation
Signed-off-by: Timo Teras <timo.teras@iki.fi>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/platform.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/libbb/platform.c b/libbb/platform.c index 04b8961de..2bf34f5bc 100644 --- a/libbb/platform.c +++ b/libbb/platform.c | |||
@@ -145,3 +145,32 @@ char* FAST_FUNC stpcpy(char *p, const char *to_add) | |||
145 | return p; | 145 | return p; |
146 | } | 146 | } |
147 | #endif | 147 | #endif |
148 | |||
149 | #ifndef HAVE_GETLINE | ||
150 | ssize_t FAST_FUNC getline(char **lineptr, size_t *n, FILE *stream) | ||
151 | { | ||
152 | int ch; | ||
153 | char *line = *lineptr; | ||
154 | size_t alloced = *n; | ||
155 | size_t len = 0; | ||
156 | |||
157 | do { | ||
158 | ch = fgetc(stream); | ||
159 | if (ch == EOF) | ||
160 | break; | ||
161 | if (len + 1 >= alloced) { | ||
162 | alloced += alloced/4 + 64; | ||
163 | line = xrealloc(line, alloced); | ||
164 | } | ||
165 | line[len++] = ch; | ||
166 | } while (ch != '\n'); | ||
167 | |||
168 | if (len == 0) | ||
169 | return -1; | ||
170 | |||
171 | line[len] = '\0'; | ||
172 | *lineptr = line; | ||
173 | *n = alloced; | ||
174 | return len; | ||
175 | } | ||
176 | #endif | ||