MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / processLineItem

Function processLineItem

deps/hiredis/read.c:269–349  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

267}
268
269static int processLineItem(redisReader *r) {
270 redisReadTask *cur = r->task[r->ridx];
271 void *obj;
272 char *p;
273 int len;
274
275 if ((p = readLine(r,&len)) != NULL) {
276 if (cur->type == REDIS_REPLY_INTEGER) {
277 if (r->fn && r->fn->createInteger) {
278 long long v;
279 if (string2ll(p, len, &v) == REDIS_ERR) {
280 __redisReaderSetError(r,REDIS_ERR_PROTOCOL,
281 "Bad integer value");
282 return REDIS_ERR;
283 }
284 obj = r->fn->createInteger(cur,v);
285 } else {
286 obj = (void*)REDIS_REPLY_INTEGER;
287 }
288 } else if (cur->type == REDIS_REPLY_DOUBLE) {
289 if (r->fn && r->fn->createDouble) {
290 char buf[326], *eptr;
291 double d;
292
293 if ((size_t)len >= sizeof(buf)) {
294 __redisReaderSetError(r,REDIS_ERR_PROTOCOL,
295 "Double value is too large");
296 return REDIS_ERR;
297 }
298
299 memcpy(buf,p,len);
300 buf[len] = '\0';
301
302 if (strcasecmp(buf,",inf") == 0) {
303 d = INFINITY; /* Positive infinite. */
304 } else if (strcasecmp(buf,",-inf") == 0) {
305 d = -INFINITY; /* Negative infinite. */
306 } else {
307 d = strtod((char*)buf,&eptr);
308 if (buf[0] == '\0' || eptr[0] != '\0' || isnan(d)) {
309 __redisReaderSetError(r,REDIS_ERR_PROTOCOL,
310 "Bad double value");
311 return REDIS_ERR;
312 }
313 }
314 obj = r->fn->createDouble(cur,d,buf,len);
315 } else {
316 obj = (void*)REDIS_REPLY_DOUBLE;
317 }
318 } else if (cur->type == REDIS_REPLY_NIL) {
319 if (r->fn && r->fn->createNil)
320 obj = r->fn->createNil(cur);
321 else
322 obj = (void*)REDIS_REPLY_NIL;
323 } else if (cur->type == REDIS_REPLY_BOOL) {
324 int bval = p[0] == 't' || p[0] == 'T';
325 if (r->fn && r->fn->createBool)
326 obj = r->fn->createBool(cur,bval);

Callers 1

processItemFunction · 0.85

Calls 5

readLineFunction · 0.85
__redisReaderSetErrorFunction · 0.85
__redisReaderSetErrorOOMFunction · 0.85
moveToNextTaskFunction · 0.85
string2llFunction · 0.70

Tested by

no test coverage detected