summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bitops.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/bitops.c b/src/bitops.c
index 5550b60d1..5e996679b 100644
--- a/src/bitops.c
+++ b/src/bitops.c
@@ -735,12 +735,23 @@ void bitopCommand(client *c) {
output = (len[0] <= j) ? 0 : src[0][j];
if (op == BITOP_NOT) output = ~output;
for (i = 1; i < numkeys; i++) {
+ int skip = 0;
byte = (len[i] <= j) ? 0 : src[i][j];
switch(op) {
- case BITOP_AND: output &= byte; break;
- case BITOP_OR: output |= byte; break;
+ case BITOP_AND:
+ output &= byte;
+ skip = (output == 0);
+ break;
+ case BITOP_OR:
+ output |= byte;
+ skip = (output == 0xff);
+ break;
case BITOP_XOR: output ^= byte; break;
}
+
+ if (skip) {
+ break;
+ }
}
res[j] = output;
}