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