diff options
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 | ||