History

win32: add puts/fputs wrappers

Kacper Michajłow committed 2 years ago

Commit fc55f351 parent 3372e176 files · +66 −15Browse files

Unified · Split

6 files
  1. osdep/io.c +27 −8
  2. osdep/io.h +4 −0
  3. osdep/terminal-dummy.c +6 −1
  4. osdep/terminal-win.c +25 −4
  5. osdep/terminal.h +2 −1
  6. test/test_utils.c +2 −1
osdep/io.c+27−8
@@ -298,6 +298,31 @@ int mp_fstat(int fd, struct mp_stat *buf) · 297 unmodified lines
298 return hstat(h, buf);298 return hstat(h, buf);
299}299}
300 300
301static inline HANDLE get_handle(FILE *stream)
302{
303 HANDLE wstream = INVALID_HANDLE_VALUE;
304
305 if (stream == stdout || stream == stderr) {
306 wstream = GetStdHandle(stream == stdout ?
307 STD_OUTPUT_HANDLE : STD_ERROR_HANDLE);
308 }
309 return wstream;
310}
311
312int mp_fputs(const char *str, FILE *stream)
313{
314 HANDLE wstream = get_handle(stream);
315 if (mp_check_console(wstream))
316 return mp_console_fputs(wstream, bstr0(str));
317
318 return fputs(str, stream);
319}
320
321int mp_puts(const char *str)
322{
323 return mp_fputs(str, stdout);
324}
325
301#if HAVE_UWP326#if HAVE_UWP
302static int mp_vfprintf(FILE *stream, const char *format, va_list args)327static int mp_vfprintf(FILE *stream, const char *format, va_list args)
303{328{
@@ -307,15 +332,9 @@ static int mp_vfprintf(FILE *stream, const char *format, va_list args) · 3 unmodified lines
307 332
308static int mp_vfprintf(FILE *stream, const char *format, va_list args)333static int mp_vfprintf(FILE *stream, const char *format, va_list args)
309{334{
310 HANDLE wstream = INVALID_HANDLE_VALUE;335 HANDLE wstream = get_handle(stream);
311
312 if (stream == stdout || stream == stderr) {
313 wstream = GetStdHandle(stream == stdout ?
314 STD_OUTPUT_HANDLE : STD_ERROR_HANDLE);
315 }
316
317 if (mp_check_console(wstream))336 if (mp_check_console(wstream))
318 return mp_write_console_ansi(wstream, format, args);337 return mp_console_vfprintf(wstream, format, args);
319 338
320 return vfprintf(stream, format, args);339 return vfprintf(stream, format, args);
321}340}
osdep/io.h+4−0
@@ -106,6 +106,8 @@ char *mp_to_utf8(void *talloc_ctx, const wchar_t *s); · 105 unmodified lines
106#include <sys/stat.h>106#include <sys/stat.h>
107#include <fcntl.h>107#include <fcntl.h>
108 108
109int mp_puts(const char *str);
110int mp_fputs(const char *str, FILE *stream);
109int mp_printf(const char *format, ...) PRINTF_ATTRIBUTE(1, 2);111int mp_printf(const char *format, ...) PRINTF_ATTRIBUTE(1, 2);
110int mp_fprintf(FILE *stream, const char *format, ...) PRINTF_ATTRIBUTE(2, 3);112int mp_fprintf(FILE *stream, const char *format, ...) PRINTF_ATTRIBUTE(2, 3);
111int mp_open(const char *filename, int oflag, ...);113int mp_open(const char *filename, int oflag, ...);
@@ -174,6 +176,8 @@ int mp_glob(const char *restrict pattern, int flags, · 62 unmodified lines
174 int (*errfunc)(const char*, int), mp_glob_t *restrict pglob);176 int (*errfunc)(const char*, int), mp_glob_t *restrict pglob);
175void mp_globfree(mp_glob_t *pglob);177void mp_globfree(mp_glob_t *pglob);
176 178
179#define puts(...) mp_puts(__VA_ARGS__)
180#define fputs(...) mp_fputs(__VA_ARGS__)
177#define printf(...) mp_printf(__VA_ARGS__)181#define printf(...) mp_printf(__VA_ARGS__)
178#define fprintf(...) mp_fprintf(__VA_ARGS__)182#define fprintf(...) mp_fprintf(__VA_ARGS__)
179#define open(...) mp_open(__VA_ARGS__)183#define open(...) mp_open(__VA_ARGS__)
osdep/terminal-dummy.c+6−1
@@ -27,7 +27,12 @@ void terminal_get_size2(int *rows, int *cols, int *px_width, int *px_height) · 26 unmodified lines
27{27{
28}28}
29 29
30int mp_write_console_ansi(void *wstream, const char *format, va_list args)30int mp_console_vfprintf(void *wstream, const char *format, va_list args)
31{
32 return 0;
33}
34
35int mp_console_fputs(void *wstream, bstr str)
31{36{
32 return 0;37 return 0;
33}38}
osdep/terminal-win.c+25−4
@@ -226,15 +226,36 @@ bool terminal_in_background(void) · 225 unmodified lines
226 return false;226 return false;
227}227}
228 228
229int mp_write_console_ansi(HANDLE wstream, const char *format, va_list args)229int mp_console_vfprintf(HANDLE wstream, const char *format, va_list args)
230{230{
231 struct tmp_buffers *buffers = FlsGetValue(tmp_buffers_key);231 struct tmp_buffers *buffers = FlsGetValue(tmp_buffers_key);
232 if (!buffers)232 bool free_buf = false;
233 if (!buffers) {
233 buffers = talloc_zero(NULL, struct tmp_buffers);234 buffers = talloc_zero(NULL, struct tmp_buffers);
235 free_buf = !FlsSetValue(tmp_buffers_key, buffers);
236 }
234 237
235 buffers->write_console_buf.len = 0;238 buffers->write_console_buf.len = 0;
236 bstr_xappend_vasprintf(buffers, &buffers->write_console_buf, format, args);239 bstr_xappend_vasprintf(buffers, &buffers->write_console_buf, format, args);
237 int wlen = bstr_to_wchar(buffers, buffers->write_console_buf, &buffers->write_console_wbuf);240
241 int ret = mp_console_fputs(wstream, buffers->write_console_buf);
242
243 if (free_buf)
244 talloc_free(buffers);
245
246 return ret;
247}
248
249int mp_console_fputs(HANDLE wstream, bstr str)
250{
251 struct tmp_buffers *buffers = FlsGetValue(tmp_buffers_key);
252 bool free_buf = false;
253 if (!buffers) {
254 buffers = talloc_zero(NULL, struct tmp_buffers);
255 free_buf = !FlsSetValue(tmp_buffers_key, buffers);
256 }
257
258 int wlen = bstr_to_wchar(buffers, str, &buffers->write_console_wbuf);
238 wchar_t *pos = buffers->write_console_wbuf;259 wchar_t *pos = buffers->write_console_wbuf;
239 260
240 while (*pos) {261 while (*pos) {
@@ -380,7 +401,7 @@ int mp_write_console_ansi(HANDLE wstream, const char *format, va_list args) · 139 unmodified lines
380 401
381 int ret = buffers->write_console_buf.len;402 int ret = buffers->write_console_buf.len;
382 403
383 if (!FlsSetValue(tmp_buffers_key, buffers))404 if (free_buf)
384 talloc_free(buffers);405 talloc_free(buffers);
385 406
386 return ret;407 return ret;
osdep/terminal.h+2−1
@@ -54,7 +54,8 @@ void terminal_get_size(int *w, int *h); · 53 unmodified lines
54void terminal_get_size2(int *rows, int *cols, int *px_width, int *px_height);54void terminal_get_size2(int *rows, int *cols, int *px_width, int *px_height);
55 55
56// Windows only.56// Windows only.
57int mp_write_console_ansi(void *wstream, const char *format, va_list args);57int mp_console_vfprintf(void *wstream, const char *format, va_list args);
58int mp_console_fputs(void *wstream, bstr str);
58bool mp_check_console(void *handle);59bool mp_check_console(void *handle);
59 60
60/* Windows-only function to attach to the parent process's console */61/* Windows-only function to attach to the parent process's console */
test/test_utils.c+2−1
@@ -107,7 +107,8 @@ void mp_msg(struct mp_log *log, int lev, const char *format, ...) {}; · 106 unmodified lines
107int mp_msg_find_level(const char *s) {return 0;};107int mp_msg_find_level(const char *s) {return 0;};
108int mp_msg_level(struct mp_log *log) {return 0;};108int mp_msg_level(struct mp_log *log) {return 0;};
109void mp_msg_set_max_level(struct mp_log *log, int lev) {};109void mp_msg_set_max_level(struct mp_log *log, int lev) {};
110int mp_write_console_ansi(void *wstream, const char *format, va_list args) {return 0;};110int mp_console_vfprintf(void *wstream, const char *format, va_list args) {return 0;};
111int mp_console_fputs(void *wstream, bstr str) {return 0;};
111bool mp_check_console(void *handle) { return false; };112bool mp_check_console(void *handle) { return false; };
112void mp_set_avdict(AVDictionary **dict, char **kv) {};113void mp_set_avdict(AVDictionary **dict, char **kv) {};
113struct mp_log *mp_log_new(void *talloc_ctx, struct mp_log *parent,114struct mp_log *mp_log_new(void *talloc_ctx, struct mp_log *parent,

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t