This callback is used by scanGenericCommand in order to collect elements * returned by the dictionary iterator into a list. */
| 776 | /* This callback is used by scanGenericCommand in order to collect elements |
| 777 | * returned by the dictionary iterator into a list. */ |
| 778 | void scanCallback(void *privdata, const dictEntry *de) { |
| 779 | void **pd = (void**) privdata; |
| 780 | list *keys = pd[0]; |
| 781 | robj *o = pd[1]; |
| 782 | robj *key, *val = NULL; |
| 783 | |
| 784 | if (o == NULL) { |
| 785 | sds sdskey = dictGetKey(de); |
| 786 | key = createStringObject(sdskey, sdslen(sdskey)); |
| 787 | } else if (o->type == OBJ_SET) { |
| 788 | sds keysds = dictGetKey(de); |
| 789 | key = createStringObject(keysds,sdslen(keysds)); |
| 790 | } else if (o->type == OBJ_HASH) { |
| 791 | sds sdskey = dictGetKey(de); |
| 792 | sds sdsval = dictGetVal(de); |
| 793 | key = createStringObject(sdskey,sdslen(sdskey)); |
| 794 | val = createStringObject(sdsval,sdslen(sdsval)); |
| 795 | } else if (o->type == OBJ_ZSET) { |
| 796 | sds sdskey = dictGetKey(de); |
| 797 | key = createStringObject(sdskey,sdslen(sdskey)); |
| 798 | val = createStringObjectFromLongDouble(*(double*)dictGetVal(de),0); |
| 799 | } else { |
| 800 | serverPanic("Type not handled in SCAN callback."); |
| 801 | } |
| 802 | |
| 803 | listAddNodeTail(keys, key); |
| 804 | if (val) listAddNodeTail(keys, val); |
| 805 | } |
| 806 | |
| 807 | /* Try to parse a SCAN cursor stored at object 'o': |
| 808 | * if the cursor is valid, store it as unsigned integer into *cursor and |
nothing calls this directly
no test coverage detected