[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[win-pv-devel] [PATCH] [WHQL] 64bit OIDs: 4-byte results are a success



When buffer is >= 8-bytes, return a 8-byte buffer,
when buffer is >= 4-bytes, return a 4-byte buffer,
else, indicate 8-bytes required and indicate failure

Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
 src/xennet/adapter.c | 47 ++++++++++++++++++++++++-----------------------
 1 file changed, 24 insertions(+), 23 deletions(-)

diff --git a/src/xennet/adapter.c b/src/xennet/adapter.c
index b094519..f85ce12 100644
--- a/src/xennet/adapter.c
+++ b/src/xennet/adapter.c
@@ -1151,17 +1151,16 @@ __CopyBuffer(
     IN  PVOID               Buffer,
     IN  ULONG               BufferLength,
     IN  PVOID               Source,
-    IN OUT PULONG           SourceLength
+    IN  ULONG               SourceLength
     )
 {
-    if (BufferLength >= *SourceLength) {
-        RtlCopyMemory(Buffer, Source, *SourceLength);
+    if (BufferLength >= SourceLength) {
+        RtlCopyMemory(Buffer, Source, SourceLength);
         return NDIS_STATUS_SUCCESS;
-    } else {
-        *SourceLength = BufferLength;
-        RtlCopyMemory(Buffer, Source, *SourceLength);
-        return NDIS_STATUS_BUFFER_TOO_SHORT;
     }
+
+    RtlCopyMemory(Buffer, Source, BufferLength);
+    return NDIS_STATUS_BUFFER_TOO_SHORT;
 }
 
 static FORCEINLINE NDIS_STATUS
@@ -1172,14 +1171,14 @@ __SetUlong(
     IN OUT PULONG           SourceLength
     )
 {
+    *SourceLength = sizeof(ULONG);
+
     if (BufferLength >= sizeof(ULONG)) {
-        *(PULONG)Buffer = Source;
-        *SourceLength = sizeof(ULONG);
+        *(PULONG)Buffer = (ULONG)Source;
         return NDIS_STATUS_SUCCESS;
-    } else {
-        *SourceLength = 0;
-        return NDIS_STATUS_BUFFER_TOO_SHORT;
     }
+
+    return NDIS_STATUS_BUFFER_TOO_SHORT;
 }
 
 static FORCEINLINE NDIS_STATUS
@@ -1190,18 +1189,20 @@ __SetUlong64(
     IN OUT PULONG           SourceLength
     )
 {
+    *SourceLength = sizeof(ULONGLONG);
+
     if (BufferLength >= sizeof(ULONGLONG)) {
         *(PULONGLONG)Buffer = Source;
-        *SourceLength = sizeof(ULONGLONG);
         return NDIS_STATUS_SUCCESS;
-    } else if (BufferLength == sizeof(ULONG)) {
+    }
+
+    if (BufferLength >= sizeof(ULONG)) {
         *(PULONG)Buffer = (ULONG)Source;
         *SourceLength = sizeof(ULONG);
-        return NDIS_STATUS_BUFFER_TOO_SHORT;
-    } else {
-        *SourceLength = 0;
-        return NDIS_STATUS_BUFFER_TOO_SHORT;
+        return NDIS_STATUS_SUCCESS;
     }
+
+    return NDIS_STATUS_BUFFER_TOO_SHORT;
 }
 
 NDIS_STATUS
@@ -1230,7 +1231,7 @@ AdapterQueryInformation(
         ndisStatus = __CopyBuffer(Buffer,
                                   BufferLength,
                                   &Adapter->Capabilities,
-                                  &BytesWritten);
+                                  BytesWritten);
         break;
 
     case OID_PNP_QUERY_POWER:
@@ -1244,7 +1245,7 @@ AdapterQueryInformation(
         ndisStatus = __CopyBuffer(Buffer,
                                   BufferLength,
                                   &XennetSupportedOids[0],
-                                  &BytesWritten);
+                                  BytesWritten);
         break;
 
     case OID_GEN_HARDWARE_STATUS:
@@ -1288,7 +1289,7 @@ AdapterQueryInformation(
         ndisStatus = __CopyBuffer(Buffer,
                                   BufferLength,
                                   COMPANY_NAME_STR,
-                                  &BytesWritten);
+                                  BytesWritten);
         break;
 
     case OID_GEN_VENDOR_DRIVER_VERSION:
@@ -1336,7 +1337,7 @@ AdapterQueryInformation(
         ndisStatus = __CopyBuffer(Buffer,
                                   BufferLength,
                                   &EthernetAddress,
-                                  &BytesWritten);
+                                  BytesWritten);
         break;
 
     case OID_802_3_CURRENT_ADDRESS:
@@ -1347,7 +1348,7 @@ AdapterQueryInformation(
         ndisStatus = __CopyBuffer(Buffer,
                                   BufferLength,
                                   &EthernetAddress,
-                                  &BytesWritten);
+                                  BytesWritten);
         break;
 
     case OID_GEN_MAXIMUM_FRAME_SIZE:
-- 
1.9.4.msysgit.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.