summaryrefslogtreecommitdiffhomepage
path: root/libbb
diff options
context:
space:
mode:
authorTimo Teras <timo.teras@iki.fi>2011-06-29 02:19:58 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2011-06-29 02:19:58 +0200
commit0a5b310067abfde9bf74a42352fc421e1c27e2b9 (patch)
treeae491b7ba5150035850c7e535a16060ce63735d1 /libbb
parentb9ba580917b59e4770ba99db7c61288f2476eb61 (diff)
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.c29
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)
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