summaryrefslogtreecommitdiffstats
path: root/osdep
diff options
context:
space:
mode:
authorKacper Michajłow <kasper93@gmail.com>2024-03-21 04:38:00 +0100
committerKacper Michajłow <kasper93@gmail.com>2024-04-07 20:23:04 +0200
commitc389f9e75ebbac346eb8bf7ea0f788bc86a90187 (patch)
treeba58a0059037c2f8a64501d40510cd9748035a69 /osdep
parent6177aa76161703bdd710240d0d4ca955a688e4ea (diff)
downloadmpv-c389f9e75ebbac346eb8bf7ea0f788bc86a90187.tar.bz2
mpv-c389f9e75ebbac346eb8bf7ea0f788bc86a90187.tar.xz
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
Diffstat (limited to 'osdep')
-rw-r--r--osdep/io.c26
-rw-r--r--osdep/io.h7
-rw-r--r--osdep/terminal-dummy.c2
-rw-r--r--osdep/terminal-win.c4
-rw-r--r--osdep/terminal.h2
5 files changed, 24 insertions, 17 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)
{
- HANDLE wstream = get_handle(stream);
- if (mp_check_console(wstream))
- return mp_console_fputs(wstream, bstr0(str));
+ if (!size || !count)
+ return 0;
- return fputs(str, stream);
-}
+ HANDLE wstream = get_handle(stream);
+ 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;
+ }
-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 <sys/stat.h>
#include <fcntl.h>
-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 */