Zebediah Figura : setupapi/devinst: Factor out get_device_iface().

Alexandre Julliard julliard at winehq.org
Mon Nov 26 16:20:09 CST 2018


Module: wine
Branch: master
Commit: cdb486ae0a720492f227fcf811ec03adf0241117
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=cdb486ae0a720492f227fcf811ec03adf0241117

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Sun Nov 25 17:31:47 2018 -0600

setupapi/devinst: Factor out get_device_iface().

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/setupapi/devinst.c | 121 +++++++++++++++++-------------------------------
 1 file changed, 43 insertions(+), 78 deletions(-)

diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c
index 630d3e9..69f6fa2 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -157,6 +157,25 @@ static struct device *get_device(HDEVINFO devinfo, const SP_DEVINFO_DATA *data)
     return device;
 }
 
+static struct device_iface *get_device_iface(HDEVINFO devinfo, const SP_DEVICE_INTERFACE_DATA *data)
+{
+    struct DeviceInfoSet *set = devinfo;
+
+    if (!devinfo || devinfo == INVALID_HANDLE_VALUE || set->magic != SETUP_DEVICE_INFO_SET_MAGIC)
+    {
+        SetLastError(ERROR_INVALID_HANDLE);
+        return NULL;
+    }
+
+    if (!data || data->cbSize != sizeof(*data) || !data->Reserved)
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return NULL;
+    }
+
+    return (struct device_iface *)data->Reserved;
+}
+
 static inline void copy_device_data(SP_DEVINFO_DATA *data, const struct device *device)
 {
     data->ClassGuid = device->class;
@@ -2493,34 +2512,22 @@ HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyW(HDEVINFO devinfo,
     SP_DEVICE_INTERFACE_DATA *iface_data, DWORD reserved, REGSAM access,
     HINF hinf, const WCHAR *section)
 {
-    struct DeviceInfoSet *set = devinfo;
     struct device_iface *iface;
     HKEY refstr_key, params_key;
     WCHAR *path;
     LONG ret;
 
-    TRACE("%p %p %d %#x %p %s\n", devinfo, iface_data, reserved, access, hinf,
-        debugstr_w(section));
+    TRACE("devinfo %p, iface_data %p, reserved %d, access %#x, hinf %p, section %s.\n",
+            devinfo, iface_data, reserved, access, hinf, debugstr_w(section));
+
+    if (!(iface = get_device_iface(devinfo, iface_data)))
 
-    if (!devinfo || devinfo == INVALID_HANDLE_VALUE ||
-            set->magic != SETUP_DEVICE_INFO_SET_MAGIC)
-    {
-        SetLastError(ERROR_INVALID_HANDLE);
-        return INVALID_HANDLE_VALUE;
-    }
-    if (!iface_data || iface_data->cbSize != sizeof(SP_DEVICE_INTERFACE_DATA) ||
-            !iface_data->Reserved)
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return INVALID_HANDLE_VALUE;
-    }
     if (hinf && !section)
     {
         SetLastError(ERROR_INVALID_PARAMETER);
         return INVALID_HANDLE_VALUE;
     }
 
-    iface = (struct device_iface *)iface_data->Reserved;
     if (!(path = get_refstr_key_path(iface)))
     {
         SetLastError(ERROR_OUTOFMEMORY);
@@ -2554,28 +2561,16 @@ HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyW(HDEVINFO devinfo,
 BOOL WINAPI SetupDiDeleteDeviceInterfaceRegKey(HDEVINFO devinfo,
     SP_DEVICE_INTERFACE_DATA *iface_data, DWORD reserved)
 {
-    struct DeviceInfoSet *set = devinfo;
     struct device_iface *iface;
     HKEY refstr_key;
     WCHAR *path;
     LONG ret;
 
-    TRACE("%p %p %d\n", devinfo, iface_data, reserved);
+    TRACE("devinfo %p, iface_data %p, reserved %d.\n", devinfo, iface_data, reserved);
 
-    if (!devinfo || devinfo == INVALID_HANDLE_VALUE ||
-            set->magic != SETUP_DEVICE_INFO_SET_MAGIC)
-    {
-        SetLastError(ERROR_INVALID_HANDLE);
-        return FALSE;
-    }
-    if (!iface_data || iface_data->cbSize != sizeof(SP_DEVICE_INTERFACE_DATA) ||
-            !iface_data->Reserved)
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
+    if (!(iface = get_device_iface(devinfo, iface_data)))
         return FALSE;
-    }
 
-    iface = (struct device_iface *)iface_data->Reserved;
     if (!(path = get_refstr_key_path(iface)))
     {
         SetLastError(ERROR_OUTOFMEMORY);
@@ -2743,36 +2738,21 @@ BOOL WINAPI SetupDiDestroyDeviceInfoList(HDEVINFO devinfo)
 /***********************************************************************
  *		SetupDiGetDeviceInterfaceDetailA (SETUPAPI.@)
  */
-BOOL WINAPI SetupDiGetDeviceInterfaceDetailA(
-      HDEVINFO DeviceInfoSet,
-      PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
-      PSP_DEVICE_INTERFACE_DETAIL_DATA_A DeviceInterfaceDetailData,
-      DWORD DeviceInterfaceDetailDataSize,
-      PDWORD RequiredSize,
-      SP_DEVINFO_DATA *device_data)
+BOOL WINAPI SetupDiGetDeviceInterfaceDetailA(HDEVINFO devinfo, SP_DEVICE_INTERFACE_DATA *iface_data,
+        SP_DEVICE_INTERFACE_DETAIL_DATA_A *DeviceInterfaceDetailData,
+        DWORD DeviceInterfaceDetailDataSize, DWORD *RequiredSize, SP_DEVINFO_DATA *device_data)
 {
-    struct DeviceInfoSet *set = DeviceInfoSet;
     struct device_iface *iface;
     DWORD bytesNeeded = FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA_A, DevicePath[1]);
     BOOL ret = FALSE;
 
-    TRACE("(%p, %p, %p, %d, %p, %p)\n", DeviceInfoSet,
-     DeviceInterfaceData, DeviceInterfaceDetailData,
-     DeviceInterfaceDetailDataSize, RequiredSize, device_data);
+    TRACE("devinfo %p, iface_data %p, detail_data %p, size %d, needed %p, device_data %p.\n",
+            devinfo, iface_data, DeviceInterfaceDetailData, DeviceInterfaceDetailDataSize,
+            RequiredSize, device_data);
 
-    if (!DeviceInfoSet || DeviceInfoSet == INVALID_HANDLE_VALUE ||
-            set->magic != SETUP_DEVICE_INFO_SET_MAGIC)
-    {
-        SetLastError(ERROR_INVALID_HANDLE);
-        return FALSE;
-    }
-    if (!DeviceInterfaceData ||
-            DeviceInterfaceData->cbSize != sizeof(SP_DEVICE_INTERFACE_DATA) ||
-            !DeviceInterfaceData->Reserved)
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
+    if (!(iface = get_device_iface(devinfo, iface_data)))
         return FALSE;
-    }
+
     if (DeviceInterfaceDetailData &&
         DeviceInterfaceDetailData->cbSize != sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A))
     {
@@ -2784,7 +2764,7 @@ BOOL WINAPI SetupDiGetDeviceInterfaceDetailA(
         SetLastError(ERROR_INVALID_USER_BUFFER);
         return FALSE;
     }
-    iface = (struct device_iface *)DeviceInterfaceData->Reserved;
+
     if (iface->symlink)
         bytesNeeded += WideCharToMultiByte(CP_ACP, 0, iface->symlink, -1,
                 NULL, 0, NULL, NULL);
@@ -2816,37 +2796,22 @@ BOOL WINAPI SetupDiGetDeviceInterfaceDetailA(
 /***********************************************************************
  *		SetupDiGetDeviceInterfaceDetailW (SETUPAPI.@)
  */
-BOOL WINAPI SetupDiGetDeviceInterfaceDetailW(
-      HDEVINFO DeviceInfoSet,
-      PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
-      PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData,
-      DWORD DeviceInterfaceDetailDataSize,
-      PDWORD RequiredSize,
-      SP_DEVINFO_DATA *device_data)
+BOOL WINAPI SetupDiGetDeviceInterfaceDetailW(HDEVINFO devinfo, SP_DEVICE_INTERFACE_DATA *iface_data,
+        SP_DEVICE_INTERFACE_DETAIL_DATA_W *DeviceInterfaceDetailData,
+        DWORD DeviceInterfaceDetailDataSize, DWORD *RequiredSize, SP_DEVINFO_DATA *device_data)
 {
-    struct DeviceInfoSet *set = DeviceInfoSet;
     struct device_iface *iface;
     DWORD bytesNeeded = offsetof(SP_DEVICE_INTERFACE_DETAIL_DATA_W, DevicePath)
         + sizeof(WCHAR); /* include NULL terminator */
     BOOL ret = FALSE;
 
-    TRACE("(%p, %p, %p, %d, %p, %p)\n", DeviceInfoSet,
-     DeviceInterfaceData, DeviceInterfaceDetailData,
-     DeviceInterfaceDetailDataSize, RequiredSize, device_data);
+    TRACE("devinfo %p, iface_data %p, detail_data %p, size %d, needed %p, device_data %p.\n",
+            devinfo, iface_data, DeviceInterfaceDetailData, DeviceInterfaceDetailDataSize,
+            RequiredSize, device_data);
 
-    if (!DeviceInfoSet || DeviceInfoSet == INVALID_HANDLE_VALUE ||
-            set->magic != SETUP_DEVICE_INFO_SET_MAGIC)
-    {
-        SetLastError(ERROR_INVALID_HANDLE);
+    if (!(iface = get_device_iface(devinfo, iface_data)))
         return FALSE;
-    }
-    if (!DeviceInterfaceData ||
-            DeviceInterfaceData->cbSize != sizeof(SP_DEVICE_INTERFACE_DATA) ||
-            !DeviceInterfaceData->Reserved)
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-    }
+
     if (DeviceInterfaceDetailData && (DeviceInterfaceDetailData->cbSize <
             offsetof(SP_DEVICE_INTERFACE_DETAIL_DATA_W, DevicePath) + sizeof(WCHAR) ||
             DeviceInterfaceDetailData->cbSize > sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W)))
@@ -2859,7 +2824,7 @@ BOOL WINAPI SetupDiGetDeviceInterfaceDetailW(
         SetLastError(ERROR_INVALID_USER_BUFFER);
         return FALSE;
     }
-    iface = (struct device_iface *)DeviceInterfaceData->Reserved;
+
     if (iface->symlink)
         bytesNeeded += sizeof(WCHAR) * lstrlenW(iface->symlink);
     if (DeviceInterfaceDetailDataSize >= bytesNeeded)




More information about the wine-cvs mailing list