shared: Checks or explicitly ignores errors.

Signed-off-by: Mark Laing <mark.laing@canonical.com>
This commit is contained in:
Mark Laing 2022-05-17 10:09:23 +01:00
parent ca0da3f6ea
commit 7524bb279d
18 changed files with 114 additions and 87 deletions

View File

@ -13,7 +13,7 @@ func DetectCompression(fname string) ([]string, string, []string, error) {
if err != nil {
return nil, "", nil, err
}
defer f.Close()
defer func() { _ = f.Close() }()
return DetectCompressionFile(f)
}

View File

@ -259,15 +259,32 @@ func GenCert(certf string, keyf string, certtype bool, addHosts bool) error {
if err != nil {
return fmt.Errorf("Failed to open %s for writing: %w", certf, err)
}
certOut.Write(certBytes)
certOut.Close()
_, err = certOut.Write(certBytes)
if err != nil {
return fmt.Errorf("Failed to write cert file: %w", err)
}
err = certOut.Close()
if err != nil {
return fmt.Errorf("Failed to close cert file: %w", err)
}
keyOut, err := os.OpenFile(keyf, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {
return fmt.Errorf("Failed to open %s for writing: %w", keyf, err)
}
keyOut.Write(keyBytes)
keyOut.Close()
_, err = keyOut.Write(keyBytes)
if err != nil {
return fmt.Errorf("Failed to write key file: %w", err)
}
err = keyOut.Close()
if err != nil {
return fmt.Errorf("Failed to close key file: %w", err)
}
return nil
}

View File

@ -18,7 +18,7 @@ func TestKeyPairAndCA(t *testing.T) {
if err != nil {
t.Errorf("failed to create temporary dir: %v", err)
}
defer os.RemoveAll(dir)
defer func() { _ = os.RemoveAll(dir) }()
info, err := shared.KeyPairAndCA(dir, "test", shared.CertServer, true)
if err != nil {

View File

@ -706,7 +706,7 @@ func getFromShadow(fname string, username string) ([][]int64, error) {
if err != nil {
return nil, err
}
defer f.Close()
defer func() { _ = f.Close() }()
scanner := bufio.NewScanner(f)
for scanner.Scan() {
@ -756,7 +756,7 @@ func getFromProc(fname string) ([][]int64, error) {
if err != nil {
return nil, err
}
defer f.Close()
defer func() { _ = f.Close() }()
scanner := bufio.NewScanner(f)
for scanner.Scan() {

View File

@ -477,8 +477,8 @@ func SupportsVFS3Fscaps(prefix string) bool {
if err != nil {
return false
}
tmpfile.Close()
defer os.Remove(tmpfile.Name())
defer func() { _ = tmpfile.Close() }()
defer func() { _ = os.Remove(tmpfile.Name()) }()
err = os.Chmod(tmpfile.Name(), 0001)
if err != nil {

View File

@ -146,7 +146,7 @@ func (ctw *InstanceTarWriter) WriteFile(name string, srcPath string, fi os.FileI
if err != nil {
return fmt.Errorf("Failed to open file %q: %w", srcPath, err)
}
defer f.Close()
defer func() { _ = f.Close() }()
r := io.Reader(f)
if ignoreGrowth {

View File

@ -23,7 +23,7 @@ func WebsocketExecMirror(conn *websocket.Conn, w io.WriteCloser, r io.ReadCloser
for {
buf, ok := <-in
if !ok {
r.Close()
_ = r.Close()
logger.Debugf("Sending write barrier")
err := conn.WriteMessage(websocket.TextMessage, []byte{})
if err != nil {
@ -41,9 +41,9 @@ func WebsocketExecMirror(conn *websocket.Conn, w io.WriteCloser, r io.ReadCloser
}
closeMsg := websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")
conn.WriteMessage(websocket.CloseMessage, closeMsg)
_ = conn.WriteMessage(websocket.CloseMessage, closeMsg)
readDone <- true
r.Close()
_ = r.Close()
}(conn, r)
return readDone, writeDone

View File

@ -72,7 +72,7 @@ func NetnsGetifaddrs(initPID int32) (map[string]api.InstanceStateNetwork, error)
if err != nil {
return nil, err
}
defer f.Close()
defer func() { _ = f.Close() }()
netnsID = C.netns_get_nsid(C.__s32(f.Fd()))
if netnsID < 0 {

View File

@ -44,8 +44,8 @@ func RFC3493Dialer(network string, address string) (net.Conn, error) {
}
if tc, ok := c.(*net.TCPConn); ok {
tc.SetKeepAlive(true)
tc.SetKeepAlivePeriod(3 * time.Second)
_ = tc.SetKeepAlive(true)
_ = tc.SetKeepAlivePeriod(3 * time.Second)
}
return c, nil
@ -200,7 +200,7 @@ func WebsocketSendStream(conn *websocket.Conn, r io.Reader, bufferSize int) chan
break
}
}
conn.WriteMessage(websocket.TextMessage, []byte{})
_ = conn.WriteMessage(websocket.TextMessage, []byte{})
ch <- true
}(conn, r)
@ -269,7 +269,7 @@ func WebsocketProxy(source *websocket.Conn, target *websocket.Conn) chan struct{
}
_, err = io.Copy(w, r)
w.Close()
_ = w.Close()
if err != nil {
break
}
@ -293,8 +293,8 @@ func WebsocketProxy(source *websocket.Conn, target *websocket.Conn) chan struct{
case <-chRecv:
}
source.Close()
target.Close()
_ = source.Close()
_ = target.Close()
close(ch)
}()
@ -311,9 +311,9 @@ func defaultReader(conn *websocket.Conn, r io.ReadCloser, readDone chan<- bool)
for {
buf, ok := <-in
if !ok {
r.Close()
_ = r.Close()
logger.Debug("Sending write barrier")
conn.WriteMessage(websocket.TextMessage, []byte{})
_ = conn.WriteMessage(websocket.TextMessage, []byte{})
readDone <- true
return
}
@ -325,9 +325,9 @@ func defaultReader(conn *websocket.Conn, r io.ReadCloser, readDone chan<- bool)
}
}
closeMsg := websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")
conn.WriteMessage(websocket.CloseMessage, closeMsg)
_ = conn.WriteMessage(websocket.CloseMessage, closeMsg)
readDone <- true
r.Close()
_ = r.Close()
}
func DefaultWriter(conn *websocket.Conn, w io.WriteCloser, writeDone chan<- bool) {
@ -364,7 +364,7 @@ func DefaultWriter(conn *websocket.Conn, w io.WriteCloser, writeDone chan<- bool
}
}
writeDone <- true
w.Close()
_ = w.Close()
}
// WebsocketIO is a wrapper implementing ReadWriteCloser on top of websocket
@ -417,14 +417,13 @@ func (w *WebsocketIO) Write(p []byte) (n int, err error) {
if err != nil {
return -1, err
}
defer wr.Close()
n, err = wr.Write(p)
if err != nil {
return -1, err
}
return n, nil
return n, wr.Close()
}
// Close sends a control message indicating the stream is finished, but it does not actually close
@ -475,10 +474,10 @@ func WebsocketConsoleMirror(conn *websocket.Conn, w io.WriteCloser, r io.ReadClo
for {
buf, ok := <-in
if !ok {
r.Close()
_ = r.Close()
logger.Debugf("Sending write barrier")
conn.WriteMessage(websocket.BinaryMessage, []byte("\r"))
conn.WriteMessage(websocket.TextMessage, []byte{})
_ = conn.WriteMessage(websocket.BinaryMessage, []byte("\r"))
_ = conn.WriteMessage(websocket.TextMessage, []byte{})
readDone <- true
return
}
@ -491,9 +490,9 @@ func WebsocketConsoleMirror(conn *websocket.Conn, w io.WriteCloser, r io.ReadClo
}
closeMsg := websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")
conn.WriteMessage(websocket.CloseMessage, closeMsg)
_ = conn.WriteMessage(websocket.CloseMessage, closeMsg)
readDone <- true
r.Close()
_ = r.Close()
}(conn, r)
return readDone, writeDone
@ -514,6 +513,6 @@ func AllocatePort() (int, error) {
if err != nil {
return -1, err
}
defer l.Close()
return l.Addr().(*net.TCPAddr).Port, nil
return l.Addr().(*net.TCPAddr).Port, l.Close()
}

View File

@ -13,11 +13,11 @@ func WriteTempFile(s suite.Suite, dir string, prefix string, content string) (st
if err != nil {
s.T().Errorf("Failed to create temporary file: %v", err)
}
defer f.Close()
defer func() { _ = f.Close() }()
_, err = f.WriteString(content)
if err != nil {
s.T().Errorf("Failed to write string to temp file: %v", err)
}
return f.Name(), func() { os.Remove(f.Name()) }
return f.Name(), func() { _ = os.Remove(f.Name()) }
}

View File

@ -72,13 +72,13 @@ func (s *SimpleStreams) readCache(path string) ([]byte, bool) {
fi, err := os.Stat(cacheName)
if err != nil {
os.Remove(cacheName)
_ = os.Remove(cacheName)
return nil, false
}
body, err := ioutil.ReadFile(cacheName)
if err != nil {
os.Remove(cacheName)
_ = os.Remove(cacheName)
return nil, false
}
@ -121,7 +121,7 @@ func (s *SimpleStreams) cachedDownload(path string) ([]byte, error) {
return nil, err
}
defer r.Body.Close()
defer func() { _ = r.Body.Close() }()
if r.StatusCode != http.StatusOK {
// On local connectivity error, return from cache anyway
@ -140,8 +140,8 @@ func (s *SimpleStreams) cachedDownload(path string) ([]byte, error) {
// Attempt to store in cache
if s.cachePath != "" {
cacheName := filepath.Join(s.cachePath, fileName)
os.Remove(cacheName)
ioutil.WriteFile(cacheName, body, 0644)
_ = os.Remove(cacheName)
_ = ioutil.WriteFile(cacheName, body, 0644)
}
return body, nil

View File

@ -49,7 +49,7 @@ func TestSignalHandling(t *testing.T) {
if err != nil {
t.Error("Could not open file ", err)
}
defer file.Close()
defer func() { _ = file.Close() }()
var text = make([]byte, 1024)
for {
@ -159,7 +159,7 @@ func TestProcessStartWaitExit(t *testing.T) {
if err != nil {
t.Error("Could not open file: ", err)
}
defer file.Close()
defer func() { _ = file.Close() }()
exp = "hello again\nwaiting now\n"
// Read file, line by line

View File

@ -143,11 +143,11 @@ func (p *Process) start(fds []*os.File) error {
}
if p.Stdout != nil && p.closeFds {
defer p.Stdout.Close()
defer func() { _ = p.Stdout.Close() }()
}
if p.Stderr != nil && p.Stderr != p.Stdout && p.closeFds {
defer p.Stderr.Close()
defer func() { _ = p.Stderr.Close() }()
}
// Start the process.

View File

@ -37,7 +37,7 @@ func Load() {
}
return
}
defer usbids.Close()
defer func() { _ = usbids.Close() }()
ids, cls, err := ParseIDs(usbids)
if err != nil {

View File

@ -8,6 +8,7 @@ import (
"encoding/gob"
"encoding/hex"
"fmt"
"github.com/lxc/lxd/lxd/revert"
"hash"
"io"
"io/ioutil"
@ -76,7 +77,7 @@ func PathIsEmpty(path string) (bool, error) {
if err != nil {
return false, err
}
defer f.Close()
defer func() { _ = f.Close() }()
// read in ONLY one file
_, err = f.Readdir(1)
@ -404,7 +405,7 @@ func FileMove(oldPath string, newPath string) error {
return err
}
os.Remove(oldPath)
_ = os.Remove(oldPath)
return nil
}
@ -447,7 +448,7 @@ func FileCopy(source string, dest string) error {
if err != nil {
return err
}
defer s.Close()
defer func() { _ = s.Close() }()
d, err := os.Create(dest)
if err != nil {
@ -460,7 +461,6 @@ func FileCopy(source string, dest string) error {
return err
}
}
defer d.Close()
_, err = io.Copy(d, s)
if err != nil {
@ -469,10 +469,13 @@ func FileCopy(source string, dest string) error {
/* chown not supported on windows */
if runtime.GOOS != "windows" {
return d.Chown(uid, gid)
err = d.Chown(uid, gid)
if err != nil {
return err
}
}
return nil
return d.Close()
}
// DirCopy copies a directory recursively, overwriting the target if it exists.
@ -743,7 +746,7 @@ func RunningInUserNS() bool {
if err != nil {
return false
}
defer file.Close()
defer func() { _ = file.Close() }()
buf := bufio.NewReader(file)
l, _, err := buf.ReadLine()
@ -753,7 +756,7 @@ func RunningInUserNS() bool {
line := string(l)
var a, b, c int64
fmt.Sscanf(line, "%d %d %d", &a, &b, &c)
_, _ = fmt.Sscanf(line, "%d %d %d", &a, &b, &c)
if a == 0 && b == 0 && c == 4294967295 {
return false
}
@ -790,20 +793,34 @@ func TextEditor(inPath string, inContent []byte) ([]byte, error) {
if err != nil {
return []byte{}, err
}
reverter := revert.New()
defer reverter.Fail()
reverter.Add(func() { _ = f.Close() })
reverter.Add(func() { _ = os.Remove(f.Name()) })
err = os.Chmod(f.Name(), 0600)
if err != nil {
f.Close()
os.Remove(f.Name())
return []byte{}, err
}
f.Write(inContent)
f.Close()
_, err = f.Write(inContent)
if err != nil {
return []byte{}, err
}
err = f.Close()
if err != nil {
return []byte{}, err
}
path = fmt.Sprintf("%s.yaml", f.Name())
os.Rename(f.Name(), path)
defer os.Remove(path)
err = os.Rename(f.Name(), path)
if err != nil {
return []byte{}, err
}
reverter.Success()
reverter.Add(func() { _ = os.Remove(path) })
} else {
path = inPath
}
@ -1027,7 +1044,7 @@ func SetProgressMetadata(metadata map[string]any, stage, displayPrefix string, p
func DownloadFileHash(ctx context.Context, httpClient *http.Client, useragent string, progress func(progress ioprogress.ProgressData), canceler *cancel.HTTPRequestCanceller, filename string, url string, hash string, hashFunc hash.Hash, target io.WriteSeeker) (int64, error) {
// Always seek to the beginning
target.Seek(0, 0)
_, _ = target.Seek(0, 0)
var req *http.Request
var err error
@ -1051,7 +1068,7 @@ func DownloadFileHash(ctx context.Context, httpClient *http.Client, useragent st
if err != nil {
return -1, err
}
defer r.Body.Close()
defer func() { _ = r.Body.Close() }()
defer close(doneCh)
if r.StatusCode != http.StatusOK {
@ -1103,7 +1120,7 @@ func ParseNumberFromFile(file string) (int64, error) {
if err != nil {
return int64(0), err
}
defer f.Close()
defer func() { _ = f.Close() }()
buf := make([]byte, 4096)
n, err := f.Read(buf)

View File

@ -17,6 +17,7 @@ import (
"golang.org/x/sys/unix"
"github.com/lxc/lxd/lxd/revert"
"github.com/lxc/lxd/shared/logger"
"github.com/lxc/lxd/shared/units"
)
@ -294,7 +295,7 @@ func DeviceTotalMemory() (int64, error) {
if err != nil {
return -1, err
}
defer f.Close()
defer func() { _ = f.Close() }()
// Read it line by line
scan := bufio.NewScanner(f)
@ -324,7 +325,8 @@ func DeviceTotalMemory() (int64, error) {
// OpenPtyInDevpts creates a new PTS pair, configures them and returns them.
func OpenPtyInDevpts(devpts_fd int, uid, gid int64) (*os.File, *os.File, error) {
revert := true
reverter := revert.New()
defer reverter.Fail()
var fd int
var ptx *os.File
var err error
@ -339,11 +341,7 @@ func OpenPtyInDevpts(devpts_fd int, uid, gid int64) (*os.File, *os.File, error)
return nil, nil, err
}
ptx = os.NewFile(uintptr(fd), "/dev/pts/ptmx")
defer func() {
if revert {
ptx.Close()
}
}()
reverter.Add(func() { _ = ptx.Close() })
// Unlock the ptx and pty.
val := 0
@ -382,11 +380,7 @@ func OpenPtyInDevpts(devpts_fd int, uid, gid int64) (*os.File, *os.File, error)
return nil, nil, err
}
}
defer func() {
if revert {
pty.Close()
}
}()
reverter.Add(func() { _ = pty.Close() })
// Configure both sides
for _, entry := range []*os.File{ptx, pty} {
@ -433,7 +427,7 @@ func OpenPtyInDevpts(devpts_fd int, uid, gid int64) (*os.File, *os.File, error)
return nil, nil, err
}
revert = false
reverter.Success()
return ptx, pty, nil
}

View File

@ -22,15 +22,15 @@ func TestGetAllXattr(t *testing.T) {
t.Error(err)
return
}
defer os.Remove(xattrFile.Name())
xattrFile.Close()
defer func() { _ = os.Remove(xattrFile.Name()) }()
_ = xattrFile.Close()
xattrDir, err := ioutil.TempDir("", "")
if err != nil {
t.Error(err)
return
}
defer os.Remove(xattrDir)
defer func() { _ = os.Remove(xattrDir) }()
for k, v := range testxattr {
err = unix.Setxattr(xattrFile.Name(), k, []byte(v), 0)

View File

@ -47,22 +47,22 @@ func TestFileCopy(t *testing.T) {
t.Error(err)
return
}
defer os.Remove(source.Name())
defer func() { _ = os.Remove(source.Name()) }()
if err := WriteAll(source, helloWorld); err != nil {
source.Close()
_ = source.Close()
t.Error(err)
return
}
source.Close()
_ = source.Close()
dest, err := ioutil.TempFile("", "")
defer os.Remove(dest.Name())
defer func() { _ = os.Remove(dest.Name()) }()
if err != nil {
t.Error(err)
return
}
dest.Close()
_ = dest.Close()
if err := FileCopy(source.Name(), dest.Name()); err != nil {
t.Error(err)
@ -90,7 +90,7 @@ func TestFileCopy(t *testing.T) {
func TestDirCopy(t *testing.T) {
dir, err := ioutil.TempDir("", "lxd-shared-util-")
require.NoError(t, err)
defer os.RemoveAll(dir)
defer func() { _ = os.RemoveAll(dir) }()
source := filepath.Join(dir, "source")
dest := filepath.Join(dir, "dest")
@ -127,7 +127,7 @@ func TestDirCopy(t *testing.T) {
func TestReaderToChannel(t *testing.T) {
buf := make([]byte, 1*1024*1024)
rand.Read(buf)
_, _ = rand.Read(buf)
offset := 0
finished := false