Skip to content

Commit

Permalink
check errors when closing files
Browse files Browse the repository at this point in the history
  • Loading branch information
dundee committed Aug 19, 2021
1 parent 48b4be2 commit 0d57d2b
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 20 deletions.
44 changes: 28 additions & 16 deletions cmd/gdu/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,36 +63,47 @@ type App struct {
}

// Run starts gdu main logic
func (a *App) Run() error {
func (a *App) Run() (err error) {
var (
f *os.File
ui UI
)

if a.Flags.ShowVersion {
fmt.Fprintln(a.Writer, "Version:\t", build.Version)
fmt.Fprintln(a.Writer, "Built time:\t", build.Time)
fmt.Fprintln(a.Writer, "Built user:\t", build.User)
return nil
return
}

f, err := os.OpenFile(a.Flags.LogFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
f, err = os.OpenFile(a.Flags.LogFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {
return fmt.Errorf("opening log file: %w", err)
err = fmt.Errorf("opening log file: %w", err)
return
}
defer f.Close()
defer func() {
cerr := f.Close()
if err == nil {
err = cerr
}
}()
log.SetOutput(f)

path := a.getPath()
ui, err := a.createUI()
ui, err = a.createUI()
if err != nil {
return err
return
}

if err := a.setNoCross(path); err != nil {
return err
if err = a.setNoCross(path); err != nil {
return
}

ui.SetIgnoreDirPaths(a.Flags.IgnoreDirs)

if len(a.Flags.IgnoreDirPatterns) > 0 {
if err := ui.SetIgnoreDirPatterns(a.Flags.IgnoreDirPatterns); err != nil {
return err
if err = ui.SetIgnoreDirPatterns(a.Flags.IgnoreDirPatterns); err != nil {
return
}
}

Expand All @@ -102,11 +113,12 @@ func (a *App) Run() error {

a.setMaxProcs()

if err := a.runAction(ui, path); err != nil {
return err
if err = a.runAction(ui, path); err != nil {
return
}

return ui.StartUILoop()
err = ui.StartUILoop()
return
}

func (a *App) getPath() string {
Expand Down Expand Up @@ -136,7 +148,7 @@ func (a *App) createUI() (UI, error) {
if a.Flags.OutputFile == "-" {
output = os.Stdout
} else {
output, err = os.OpenFile(a.Flags.OutputFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
output, err = os.OpenFile(a.Flags.OutputFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {
return nil, fmt.Errorf("opening output file: %w", err)
}
Expand Down Expand Up @@ -197,7 +209,7 @@ func (a *App) runAction(ui UI, path string) error {
if a.Flags.InputFile == "-" {
input = os.Stdin
} else {
input, err = os.OpenFile(a.Flags.InputFile, os.O_RDONLY, 0644)
input, err = os.OpenFile(a.Flags.InputFile, os.O_RDONLY, 0600)
if err != nil {
return fmt.Errorf("opening input file: %w", err)
}
Expand Down
14 changes: 12 additions & 2 deletions pkg/device/dev_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package device

import (
"bufio"
"fmt"
"io"
"os"
"strings"
Expand All @@ -22,9 +23,18 @@ func (t LinuxDevicesInfoGetter) GetMounts() (Devices, error) {
if err != nil {
return nil, err
}
defer file.Close()

return readMountsFile(file)
devices, err := readMountsFile(file)
if err != nil {
if cerr := file.Close(); cerr != nil {
return nil, fmt.Errorf("%w; %s", err, cerr)
}
return nil, err
}
if err := file.Close(); err != nil {
return nil, err
}
return devices, nil
}

// GetDevicesInfo returns result of GetMounts with usage info about mounted devices (by calling Statfs syscall)
Expand Down
5 changes: 4 additions & 1 deletion report/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,10 @@ func (ui *UI) AnalyzePath(path string, _ *analyze.Dir) error {

switch f := ui.exportOutput.(type) {
case *os.File:
f.Close()
err = f.Close()
if err != nil {
return err
}
}

if ui.ShowProgress {
Expand Down
6 changes: 5 additions & 1 deletion tui/actions.go
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,11 @@ func (ui *UI) showFile() *tview.TextView {

file.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
if event.Rune() == 'q' || event.Key() == tcell.KeyESC {
f.Close()
err = f.Close()
if err != nil {
ui.showErr("Error closing file", err)
return event
}
ui.currentDirLabel.SetText("[::b] --- " +
strings.TrimPrefix(ui.currentDirPath, build.RootPathPrefix) +
" ---").SetDynamicColors(true)
Expand Down

0 comments on commit 0d57d2b

Please sign in to comment.