From 8072e62d838dedc460cab8684570e3dcdb0695b8 Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Mon, 22 Oct 2018 17:17:51 -0700 Subject: [PATCH] pkg/system/stat_unix: wrap errors in PathError syscall.Stat (and Lstat), unlike functions from os pkg, return "raw" errors (like EPERM or EINVAL), and those are propagated up the function call stack unchanged, and gets logged and/or returned to the user as is. Wrap those into os.PathError{} so the error message will at least have function name and file name. Note we use Capitalized function names to distinguish between functions in os and ours. Signed-off-by: Kir Kolyshkin --- pkg/system/lstat_unix.go | 3 ++- pkg/system/stat_unix.go | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/system/lstat_unix.go b/pkg/system/lstat_unix.go index 7477995f1b..b76234a1a1 100644 --- a/pkg/system/lstat_unix.go +++ b/pkg/system/lstat_unix.go @@ -3,6 +3,7 @@ package system // import "github.com/docker/docker/pkg/system" import ( + "os" "syscall" ) @@ -13,7 +14,7 @@ import ( func Lstat(path string) (*StatT, error) { s := &syscall.Stat_t{} if err := syscall.Lstat(path, s); err != nil { - return nil, err + return nil, &os.PathError{"Lstat", path, err} } return fromStatT(s) } diff --git a/pkg/system/stat_unix.go b/pkg/system/stat_unix.go index 3d7e2ebbef..146ac217e9 100644 --- a/pkg/system/stat_unix.go +++ b/pkg/system/stat_unix.go @@ -3,6 +3,7 @@ package system // import "github.com/docker/docker/pkg/system" import ( + "os" "syscall" ) @@ -59,7 +60,7 @@ func (s StatT) IsDir() bool { func Stat(path string) (*StatT, error) { s := &syscall.Stat_t{} if err := syscall.Stat(path, s); err != nil { - return nil, err + return nil, &os.PathError{"Stat", path, err} } return fromStatT(s) }