diff options
author | Ron Yorston <rmy@pobox.com> | 2018-04-02 09:24:14 +0100 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2018-04-02 09:24:14 +0100 |
commit | 34a68d327b42c3c700e84cd475496985782290b1 (patch) | |
tree | 99bfe59cca420d26f01e81a7f41763f71b44d22c /libbb/get_line_from_file.c | |
parent | aff3c5bd7b6bdcfb97f63153ab839c5f55f16a12 (diff) | |
parent | e84212f8346741a2d4a04b40639c44fe519cf5a7 (diff) | |
download | busybox-w32-34a68d327b42c3c700e84cd475496985782290b1.tar.gz busybox-w32-34a68d327b42c3c700e84cd475496985782290b1.tar.bz2 busybox-w32-34a68d327b42c3c700e84cd475496985782290b1.zip |
Merge branch 'busybox' into merge
Diffstat (limited to 'libbb/get_line_from_file.c')
-rw-r--r-- | libbb/get_line_from_file.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/libbb/get_line_from_file.c b/libbb/get_line_from_file.c index 4e09ddc80..09ccfba67 100644 --- a/libbb/get_line_from_file.c +++ b/libbb/get_line_from_file.c | |||
@@ -10,16 +10,19 @@ | |||
10 | */ | 10 | */ |
11 | #include "libbb.h" | 11 | #include "libbb.h" |
12 | 12 | ||
13 | char* FAST_FUNC bb_get_chunk_from_file(FILE *file, int *end) | 13 | char* FAST_FUNC bb_get_chunk_from_file(FILE *file, size_t *end) |
14 | { | 14 | { |
15 | int ch; | 15 | int ch; |
16 | unsigned idx = 0; | 16 | size_t idx = 0; |
17 | char *linebuf = NULL; | 17 | char *linebuf = NULL; |
18 | 18 | ||
19 | while ((ch = getc(file)) != EOF) { | 19 | while ((ch = getc(file)) != EOF) { |
20 | /* grow the line buffer as necessary */ | 20 | /* grow the line buffer as necessary */ |
21 | if (!(idx & 0xff)) | 21 | if (!(idx & 0xff)) { |
22 | if (idx == ((size_t)-1) - 0xff) | ||
23 | bb_die_memory_exhausted(); | ||
22 | linebuf = xrealloc(linebuf, idx + 0x100); | 24 | linebuf = xrealloc(linebuf, idx + 0x100); |
25 | } | ||
23 | linebuf[idx++] = (char) ch; | 26 | linebuf[idx++] = (char) ch; |
24 | if (ch == '\0') | 27 | if (ch == '\0') |
25 | break; | 28 | break; |
@@ -44,14 +47,12 @@ char* FAST_FUNC bb_get_chunk_from_file(FILE *file, int *end) | |||
44 | /* Get line, including trailing \n if any */ | 47 | /* Get line, including trailing \n if any */ |
45 | char* FAST_FUNC xmalloc_fgets(FILE *file) | 48 | char* FAST_FUNC xmalloc_fgets(FILE *file) |
46 | { | 49 | { |
47 | int i; | 50 | return bb_get_chunk_from_file(file, NULL); |
48 | |||
49 | return bb_get_chunk_from_file(file, &i); | ||
50 | } | 51 | } |
51 | /* Get line. Remove trailing \n */ | 52 | /* Get line. Remove trailing \n */ |
52 | char* FAST_FUNC xmalloc_fgetline(FILE *file) | 53 | char* FAST_FUNC xmalloc_fgetline(FILE *file) |
53 | { | 54 | { |
54 | int i; | 55 | size_t i; |
55 | char *c = bb_get_chunk_from_file(file, &i); | 56 | char *c = bb_get_chunk_from_file(file, &i); |
56 | 57 | ||
57 | if (i && c[--i] == '\n') | 58 | if (i && c[--i] == '\n') |