summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/t_set.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/t_set.c b/src/t_set.c
index d5a801e11..8f21f71b1 100644
--- a/src/t_set.c
+++ b/src/t_set.c
@@ -407,7 +407,7 @@ void spopWithCountCommand(client *c) {
/* Get the count argument */
if (getLongFromObjectOrReply(c,c->argv[2],&l,NULL) != C_OK) return;
if (l >= 0) {
- count = (unsigned) l;
+ count = (unsigned long) l;
} else {
addReply(c,shared.outofrangeerr);
return;
@@ -626,7 +626,7 @@ void srandmemberWithCountCommand(client *c) {
if (getLongFromObjectOrReply(c,c->argv[2],&l,NULL) != C_OK) return;
if (l >= 0) {
- count = (unsigned) l;
+ count = (unsigned long) l;
} else {
/* A negative count means: return the same elements multiple times
* (i.e. don't remove the extracted element after every extraction). */
@@ -774,15 +774,21 @@ void srandmemberCommand(client *c) {
}
int qsortCompareSetsByCardinality(const void *s1, const void *s2) {
- return setTypeSize(*(robj**)s1)-setTypeSize(*(robj**)s2);
+ if (setTypeSize(*(robj**)s1) > setTypeSize(*(robj**)s2)) return 1;
+ if (setTypeSize(*(robj**)s1) < setTypeSize(*(robj**)s2)) return -1;
+ return 0;
}
/* This is used by SDIFF and in this case we can receive NULL that should
* be handled as empty sets. */
int qsortCompareSetsByRevCardinality(const void *s1, const void *s2) {
robj *o1 = *(robj**)s1, *o2 = *(robj**)s2;
+ unsigned long first = o1 ? setTypeSize(o1) : 0;
+ unsigned long second = o2 ? setTypeSize(o2) : 0;
- return (o2 ? setTypeSize(o2) : 0) - (o1 ? setTypeSize(o1) : 0);
+ if (first < second) return 1;
+ if (first > second) return -1;
+ return 0;
}
void sinterGenericCommand(client *c, robj **setkeys,