浏览代码

added sys_set_flags, disable windows utf8 terminal output by default (cause crashes with MT and libraries printing to stdout)

Nicolas Cannasse 5 年之前
父节点
当前提交
9d21b1344e
共有 2 个文件被更改,包括 15 次插入6 次删除
  1. 1 0
      src/std/error.c
  2. 14 6
      src/std/sys.c

+ 1 - 0
src/std/error.c

@@ -137,6 +137,7 @@ HL_PRIM void hl_dump_stack() {
 		}
 		uprintf(USTR("%s\n"),str);
 	}
+	fflush(stdout);
 }
 
 HL_PRIM varray *hl_exception_stack() {

+ 14 - 6
src/std/sys.c

@@ -138,19 +138,26 @@ HL_PRIM vbyte *hl_sys_locale() {
 #endif
 }
 
+#define PR_WIN_UTF8 1
+#define PR_AUTO_FLUSH 2
+static int print_flags = PR_AUTO_FLUSH;
+
+HL_PRIM int hl_sys_set_flags( int flags ) {
+	return print_flags = flags;
+}
+
 HL_PRIM void hl_sys_print( vbyte *msg ) {
 	hl_blocking(true);
 #	ifdef HL_XBO
 	OutputDebugStringW((LPCWSTR)msg);
-#	else
-
+#	else	
 #	ifdef HL_WIN_DESKTOP
-	_setmode(_fileno(stdout),_O_U8TEXT);
+	if( print_flags & PR_WIN_UTF8 ) _setmode(_fileno(stdout),_O_U8TEXT);
 #	endif
 	uprintf(USTR("%s"),(uchar*)msg);
-	fflush(stdout);
+	if( print_flags & PR_AUTO_FLUSH ) fflush(stdout);
 #	ifdef HL_WIN_DESKTOP
-	_setmode(_fileno(stdout),_O_TEXT);
+	if( print_flags & PR_WIN_UTF8 ) _setmode(_fileno(stdout),_O_TEXT);
 #	endif
 
 #	endif
@@ -691,4 +698,5 @@ DEFINE_PRIM(_I32, sys_get_char, _BOOL);
 DEFINE_PRIM(_ARR, sys_args, _NO_ARG);
 DEFINE_PRIM(_I32, sys_getpid, _NO_ARG);
 DEFINE_PRIM(_BOOL, sys_check_reload, _NO_ARG);
-DEFINE_PRIM(_VOID, sys_profile_event, _I32 _BYTES _I32);
+DEFINE_PRIM(_VOID, sys_profile_event, _I32 _BYTES _I32);
+DEFINE_PRIM(_I32, sys_set_flags, _I32);