]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
setupapi: Add SP_DRVINFO_DATA.IsNewer() method to simplify comparison
authorSimon Rozman <simon@rozman.si>
Wed, 6 Feb 2019 19:17:47 +0000 (20:17 +0100)
committerSimon Rozman <simon@rozman.si>
Wed, 6 Feb 2019 19:17:47 +0000 (20:17 +0100)
Signed-off-by: Simon Rozman <simon@rozman.si>
setupapi/setupapi_windows_test.go
setupapi/types_windows.go

index 3d9abd65a2ad068dc47d78f14b69dbf63c85cb81..9f45a6ff688b551c78a2894c856c472487d17ea0 100644 (file)
@@ -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())
index 0eb640ca8d236077771d150d1ed4fc87f5fa43f2..2dfcb7060cacdde88c3092c90079e26956d4b7aa 100644 (file)
@@ -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