aboutsummaryrefslogtreecommitdiff
path: root/libbb/get_line_from_file.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbb/get_line_from_file.c')
-rw-r--r--libbb/get_line_from_file.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/libbb/get_line_from_file.c b/libbb/get_line_from_file.c
index 903ff1fb6..2142ec94c 100644
--- a/libbb/get_line_from_file.c
+++ b/libbb/get_line_from_file.c
@@ -16,7 +16,11 @@ char* FAST_FUNC bb_get_chunk_from_file(FILE *file, size_t *end)
16 size_t idx = 0; 16 size_t idx = 0;
17 char *linebuf = NULL; 17 char *linebuf = NULL;
18 18
19#if ENABLE_PLATFORM_MINGW32
20 while ((ch = _getc_nolock(file)) != EOF) {
21#else
19 while ((ch = getc(file)) != EOF) { 22 while ((ch = getc(file)) != EOF) {
23#endif
20 /* grow the line buffer as necessary */ 24 /* grow the line buffer as necessary */
21 if (!(idx & 0xff)) { 25 if (!(idx & 0xff)) {
22 if (idx == ((size_t)-1) - 0xff) 26 if (idx == ((size_t)-1) - 0xff)
@@ -41,6 +45,11 @@ char* FAST_FUNC bb_get_chunk_from_file(FILE *file, size_t *end)
41 linebuf = xrealloc(linebuf, idx + 1); 45 linebuf = xrealloc(linebuf, idx + 1);
42 linebuf[idx] = '\0'; 46 linebuf[idx] = '\0';
43 } 47 }
48#if ENABLE_PLATFORM_MINGW32
49 if (idx && isatty(fileno(file)) &&
50 GetStdHandle(STD_INPUT_HANDLE) != INVALID_HANDLE_VALUE)
51 conToCharBuffA(linebuf, idx);
52#endif
44 return linebuf; 53 return linebuf;
45} 54}
46 55
@@ -57,8 +66,17 @@ char* FAST_FUNC xmalloc_fgetline(FILE *file)
57 size_t i; 66 size_t i;
58 char *c = bb_get_chunk_from_file(file, &i); 67 char *c = bb_get_chunk_from_file(file, &i);
59 68
69#if !ENABLE_PLATFORM_MINGW32
60 if (i && c[--i] == '\n') 70 if (i && c[--i] == '\n')
61 c[i] = '\0'; 71 c[i] = '\0';
72#else
73 if (i && c[--i] == '\n') {
74 c[i] = '\0';
75 if (i && c[--i] == '\r') {
76 c[i] = '\0';
77 }
78 }
79#endif
62 80
63 return c; 81 return c;
64} 82}