diff options
author | antirez <antirez@gmail.com> | 2015-06-23 10:27:45 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2015-06-23 10:27:48 +0200 |
commit | 8d5ad19d154dde494a87ce0af29811bc2d3217e1 (patch) | |
tree | d115df91a72de59e350a1223ecb3ce0fbb5e7e2c /src/geo.c | |
parent | 0425c60381f9f2d1adf5a08b48f305ecf30dbfa6 (diff) | |
download | redis-8d5ad19d154dde494a87ce0af29811bc2d3217e1.tar.gz |
Geo: return REDIS_* where appropriate, improve commenting
Diffstat (limited to 'src/geo.c')
-rw-r--r-- | src/geo.c | 31 |
1 files changed, 19 insertions, 12 deletions
@@ -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: <number> <unit> 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; |