diff --git a/cmd/mkinitfs/main.go b/cmd/mkinitfs/main.go index 00abbb3..039cd2f 100644 --- a/cmd/mkinitfs/main.go +++ b/cmd/mkinitfs/main.go @@ -48,9 +48,12 @@ func main() { } deviceinfoFile := "/etc/deviceinfo" - if !misc.Exists(deviceinfoFile) { + if exists, err := misc.Exists(deviceinfoFile); !exists { log.Printf("NOTE: %q not found, this file is required by mkinitfs.\n", deviceinfoFile) return + } else if err != nil { + retCode = 1 + log.Printf("received unexpected error when getting status for %q: %s", deviceinfoFile, err) } devinfo, err := deviceinfo.ReadDeviceinfo(deviceinfoFile) diff --git a/internal/filelist/modules/modules.go b/internal/filelist/modules/modules.go index 884c6bd..01ff736 100644 --- a/internal/filelist/modules/modules.go +++ b/internal/filelist/modules/modules.go @@ -40,10 +40,12 @@ func (m *Modules) List() (*filelist.FileList, error) { files := filelist.NewFileList() modDir := filepath.Join("/lib/modules", kernVer) - if !misc.Exists(modDir) { + if exists, err := misc.Exists(modDir); !exists { // dir /lib/modules/ if kernel built without module support, so just print a message log.Printf("-- kernel module directory not found: %q, not including modules", modDir) return files, nil + } else if err != nil { + return nil, fmt.Errorf("received unexpected error when getting status for %q: %w", modDir, err) } // modules.* required by modprobe @@ -148,8 +150,10 @@ func getModulesInDir(modPath string) (files []string, err error) { func getModule(modName string, modDir string) (files []string, err error) { modDep := filepath.Join(modDir, "modules.dep") - if !misc.Exists(modDep) { + if exists, err := misc.Exists(modDep); !exists { return nil, fmt.Errorf("kernel module.dep not found: %s", modDir) + } else if err != nil { + return nil, fmt.Errorf("received unexpected error when getting module.dep status: %w", err) } fd, err := os.Open(modDep) @@ -165,9 +169,12 @@ func getModule(modName string, modDir string) (files []string, err error) { for _, dep := range deps { p := filepath.Join(modDir, dep) - if !misc.Exists(p) { + if exists, err := misc.Exists(p); !exists { return nil, fmt.Errorf("tried to include a module that doesn't exist in the modules directory (%s): %s", modDir, p) + } else if err != nil { + return nil, fmt.Errorf("received unexpected error when getting status for %q: %w", p, err) } + files = append(files, p) } diff --git a/internal/filelist/osksdl/osksdl.go b/internal/filelist/osksdl/osksdl.go index 4d993db..42c97a0 100644 --- a/internal/filelist/osksdl/osksdl.go +++ b/internal/filelist/osksdl/osksdl.go @@ -28,8 +28,11 @@ func New(mesaDriverName string) *OskSdl { // disk (d)encryption func (s *OskSdl) List() (*filelist.FileList, error) { files := filelist.NewFileList() - if !misc.Exists("/usr/bin/osk-sdl") { + + if exists, err := misc.Exists("/usr/bin/osk-sdl"); !exists { return files, nil + } else if err != nil { + return files, fmt.Errorf("received unexpected error when getting status for %q: %w", "/usr/bin/osk-sdl", err) } log.Println("- Including osk-sdl support") @@ -145,8 +148,10 @@ func getOskConfFontPath(oskConfPath string) (string, error) { path = fields[2] } } - if !misc.Exists(path) { + if exists, err := misc.Exists(path); !exists { return path, fmt.Errorf("unable to find font: %s", path) + } else if err != nil { + return path, fmt.Errorf("received unexpected error when getting status for %q: %w", path, err) } return path, nil diff --git a/internal/misc/misc.go b/internal/misc/misc.go index 34e9066..3d952b4 100644 --- a/internal/misc/misc.go +++ b/internal/misc/misc.go @@ -4,6 +4,7 @@ package misc import ( + "errors" "log" "os" "time" @@ -47,10 +48,18 @@ func TimeFunc(start time.Time, name string) { log.Printf("%s completed in: %s", name, elapsed) } -// Exists tests if the given file/dir exists or not -func Exists(file string) bool { - if _, err := os.Stat(file); err == nil { - return true +// Exists tests if the given file/dir exists or not. Returns any errors related +// to os.Stat if the type is *not* ErrNotExist. If an error is returned, then +// the value of the returned boolean cannot be trusted. +func Exists(file string) (bool, error) { + _, err := os.Stat(file) + if err == nil { + return true, nil + } else if errors.Is(err, os.ErrNotExist) { + // Don't return the error, the file doesn't exist which is OK + return false, nil } - return false + + // Other errors from os.Stat returned here + return false, err }