From c0096f68b6d07ebabdb35ebd0e86be2c41d9048f Mon Sep 17 00:00:00 2001 From: Philip Meulengracht Date: Wed, 2 Oct 2024 10:19:26 +0200 Subject: [PATCH] osutil/disks: fix name resolving of devices --- osutil/disks/mockdisk.go | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/osutil/disks/mockdisk.go b/osutil/disks/mockdisk.go index 89f7832c8f9..5583c51d4b1 100644 --- a/osutil/disks/mockdisk.go +++ b/osutil/disks/mockdisk.go @@ -305,15 +305,36 @@ func MockPartitionDeviceNodeToDiskMapping(mockedDisks map[string]*MockDiskMappin } func resolveName(deviceName string) (string, error) { - corrected := path.Join(dirs.GlobalRootDir, deviceName) - if osutil.IsSymlink(corrected) { - resolved, err := filepath.EvalSymlinks(corrected) - if err != nil { + resolve := func(p string) (string, error) { + if !osutil.FileExists(p) { + return "", nil + } + if osutil.IsSymlink(p) { + resolved, err := filepath.EvalSymlinks(p) + if err != nil { + return "", err + } + return resolved, nil + } + return p, nil + } + + if res, err := resolve(deviceName); err != nil { + return "", err + } else if res == "" { + // did not exist, try again but with corrected path + if res, err := resolve(path.Join(dirs.GlobalRootDir, deviceName)); err != nil { return "", err + } else if res == "" { + // did not exist at all, meaning we assume it's the name of + // the device, not a path + return deviceName, nil + } else { + return strings.TrimPrefix(res, dirs.GlobalRootDir), nil } - corrected = resolved + } else { + return res, nil } - return strings.TrimPrefix(corrected, dirs.GlobalRootDir), nil } // MockDeviceNameToDiskMapping will mock DiskFromDeviceName such that the