From 8d5ad19d154dde494a87ce0af29811bc2d3217e1 Mon Sep 17 00:00:00 2001 From: antirez Date: Tue, 23 Jun 2015 10:27:45 +0200 Subject: [PATCH] Geo: return REDIS_* where appropriate, improve commenting --- src/geo.c | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/src/geo.c b/src/geo.c index ddc70dfbf..c26f76e63 100644 --- a/src/geo.c +++ b/src/geo.c @@ -88,30 +88,37 @@ static inline int decodeGeohash(double bits, double *latlong) { } /* Input Argument Helper */ -/* Take a pointer to the latitude arg then use the next arg for longitude */ +/* Take a pointer to the latitude arg then use the next arg for longitude. + * On parse error REDIS_ERR is returned, otherwise REDIS_OK. */ static inline int extractLatLongOrReply(redisClient *c, robj **argv, double *latlong) { for (int i = 0; i < 2; i++) { if (getDoubleFromObjectOrReply(c, argv[i], latlong + i, NULL) != REDIS_OK) { - return 0; + return REDIS_ERR; } } - return 1; + return REDIS_OK; } /* Input Argument Helper */ /* Decode lat/long from a zset member's score. - * Returns non-zero on successful decoding. */ + * Returns REDIS_OK on successful decoding, otherwise REDIS_ERR is returned. */ static int latLongFromMember(robj *zobj, robj *member, double *latlong) { double score = 0; - if (zsetScore(zobj, member, &score) == REDIS_ERR) return 0; - if (!decodeGeohash(score, latlong)) return 0; - return 1; + if (zsetScore(zobj, member, &score) == REDIS_ERR) return REDIS_ERR; + if (!decodeGeohash(score, latlong)) return REDIS_ERR; + return REDIS_OK; } -/* Input Argument Helper */ +/* Input Argument Helper. + * Extract the dinstance from the specified two arguments starting at 'argv' + * that shouldbe in the form: and return the dinstance in the + * specified unit on success. *conversino is populated with the coefficient + * to use in order to convert meters to the unit. + * + * On error a value less than zero is returned. */ static double extractDistanceOrReply(redisClient *c, robj **argv, double *conversion) { double distance; @@ -351,7 +358,7 @@ void geoAddCommand(redisClient *c) { for (i = 0; i < elements; i++) { double latlong[elements * 2]; - if (!extractLatLongOrReply(c, (c->argv+2)+(i*3),latlong)) { + if (extractLatLongOrReply(c, (c->argv+2)+(i*3),latlong) == REDIS_ERR) { for (i = 0; i < argc; i++) if (argv[i]) decrRefCount(argv[i]); zfree(argv); @@ -405,12 +412,12 @@ static void geoRadiusGeneric(redisClient *c, int type) { double latlong[2] = { 0 }; if (type == RADIUS_COORDS) { base_args = 6; - if (!extractLatLongOrReply(c, c->argv + 2, latlong)) + if (extractLatLongOrReply(c, c->argv + 2, latlong) == REDIS_ERR) return; } else if (type == RADIUS_MEMBER) { base_args = 5; robj *member = c->argv[2]; - if (!latLongFromMember(zobj, member, latlong)) { + if (latLongFromMember(zobj, member, latlong) == REDIS_ERR) { addReplyError(c, "could not decode requested zset member"); return; } @@ -587,7 +594,7 @@ void geoEncodeCommand(redisClient *c) { } double latlong[2]; - if (!extractLatLongOrReply(c, c->argv + 1, latlong)) return; + if (extractLatLongOrReply(c, c->argv + 1, latlong) == REDIS_ERR) return; /* Encode lat/long into our geohash */ GeoHashBits geohash;