diff --git a/src/t_set.c b/src/t_set.c index d5a801e1..8f21f71b 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,