From d7c791252a45b26f40217ad7af7b1d288f80e86c Mon Sep 17 00:00:00 2001 From: Frank Spitulski Date: Wed, 19 Oct 2022 19:19:59 -0700 Subject: [PATCH] rebase on master --- disk/disk_windows.go | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/disk/disk_windows.go b/disk/disk_windows.go index 0092e9856..fb61bb0f4 100644 --- a/disk/disk_windows.go +++ b/disk/disk_windows.go @@ -96,7 +96,7 @@ func PartitionsWithContext(ctx context.Context, all bool) ([]PartitionStat, erro } for _, v := range lpBuffer { if v >= 65 && v <= 90 { - i, err := getVolumeInformation(string(v)) + i, err := getVolumeInformation(string(v), &warnings) if err != nil && !errors.Is(err, errDeviceNotReady) && !errors.Is(err, errInvalidDriveType) { continue } @@ -161,7 +161,7 @@ func IOCountersWithContext(ctx context.Context, names ...string) (map[string]IOC return drivemap, err } - i, err := getVolumeInformation(vStr) + i, err := getVolumeInformation(vStr, nil) if err != nil { return nil, err } @@ -183,7 +183,7 @@ func IOCountersWithContext(ctx context.Context, names ...string) (map[string]IOC } func SerialNumberWithContext(ctx context.Context, name string) (string, error) { - i, err := getVolumeInformation(name) + i, err := getVolumeInformation(name, nil) if err != nil { return "", err } @@ -192,7 +192,7 @@ func SerialNumberWithContext(ctx context.Context, name string) (string, error) { } func LabelWithContext(ctx context.Context, name string) (string, error) { - i, err := getVolumeInformation(name) + i, err := getVolumeInformation(name, nil) if err != nil { return "", err } @@ -214,12 +214,16 @@ var ( ) // getVolumeInformation returns all the information gathered from GetVolumeInformationW -func getVolumeInformation(name string) (*volumeInformation, error) { +func getVolumeInformation(name string, warnings *common.Warnings) (*volumeInformation, error) { path := name + ":" typepath, _ := windows.UTF16PtrFromString(path) typeret, _, _ := procGetDriveType.Call(uintptr(unsafe.Pointer(typepath))) if typeret == 0 { - return nil, windows.GetLastError() + err := windows.GetLastError() + if warnings != nil { + warnings.Add(err) + } + return nil, err } if typeret == windows.DRIVE_REMOVABLE || typeret == windows.DRIVE_FIXED || typeret == windows.DRIVE_REMOTE || typeret == windows.DRIVE_CDROM { @@ -242,6 +246,9 @@ func getVolumeInformation(name string) (*volumeInformation, error) { if typeret == 5 || typeret == 2 { return nil, errDeviceNotReady // device is not ready will happen if there is no disk in the drive } + if warnings != nil { + warnings.Add(err) + } return nil, err }