master
go 30 lines 390 Bytes
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package safewriter
4
5 import (
6 "io"
7 "os"
8 "sync"
9 )
10
11 var Stdout = New(os.Stdout)
12
13 func New(w io.Writer) io.Writer {
14 return &writer{
15 mx: &sync.Mutex{},
16 w: w,
17 }
18 }
19
20 type writer struct {
21 mx *sync.Mutex
22 w io.Writer
23 }
24
25 func (w *writer) Write(p []byte) (n int, err error) {
26 w.mx.Lock()
27 n, err = w.w.Write(p)
28 w.mx.Unlock()
29 return n, err
30 }