This callback is used by scanGenericCommand in order to collect elements * returned by the dictionary iterator into a list. */
| 1095 | /* This callback is used by scanGenericCommand in order to collect elements |
| 1096 | * returned by the dictionary iterator into a list. */ |
| 1097 | void scanCallback(void *privdata, const dictEntry *de) { |
| 1098 | void **pd = (void**) privdata; |
| 1099 | list *keys = (list*)pd[0]; |
| 1100 | robj *o = (robj*)pd[1]; |
| 1101 | robj *key, *val = NULL; |
| 1102 | |
| 1103 | if (o == NULL) { |
| 1104 | sds sdskey = (sds)dictGetKey(de); |
| 1105 | key = createStringObject(sdskey, sdslen(sdskey)); |
| 1106 | } else if (o->type == OBJ_SET) { |
| 1107 | sds keysds = (sds)dictGetKey(de); |
| 1108 | key = createStringObject(keysds,sdslen(keysds)); |
| 1109 | } else if (o->type == OBJ_HASH) { |
| 1110 | sds sdskey = (sds)dictGetKey(de); |
| 1111 | sds sdsval = (sds)dictGetVal(de); |
| 1112 | key = createStringObject(sdskey,sdslen(sdskey)); |
| 1113 | val = createStringObject(sdsval,sdslen(sdsval)); |
| 1114 | } else if (o->type == OBJ_ZSET) { |
| 1115 | sds sdskey = (sds)dictGetKey(de); |
| 1116 | key = createStringObject(sdskey,sdslen(sdskey)); |
| 1117 | val = createStringObjectFromLongDouble(*(double*)dictGetVal(de),0); |
| 1118 | } else { |
| 1119 | serverPanic("Type not handled in SCAN callback."); |
| 1120 | } |
| 1121 | |
| 1122 | listAddNodeTail(keys, key); |
| 1123 | if (val) listAddNodeTail(keys, val); |
| 1124 | } |
| 1125 | |
| 1126 | /* Try to parse a SCAN cursor stored at object 'o': |
| 1127 | * if the cursor is valid, store it as unsigned integer into *cursor and |
nothing calls this directly
no test coverage detected