From c389f9e75ebbac346eb8bf7ea0f788bc86a90187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= Date: Thu, 21 Mar 2024 04:38:00 +0100 Subject: [PATCH] win32: change fputs to fwrite wrapper Removes mp_puts/mp_fputs and adds mp_fwrite. In fact I wanted fwrite instead of puts, no need to make it more awkward with the implicit new lines. Fixes: fc55f355fc8225328cf0472e3deb4021eba96303 --- osdep/io.c | 26 +++++++++++++++++--------- osdep/io.h | 7 +++---- osdep/terminal-dummy.c | 2 +- osdep/terminal-win.c | 4 ++-- osdep/terminal.h | 2 +- test/test_utils.c | 2 +- 6 files changed, 25 insertions(+), 18 deletions(-) diff --git a/osdep/io.c b/osdep/io.c index dd21314d7c..21abe0e1d5 100644 --- a/osdep/io.c +++ b/osdep/io.c @@ -309,18 +309,26 @@ static inline HANDLE get_handle(FILE *stream) return wstream; } -int mp_fputs(const char *str, FILE *stream) +size_t mp_fwrite(const void *restrict buffer, size_t size, size_t count, + FILE *restrict stream) { + if (!size || !count) + return 0; + HANDLE wstream = get_handle(stream); - if (mp_check_console(wstream)) - return mp_console_fputs(wstream, bstr0(str)); + if (mp_check_console(wstream)) { + unsigned char *start = (unsigned char *)buffer; + size_t c = 0; + for (; c < count; ++c) { + if (mp_console_write(wstream, (bstr){start, size}) <= 0) + break; + start += size; + } + return c; + } - return fputs(str, stream); -} - -int mp_puts(const char *str) -{ - return mp_fputs(str, stdout); +#undef fwrite + return fwrite(buffer, size, count, stream); } #if HAVE_UWP diff --git a/osdep/io.h b/osdep/io.h index e9290b0359..3944eb92b5 100644 --- a/osdep/io.h +++ b/osdep/io.h @@ -106,8 +106,8 @@ char *mp_to_utf8(void *talloc_ctx, const wchar_t *s); #include #include -int mp_puts(const char *str); -int mp_fputs(const char *str, FILE *stream); +size_t mp_fwrite(const void *restrict buffer, size_t size, size_t count, + FILE *restrict stream); int mp_printf(const char *format, ...) PRINTF_ATTRIBUTE(1, 2); int mp_fprintf(FILE *stream, const char *format, ...) PRINTF_ATTRIBUTE(2, 3); int mp_open(const char *filename, int oflag, ...); @@ -176,8 +176,7 @@ int mp_glob(const char *restrict pattern, int flags, int (*errfunc)(const char*, int), mp_glob_t *restrict pglob); void mp_globfree(mp_glob_t *pglob); -#define puts(...) mp_puts(__VA_ARGS__) -#define fputs(...) mp_fputs(__VA_ARGS__) +#define fwrite(...) mp_fwrite(__VA_ARGS__) #define printf(...) mp_printf(__VA_ARGS__) #define fprintf(...) mp_fprintf(__VA_ARGS__) #define open(...) mp_open(__VA_ARGS__) diff --git a/osdep/terminal-dummy.c b/osdep/terminal-dummy.c index 8ab9d6f444..8ae6c64827 100644 --- a/osdep/terminal-dummy.c +++ b/osdep/terminal-dummy.c @@ -32,7 +32,7 @@ int mp_console_vfprintf(void *wstream, const char *format, va_list args) return 0; } -int mp_console_fputs(void *wstream, bstr str) +int mp_console_write(void *wstream, bstr str) { return 0; } diff --git a/osdep/terminal-win.c b/osdep/terminal-win.c index 238d4b95b7..dc75180d81 100644 --- a/osdep/terminal-win.c +++ b/osdep/terminal-win.c @@ -239,7 +239,7 @@ int mp_console_vfprintf(HANDLE wstream, const char *format, va_list args) buffers->write_console_buf.len = 0; bstr_xappend_vasprintf(buffers, &buffers->write_console_buf, format, args); - int ret = mp_console_fputs(wstream, buffers->write_console_buf); + int ret = mp_console_write(wstream, buffers->write_console_buf); if (free_buf) talloc_free(buffers); @@ -247,7 +247,7 @@ int mp_console_vfprintf(HANDLE wstream, const char *format, va_list args) return ret; } -int mp_console_fputs(HANDLE wstream, bstr str) +int mp_console_write(HANDLE wstream, bstr str) { struct tmp_buffers *buffers = FlsGetValue(tmp_buffers_key); bool free_buf = false; diff --git a/osdep/terminal.h b/osdep/terminal.h index fdbe02eadf..c83b0a26ca 100644 --- a/osdep/terminal.h +++ b/osdep/terminal.h @@ -57,7 +57,7 @@ void terminal_get_size2(int *rows, int *cols, int *px_width, int *px_height); // Windows only. int mp_console_vfprintf(void *wstream, const char *format, va_list args); -int mp_console_fputs(void *wstream, bstr str); +int mp_console_write(void *wstream, bstr str); bool mp_check_console(void *handle); /* Windows-only function to attach to the parent process's console */ diff --git a/test/test_utils.c b/test/test_utils.c index e26104797d..94fd2e6bb0 100644 --- a/test/test_utils.c +++ b/test/test_utils.c @@ -114,7 +114,7 @@ int mp_msg_find_level(const char *s) {return 0;}; int mp_msg_level(struct mp_log *log) {return 0;}; void mp_msg_set_max_level(struct mp_log *log, int lev) {}; int mp_console_vfprintf(void *wstream, const char *format, va_list args) {return 0;}; -int mp_console_fputs(void *wstream, bstr str) {return 0;}; +int mp_console_write(void *wstream, bstr str) {return 0;}; bool mp_check_console(void *handle) { return false; }; void mp_set_avdict(AVDictionary **dict, char **kv) {}; struct mp_log *mp_log_new(void *talloc_ctx, struct mp_log *parent,