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