diff options
author | Ron Yorston <rmy@pobox.com> | 2023-07-06 10:56:39 +0100 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2023-07-06 11:00:15 +0100 |
commit | 1f1ab4d386c8c91adc2292faaee42fe4909f2822 (patch) | |
tree | 44859a1e90469debe48e900508543aa10c23d49b | |
parent | 532706d17698b48e68bdbf8905c7d700f181488f (diff) | |
download | busybox-w32-1f1ab4d386c8c91adc2292faaee42fe4909f2822.tar.gz busybox-w32-1f1ab4d386c8c91adc2292faaee42fe4909f2822.tar.bz2 busybox-w32-1f1ab4d386c8c91adc2292faaee42fe4909f2822.zip |
win32: character conversion for fread(3)
Some applets use fread(3): dd and od, for example. Perform the
necessary conversion when input is coming from the console.
Costs 96-112 bytes.
-rw-r--r-- | include/mingw.h | 2 | ||||
-rw-r--r-- | win32/winansi.c | 15 |
2 files changed, 17 insertions, 0 deletions
diff --git a/include/mingw.h b/include/mingw.h index 34c8bfa3f..a95bf2e91 100644 --- a/include/mingw.h +++ b/include/mingw.h | |||
@@ -170,6 +170,7 @@ int winansi_printf(const char *format, ...) __attribute__((format (printf, 1, 2) | |||
170 | int winansi_fprintf(FILE *stream, const char *format, ...) __attribute__((format (printf, 2, 3))); | 170 | int winansi_fprintf(FILE *stream, const char *format, ...) __attribute__((format (printf, 2, 3))); |
171 | int winansi_write(int fd, const void *buf, size_t count); | 171 | int winansi_write(int fd, const void *buf, size_t count); |
172 | int winansi_read(int fd, void *buf, size_t count); | 172 | int winansi_read(int fd, void *buf, size_t count); |
173 | size_t winansi_fread(void *ptr, size_t size, size_t nmemb, FILE *stream); | ||
173 | int winansi_getc(FILE *stream); | 174 | int winansi_getc(FILE *stream); |
174 | 175 | ||
175 | #define putchar winansi_putchar | 176 | #define putchar winansi_putchar |
@@ -186,6 +187,7 @@ int winansi_getc(FILE *stream); | |||
186 | #define fprintf(...) winansi_fprintf(__VA_ARGS__) | 187 | #define fprintf(...) winansi_fprintf(__VA_ARGS__) |
187 | #define write winansi_write | 188 | #define write winansi_write |
188 | #define read winansi_read | 189 | #define read winansi_read |
190 | #define fread winansi_fread | ||
189 | #define getc winansi_getc | 191 | #define getc winansi_getc |
190 | 192 | ||
191 | /* | 193 | /* |
diff --git a/win32/winansi.c b/win32/winansi.c index 5a6c33350..ad0d92698 100644 --- a/win32/winansi.c +++ b/win32/winansi.c | |||
@@ -24,6 +24,7 @@ static BOOL charToConA(LPSTR s); | |||
24 | #undef puts | 24 | #undef puts |
25 | #undef write | 25 | #undef write |
26 | #undef read | 26 | #undef read |
27 | #undef fread | ||
27 | #undef getc | 28 | #undef getc |
28 | 29 | ||
29 | #define FOREGROUND_ALL (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE) | 30 | #define FOREGROUND_ALL (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE) |
@@ -1136,6 +1137,20 @@ int winansi_read(int fd, void *buf, size_t count) | |||
1136 | return rv; | 1137 | return rv; |
1137 | } | 1138 | } |
1138 | 1139 | ||
1140 | size_t winansi_fread(void *ptr, size_t size, size_t nmemb, FILE *stream) | ||
1141 | { | ||
1142 | int rv; | ||
1143 | |||
1144 | rv = fread(ptr, size, nmemb, stream); | ||
1145 | if (!is_console_in(fileno(stream))) | ||
1146 | return rv; | ||
1147 | |||
1148 | if (rv > 0) | ||
1149 | conToCharBuffA(ptr, rv * size); | ||
1150 | |||
1151 | return rv; | ||
1152 | } | ||
1153 | |||
1139 | int winansi_getc(FILE *stream) | 1154 | int winansi_getc(FILE *stream) |
1140 | { | 1155 | { |
1141 | int rv; | 1156 | int rv; |