Quellcode durchsuchen

Merge branch 'maint'

* maint:
  Fix negative shift warning
  comp_with_mask: Slight optimization: Only calculate mask%8 once
  comp_with_mask: Slight optimization: Avoid shifts if address matches full mask
Bryan Drewery vor 8 Jahren
Ursprung
Commit
cd25430980
1 geänderte Dateien mit 10 neuen und 5 gelöschten Zeilen
  1. 10 5
      src/match.cc

+ 10 - 5
src/match.cc

@@ -234,13 +234,18 @@ int _wild_match(unsigned char *m, unsigned char *n)
 static inline int
 comp_with_mask(void *addr, void *dest, unsigned int mask)
 {
-  if (memcmp(addr, dest, mask >> 3) == 0)
+  int n = mask >> 3;
+
+  if (memcmp(addr, dest, n) == 0)
   {
-    int n = mask >> 3;
-    int m = ((-1) << (8 - (mask % 8)));
+    int leftover = mask % 8;
+
+    if (leftover == 0)
+      return (1);
+
+    int m = ((~0U) << (8 - leftover));
 
-    if (mask % 8 == 0 ||
-       (((unsigned char *) addr)[n] & m) == (((unsigned char *) dest)[n] & m))
+    if ((((unsigned char *) addr)[n] & m) == (((unsigned char *) dest)[n] & m))
       return (1);
   }
   return (0);