diff options
author | Simon Rozman <simon@rozman.si> | 2019-02-06 20:17:47 +0100 |
---|---|---|
committer | Simon Rozman <simon@rozman.si> | 2019-02-06 20:17:47 +0100 |
commit | 069016bbc4fac01260f2addd70b67bce5ebeac70 (patch) | |
tree | de727571cbce16ada46f314a286343dea13a73ac | |
parent | 3c29434a79f5af9ce668f699105778f36417a5d6 (diff) |
setupapi: Add SP_DRVINFO_DATA.IsNewer() method to simplify comparison
Signed-off-by: Simon Rozman <simon@rozman.si>
-rw-r--r-- | setupapi/setupapi_windows_test.go | 22 | ||||
-rw-r--r-- | setupapi/types_windows.go | 26 |
2 files changed, 48 insertions, 0 deletions
diff --git a/setupapi/setupapi_windows_test.go b/setupapi/setupapi_windows_test.go index 3d9abd6..9f45a6f 100644 --- a/setupapi/setupapi_windows_test.go +++ b/setupapi/setupapi_windows_test.go @@ -177,6 +177,28 @@ func TestDevInfo_BuildDriverInfoList(t *testing.T) { continue } + if !driverData.IsNewer(windows.Filetime{}, 0) { + t.Error("Driver should have non-zero date and version") + } + if !driverData.IsNewer(windows.Filetime{HighDateTime: driverData.DriverDate.HighDateTime}, 0) { + t.Error("Driver should have non-zero date and version") + } + if driverData.IsNewer(windows.Filetime{HighDateTime: driverData.DriverDate.HighDateTime + 1}, 0) { + t.Error("Driver should report newer version on high-date-time") + } + if !driverData.IsNewer(windows.Filetime{HighDateTime: driverData.DriverDate.HighDateTime, LowDateTime: driverData.DriverDate.LowDateTime}, 0) { + t.Error("Driver should have non-zero version") + } + if driverData.IsNewer(windows.Filetime{HighDateTime: driverData.DriverDate.HighDateTime, LowDateTime: driverData.DriverDate.LowDateTime + 1}, 0) { + t.Error("Driver should report newer version on low-date-time") + } + if driverData.IsNewer(windows.Filetime{HighDateTime: driverData.DriverDate.HighDateTime, LowDateTime: driverData.DriverDate.LowDateTime}, driverData.DriverVersion) { + t.Error("Driver should not be newer than itself") + } + if driverData.IsNewer(windows.Filetime{HighDateTime: driverData.DriverDate.HighDateTime, LowDateTime: driverData.DriverDate.LowDateTime}, driverData.DriverVersion+1) { + t.Error("Driver should report newer version on version") + } + err = devInfoList.SetSelectedDriver(deviceData, driverData) if err != nil { t.Errorf("Error calling SetupDiSetSelectedDriver: %s", err.Error()) diff --git a/setupapi/types_windows.go b/setupapi/types_windows.go index 0eb640c..2dfcb70 100644 --- a/setupapi/types_windows.go +++ b/setupapi/types_windows.go @@ -321,6 +321,32 @@ func (data SP_DRVINFO_DATA) ToGo() *DrvInfoData { } } +// IsNewer method returns true if SP_DRVINFO_DATA date and version is newer than supplied parameters. +func (data SP_DRVINFO_DATA) IsNewer(DriverDate windows.Filetime, DriverVersion uint64) bool { + if data.DriverDate.HighDateTime > DriverDate.HighDateTime { + return true + } + if data.DriverDate.HighDateTime < DriverDate.HighDateTime { + return false + } + + if data.DriverDate.LowDateTime > DriverDate.LowDateTime { + return true + } + if data.DriverDate.LowDateTime < DriverDate.LowDateTime { + return false + } + + if data.DriverVersion > DriverVersion { + return true + } + if data.DriverVersion < DriverVersion { + return false + } + + return false +} + // DrvInfoData is driver information structure (member of a driver info list that may be associated with a particular device instance, or (globally) with a device information set) type DrvInfoData struct { DriverType uint32 |