aboutsummaryrefslogtreecommitdiff
path: root/libbb/get_line_from_file.c
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2018-04-02 09:24:14 +0100
committerRon Yorston <rmy@pobox.com>2018-04-02 09:24:14 +0100
commit34a68d327b42c3c700e84cd475496985782290b1 (patch)
tree99bfe59cca420d26f01e81a7f41763f71b44d22c /libbb/get_line_from_file.c
parentaff3c5bd7b6bdcfb97f63153ab839c5f55f16a12 (diff)
parente84212f8346741a2d4a04b40639c44fe519cf5a7 (diff)
downloadbusybox-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.c15
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
13char* FAST_FUNC bb_get_chunk_from_file(FILE *file, int *end) 13char* 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 */
45char* FAST_FUNC xmalloc_fgets(FILE *file) 48char* 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 */
52char* FAST_FUNC xmalloc_fgetline(FILE *file) 53char* 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')