[project] Change RtlCompareMemory to wv_memcmpeq
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Sun, 21 Nov 2010 10:25:29 +0000 (05:25 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Sun, 21 Nov 2010 10:25:29 +0000 (05:25 -0500)
We previously had patterns like:

  if (!(RtlCompareMemory(foo, bar, sizeof foo) == sizeof foo))

but now we have:

  if (!wv_memcmpeq(foo, bar, sizeof foo))

We've introduced a few new headers, which have the spirit of
mimicry of the C Standard Library....

'memcmpeq()' is completely bogus, however.

The MS compiler doesn't have '_Bool', so we use unsigned short
for the 'bool' type.  I hope that's good enough.

14 files changed:
WinVBlock.dev
src/aoe/driver.c
src/aoe/makedriver.bat
src/aoe/protocol.c
src/aoe/wv_string.c [new file with mode: 0644]
src/include/wv_stdbool.h [new file with mode: 0644]
src/include/wv_string.h [new file with mode: 0644]
src/winvblock/driver.c
src/winvblock/filedisk/grub4dos.c
src/winvblock/makedriver.bat
src/winvblock/probe.c
src/winvblock/ramdisk/grub4dos.c
src/winvblock/ramdisk/memdisk.c
src/winvblock/wv_string.c [new file with mode: 0644]

index d9afef1..ed9a074 100644 (file)
@@ -1,7 +1,7 @@
 [Project]\r
 FileName=WinVBlock.dev\r
 Name=WinVBlock\r
-UnitCount=63\r
+UnitCount=67\r
 PchHead=-1\r
 PchSource=-1\r
 Ver=3\r
@@ -710,3 +710,43 @@ Priority=1000
 OverrideBuildCmd=0\r
 BuildCmd=\r
 \r
+[Unit64]\r
+FileName=src\include\wv_string.h\r
+CompileCpp=1\r
+Folder=Include\r
+Compile=1\r
+Link=1\r
+Priority=1000\r
+OverrideBuildCmd=0\r
+BuildCmd=\r
+\r
+[Unit65]\r
+FileName=src\winvblock\wv_string.c\r
+CompileCpp=1\r
+Folder=WinVBlock\r
+Compile=1\r
+Link=1\r
+Priority=1000\r
+OverrideBuildCmd=0\r
+BuildCmd=\r
+\r
+[Unit66]\r
+FileName=src\include\wv_stdbool.h\r
+CompileCpp=1\r
+Folder=Include\r
+Compile=1\r
+Link=1\r
+Priority=1000\r
+OverrideBuildCmd=0\r
+BuildCmd=\r
+\r
+[Unit67]\r
+FileName=src\aoe\wv_string.c\r
+CompileCpp=1\r
+Folder=AoE\r
+Compile=1\r
+Link=1\r
+Priority=1000\r
+OverrideBuildCmd=0\r
+BuildCmd=\r
+\r
index fec0a57..1de7256 100644 (file)
@@ -31,6 +31,7 @@
 
 #include "winvblock.h"
 #include "wv_stdlib.h"
+#include "wv_string.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -368,10 +369,11 @@ setup_reg (
                  DBG ( "ZwQueryValueKey InterfacesKey 2 failed\n" );
                  goto e1_2;
                }
-             if ( RtlCompareMemory
-                  ( L"ethernet", KeyValueInformation->Data,
-                    sizeof ( L"ethernet" ) ) == sizeof ( L"ethernet" ) )
-               Update = TRUE;
+        if (wv_memcmpeq(
+            L"ethernet",
+            KeyValueInformation->Data,
+            sizeof L"ethernet"
+          )) Update = TRUE;
         wv_free(KeyValueInformation);
              if ( !NT_SUCCESS ( ZwClose ( SubKeyHandle ) ) )
                {
@@ -445,12 +447,11 @@ setup_reg (
                      sizeof ( winvblock__literal_w ) / sizeof ( WCHAR ) );
                    i++ )
                {
-                 if ( RtlCompareMemory
-                      ( winvblock__literal_w,
-                        &( ( ( PWCHAR ) KeyValueInformation->Data )[i] ),
-                        sizeof ( winvblock__literal_w ) ) ==
-                      sizeof ( winvblock__literal_w ) )
-                   {
+      if (wv_memcmpeq(
+          winvblock__literal_w,
+          ((PWCHAR)KeyValueInformation->Data) + i,
+          sizeof winvblock__literal_w
+        )) {
                      Found = TRUE;
                      break;
                    }
@@ -1535,12 +1536,10 @@ add_target (
   Walker = Last = AoE_Globals_TargetList;
   while ( Walker != NULL )
     {
-      if ( ( RtlCompareMemory ( &Walker->Target.ClientMac, ClientMac, 6 ) ==
-            6 )
-          && ( RtlCompareMemory ( &Walker->Target.ServerMac, ServerMac, 6 ) ==
-               6 ) && Walker->Target.Major == Major
-          && Walker->Target.Minor == Minor )
-       {
+      if (wv_memcmpeq(&Walker->Target.ClientMac, ClientMac, 6) &&
+        wv_memcmpeq(&Walker->Target.ServerMac, ServerMac, 6) &&
+        Walker->Target.Major == Major
+        && Walker->Target.Minor == Minor) {
          if ( Walker->Target.LBASize != LBASize )
            {
              DBG ( "LBASize changed for e%d.%d " "(%I64u->%I64u)\n", Major,
@@ -1680,9 +1679,7 @@ aoe__reply (
   /*
    * If our tag was a discovery request, note the server 
    */
-  if ( RtlCompareMemory
-       ( aoe_disk_ptr->ServerMac, "\xff\xff\xff\xff\xff\xff", 6 ) == 6 )
-    {
+  if (wv_memcmpeq(aoe_disk_ptr->ServerMac, "\xff\xff\xff\xff\xff\xff", 6)) {
       RtlCopyMemory ( aoe_disk_ptr->ServerMac, SourceMac, 6 );
       DBG ( "Major: %d minor: %d found on server "
            "%02x:%02x:%02x:%02x:%02x:%02x\n", aoe_disk_ptr->Major,
index 1fd9b28..44aff18 100644 (file)
@@ -1,6 +1,6 @@
 @echo off\r
 \r
-set c=driver.c protocol.c aoe.rc wv_stdlib.c\r
+set c=driver.c protocol.c aoe.rc wv_stdlib.c wv_string.c\r
 \r
 set name=AoE%bits%\r
 \r
index 0962fe9..3bd51e4 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "winvblock.h"
 #include "wv_stdlib.h"
+#include "wv_string.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -239,8 +240,7 @@ Protocol_SearchNIC (
 
   while ( Context != NULL )
     {
-      if ( RtlCompareMemory ( Mac, Context->Mac, 6 ) == 6 )
-       break;
+      if (wv_memcmpeq(Mac, Context->Mac, 6)) break;
       Context = Context->Next;
     }
   if ( Context != NULL )
@@ -257,8 +257,7 @@ Protocol_GetMTU (
 
   while ( Context != NULL )
     {
-      if ( RtlCompareMemory ( Mac, Context->Mac, 6 ) == 6 )
-       break;
+      if (wv_memcmpeq(Mac, Context->Mac, 6)) break;
       Context = Context->Next;
     }
   if ( Context == NULL )
@@ -284,8 +283,7 @@ Protocol_Send (
   DBG ( "Entry\n" );
 #endif
 
-  if ( RtlCompareMemory ( SourceMac, "\xff\xff\xff\xff\xff\xff", 6 ) == 6 )
-    {
+  if (wv_memcmpeq(SourceMac, "\xff\xff\xff\xff\xff\xff", 6)) {
       while ( Context != NULL )
        {
          Protocol_Send ( Context->Mac, DestinationMac, Data, DataSize, NULL );
@@ -296,8 +294,7 @@ Protocol_Send (
 
   while ( Context != NULL )
     {
-      if ( RtlCompareMemory ( SourceMac, Context->Mac, 6 ) == 6 )
-       break;
+      if (wv_memcmpeq(SourceMac, Context->Mac, 6)) break;
       Context = Context->Next;
     }
   if ( Context == NULL )
diff --git a/src/aoe/wv_string.c b/src/aoe/wv_string.c
new file mode 100644 (file)
index 0000000..d2de09a
--- /dev/null
@@ -0,0 +1,25 @@
+/**\r
+ * Copyright (C) 2009-2010, Shao Miller <shao.miller@yrdsb.edu.on.ca>.\r
+ *\r
+ * This file is part of WinVBlock, originally derived from WinAoE.\r
+ *\r
+ * WinVBlock is free software: you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation, either version 3 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * WinVBlock is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.\r
+ */\r
+\r
+#include <ntddk.h>\r
+#include "wv_string.h"\r
+\r
+bool wv_memcmpeq(const void *s1, const void *s2, wv_size_t n) {\r
+    return (RtlCompareMemory(s1, s2, n) == n) ? true : false;\r
+  }\r
diff --git a/src/include/wv_stdbool.h b/src/include/wv_stdbool.h
new file mode 100644 (file)
index 0000000..d24d786
--- /dev/null
@@ -0,0 +1,29 @@
+/**\r
+ * Copyright (C) 2009-2010, Shao Miller <shao.miller@yrdsb.edu.on.ca>.\r
+ *\r
+ * This file is part of WinVBlock, originally derived from WinAoE.\r
+ *\r
+ * WinVBlock is free software: you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation, either version 3 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * WinVBlock is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.\r
+ */\r
+#ifndef _wv_stdbool_h\r
+#  define _wv_stdbool_h\r
+\r
+/* Boolean type. */\r
+typedef unsigned short bool;\r
+\r
+/* Boolean values. */\r
+#define false (0)\r
+#define true (1)\r
+\r
+#endif /* _wv_stdbool_h */\r
diff --git a/src/include/wv_string.h b/src/include/wv_string.h
new file mode 100644 (file)
index 0000000..9d19e3f
--- /dev/null
@@ -0,0 +1,27 @@
+/**\r
+ * Copyright (C) 2009-2010, Shao Miller <shao.miller@yrdsb.edu.on.ca>.\r
+ *\r
+ * This file is part of WinVBlock, originally derived from WinAoE.\r
+ *\r
+ * WinVBlock is free software: you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation, either version 3 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * WinVBlock is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.\r
+ */\r
+#ifndef _wv_string_h\r
+#  define _wv_string_h\r
+#  include "wv_stdbool.h"\r
+#  include "wv_stddef.h"\r
+\r
+/* Test two byte ranges in memory for equality. */\r
+bool wv_memcmpeq(const void *s1, const void *s2, wv_size_t n);\r
+\r
+#endif /* _wv_string_h */\r
index a700aae..a14321a 100644 (file)
@@ -31,6 +31,7 @@
 
 #include "winvblock.h"
 #include "wv_stdlib.h"
+#include "wv_string.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -92,9 +93,7 @@ get_opt (
   our_opts = os_load_opts;
   while ( *our_opts != L'\0' )
     {
-      if ( RtlCompareMemory ( our_opts, our_sig, our_sig_len_bytes ) !=
-          our_sig_len_bytes )
-       {
+      if (!wv_memcmpeq(our_opts, our_sig, our_sig_len_bytes)) {
          our_opts++;
          continue;
        }
@@ -110,9 +109,7 @@ get_opt (
   opt_name_len_bytes = opt_name_len * sizeof ( WCHAR );
   while ( *the_opt != L'\0' && *the_opt != L' ' )
     {
-      if ( RtlCompareMemory ( the_opt, opt_name, opt_name_len_bytes ) !=
-          opt_name_len_bytes )
-       {
+      if (!wv_memcmpeq(the_opt, opt_name, opt_name_len_bytes)) {
          while ( *the_opt != L'\0' && *the_opt != L' ' && *the_opt != L',' )
            the_opt++;
          continue;
index 457a94c..20e5546 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "winvblock.h"
 #include "wv_stdlib.h"
+#include "wv_string.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -93,8 +94,7 @@ check_disk_match (
   /*
    * Examine .VHD fields for validity
    */
-  if ( RtlCompareMemory ( &buf->cookie, "conectix", sizeof ( buf->cookie ) ) !=
-       sizeof ( buf->cookie ) )
+  if (!wv_memcmpeq(&buf->cookie, "conectix", sizeof buf->cookie ))
     status = STATUS_UNSUCCESSFUL;
   if ( buf->file_ver.val != 0x10000 )
     status = STATUS_UNSUCCESSFUL;
@@ -227,10 +227,7 @@ process_param_block (
   /*
    * Check signature
    */
-  if ( !
-       ( RtlCompareMemory ( param_block, sig, sizeof ( sig ) ) ==
-        sizeof ( sig ) ) )
-    {
+  if (!wv_memcmpeq(param_block, sig, sizeof sig)) {
       DBG ( "RAM disk is not a parameter block.  Skipping.\n" );
       return;
     }
@@ -239,10 +236,7 @@ process_param_block (
    * Looks like a parameter block someone passed from GRUB4DOS.
    * Check the version
    */
-  if ( !
-       ( RtlCompareMemory ( param_block, ver, sizeof ( ver ) ) ==
-        sizeof ( ver ) ) )
-    {
+  if (!wv_memcmpeq(param_block, ver, sizeof ver)) {
       DBG ( "Parameter block version unsupported.  Skipping.\n" );
       return;
     }
@@ -341,11 +335,7 @@ filedisk_grub4dos__find (
       /*
        * Check signature
        */
-      if ( !
-          ( RtlCompareMemory
-            ( SafeMbrHookPtr->VendorID, sig,
-              sizeof ( sig ) - 1 ) == sizeof ( sig ) - 1 ) )
-       {
+      if (!wv_memcmpeq(SafeMbrHookPtr->VendorID, sig, sizeof sig - 1)) {
          DBG ( "Non-GRUB4DOS INT 0x13 Safe Hook\n" );
          InterruptVector = &SafeMbrHookPtr->PrevHook;
          continue;
index 827266c..2c46fd7 100644 (file)
@@ -10,7 +10,7 @@ for /d %%a in (%lib%) do (
   popd\r
   )\r
 \r
-set c=debug.c driver.c irp.c probe.c registry.c winvblock.rc device.c wv_stdlib.c\r
+set c=debug.c driver.c irp.c probe.c registry.c winvblock.rc device.c wv_stdlib.c wv_string.c\r
 \r
 set name=WVBlk%bits%\r
 \r
index b14310d..0f1e6da 100644 (file)
@@ -29,6 +29,7 @@
 #include <ntddk.h>
 
 #include "winvblock.h"
+#include "wv_string.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -65,8 +66,7 @@ get_safe_hook (
   DBG ( "INT 0x13 Offset: 0x%04x\n", InterruptVector->Offset );
   DBG ( "INT 0x13 Hook: 0x%08x\n", Int13Hook );
   DBG ( "INT 0x13 Safe Hook Signature: %s\n", Signature );
-  if ( !( RtlCompareMemory ( Signature, "$INT13SF", 8 ) == 8 ) )
-    {
+  if (!wv_memcmpeq(Signature, "$INT13SF", sizeof "$INT13SF" - 1)) {
       DBG ( "Invalid INT 0x13 Safe Hook Signature; End of chain\n" );
       return NULL;
     }
index 3882cc5..d84997a 100644 (file)
@@ -28,6 +28,7 @@
 #include <ntddk.h>
 
 #include "winvblock.h"
+#include "wv_string.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -72,10 +73,11 @@ ramdisk_grub4dos__find (
    */
   while ( SafeMbrHookPtr = get_safe_hook ( PhysicalMemory, InterruptVector ) )
     {
-      if ( !
-          ( RtlCompareMemory ( SafeMbrHookPtr->VendorID, "GRUB4DOS", 8 ) ==
-            8 ) )
-       {
+      if (!wv_memcmpeq(
+          SafeMbrHookPtr->VendorID,
+          "GRUB4DOS",
+          sizeof "GRUB4DOS" - 1
+        )) {
          DBG ( "Non-GRUB4DOS INT 0x13 Safe Hook\n" );
          InterruptVector = &SafeMbrHookPtr->PrevHook;
          continue;
index 9e4192d..3b57207 100644 (file)
@@ -28,6 +28,7 @@
 #include <ntddk.h>
 
 #include "winvblock.h"
+#include "wv_string.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -56,8 +57,7 @@ check_mbft (
       DBG ( "mBFT physical pointer too high!\n" );
       return FALSE;
     }
-  if ( !( RtlCompareMemory ( mBFT->Signature, "mBFT", 4 ) == 4 ) )
-    return FALSE;
+  if (!wv_memcmpeq(mBFT->Signature, "mBFT", sizeof "mBFT" - 1)) return FALSE;
   if ( Offset + mBFT->Length >= 0x100000 )
     {
       DBG ( "mBFT length out-of-bounds\n" );
@@ -144,10 +144,7 @@ memdisk__find (
    */
   while ( SafeMbrHookPtr = get_safe_hook ( PhysicalMemory, InterruptVector ) )
     {
-      if ( !
-          ( RtlCompareMemory ( SafeMbrHookPtr->VendorID, "MEMDISK ", 8 ) ==
-            8 ) )
-       {
+      if (!wv_memcmpeq(SafeMbrHookPtr->VendorID, "MEMDISK ", 8)) {
          DBG ( "Non-MEMDISK INT 0x13 Safe Hook\n" );
        }
       else
diff --git a/src/winvblock/wv_string.c b/src/winvblock/wv_string.c
new file mode 100644 (file)
index 0000000..d2de09a
--- /dev/null
@@ -0,0 +1,25 @@
+/**\r
+ * Copyright (C) 2009-2010, Shao Miller <shao.miller@yrdsb.edu.on.ca>.\r
+ *\r
+ * This file is part of WinVBlock, originally derived from WinAoE.\r
+ *\r
+ * WinVBlock is free software: you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation, either version 3 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * WinVBlock is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.\r
+ */\r
+\r
+#include <ntddk.h>\r
+#include "wv_string.h"\r
+\r
+bool wv_memcmpeq(const void *s1, const void *s2, wv_size_t n) {\r
+    return (RtlCompareMemory(s1, s2, n) == n) ? true : false;\r
+  }\r