From 88fa9353769671f0f2a908b5c4ac895758cb8507 Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Fri, 22 May 2020 12:18:18 +0300 Subject: [PATCH] builtin: fix print mem leak on windows --- vlib/builtin/builtin.v | 24 ++++++++++++++++++++++++ vlib/builtin/builtin_nix.c.v | 13 ------------- vlib/builtin/builtin_windows.c.v | 4 ---- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/vlib/builtin/builtin.v b/vlib/builtin/builtin.v index 032e22e1b3..9881200c05 100644 --- a/vlib/builtin/builtin.v +++ b/vlib/builtin/builtin.v @@ -91,6 +91,9 @@ pub fn print(s string) { wide_str := s.to_wide() wide_len := C.wcslen(wide_str) C.WriteConsole(output_handle, wide_str, wide_len, &bytes_written, 0) + unsafe { + free(wide_str) + } } else { C.WriteFile(output_handle, s.str, s.len, &bytes_written, 0) } @@ -99,6 +102,27 @@ pub fn print(s string) { } } +const ( + new_line_character = '\n' +) +pub fn println(s string) { + $if windows { + print(s) + print(new_line_character) + } $else { + // TODO: a syscall sys_write on linux works, except for the v repl. + // Probably it is a stdio buffering issue. Needs more testing... + // $if linux { + // $if !android { + // snl := s + '\n' + // C.syscall(/* sys_write */ 1, /* stdout_value */ 1, snl.str, s.len+1) + // return + // } + // } + C.printf('%.*s\n', s.len, s.str) + } +} + __global total_m i64=0 __global nr_mallocs int=0 diff --git a/vlib/builtin/builtin_nix.c.v b/vlib/builtin/builtin_nix.c.v index 7bfa5ddb35..844db44b3f 100644 --- a/vlib/builtin/builtin_nix.c.v +++ b/vlib/builtin/builtin_nix.c.v @@ -24,19 +24,6 @@ fn builtin_init() { // Do nothing } -pub fn println(s string) { - // TODO: a syscall sys_write on linux works, except for the v repl. - // Probably it is a stdio buffering issue. Needs more testing... - // $if linux { - // $if !android { - // snl := s + '\n' - // C.syscall(/* sys_write */ 1, /* stdout_value */ 1, snl.str, s.len+1) - // return - // } - // } - C.printf('%.*s\n', s.len, s.str) -} - fn print_backtrace_skipping_top_frames(xskipframes int) bool { skipframes := xskipframes + 2 $if macos { diff --git a/vlib/builtin/builtin_windows.c.v b/vlib/builtin/builtin_windows.c.v index afe2074218..94febc576b 100644 --- a/vlib/builtin/builtin_windows.c.v +++ b/vlib/builtin/builtin_windows.c.v @@ -139,7 +139,3 @@ fn print_backtrace_skipping_top_frames_mingw(skipframes int) bool { eprintln('print_backtrace_skipping_top_frames_mingw is not implemented') return false } - -pub fn println(s string) { - print('$s\n') -}