diff options
Diffstat (limited to 'libbb/get_line_from_file.c')
-rw-r--r-- | libbb/get_line_from_file.c | 18 |
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 | } |