Received: from Muras-MacBook-Air.local (36-225-30-177.dynamic-ip.hinet.net [36.225.30.177]) by mail.sr.ht (Postfix) with ESMTP id 29ED1401AA for <~eliasnaur/gio-patches@lists.sr.ht>; Fri, 10 Jan 2020 14:44:37 +0000 (UTC) Received: by Muras-MacBook-Air.local (Postfix, from userid 501) id C70F52012A09A7; Fri, 10 Jan 2020 22:46:38 +0800 (CST) From: mural To: ~eliasnaur/gio-patches@lists.sr.ht Cc: mural Subject: [gio] app/internal/log: add logger for Windows DebugView Date: Fri, 10 Jan 2020 22:45:48 +0800 Message-Id: <20200110144548.34087-1-mural@ctli.io> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Signed-off-by: mural --- app/internal/log/log_windows.go | 41 +++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 app/internal/log/log_windows.go diff --git a/app/internal/log/log_windows.go b/app/internal/log/log_windo= ws.go new file mode 100644 index 0000000..2019bcd --- /dev/null +++ b/app/internal/log/log_windows.go @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: Unlicense OR MIT + +package log + +import ( + "io" + "log" + "os" + "syscall" + "unsafe" +) + +type logger struct{} + +var ( + kernel32 =3D syscall.NewLazyDLL("kernel32") + outputDebugStringW =3D kernel32.NewProc("OutputDebugStringW") + debugView *logger +) + +func init() { + // Windows DebugView already includes timestamps. + log.SetFlags(log.Flags() &^ log.LstdFlags) + + var out io.Writer + if syscall.Stderr !=3D syscall.InvalidHandle { + out =3D os.Stderr + } else { + out =3D debugView + } + log.SetOutput(out) +} + +func (l *logger) Write(buf []byte) (int, error) { + p, err :=3D syscall.UTF16PtrFromString(string(buf)) + if err !=3D nil { + return 0, err + } + outputDebugStringW.Call(uintptr(unsafe.Pointer(p))) + return len(buf), nil +} --=20 2.19.1