Skip to content

Commit

Permalink
Made connect functions return NULL on alloc failures.
Browse files Browse the repository at this point in the history
Updated documentation and examples accordingly.
  • Loading branch information
hdoreau committed Jan 22, 2013
1 parent 3c46b13 commit 814be4f
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 14 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ After trying to connect to Redis using `redisConnect` you should
check the `err` field to see if establishing the connection was successful:

redisContext *c = redisConnect("127.0.0.1", 6379);
if (c->err) {
if (c != NULL && c->err) {
printf("Error: %s\n", c->errstr);
// handle error
}
Expand Down
20 changes: 16 additions & 4 deletions async.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,15 +142,27 @@ static void __redisAsyncCopyError(redisAsyncContext *ac) {
}

redisAsyncContext *redisAsyncConnect(const char *ip, int port) {
redisContext *c = redisConnectNonBlock(ip,port);
redisAsyncContext *ac = redisAsyncInitialize(c);
redisContext *c;
redisAsyncContext *ac;

c = redisConnectNonBlock(ip,port);
if (c == NULL)
return NULL;

ac = redisAsyncInitialize(c);
__redisAsyncCopyError(ac);
return ac;
}

redisAsyncContext *redisAsyncConnectUnix(const char *path) {
redisContext *c = redisConnectUnixNonBlock(path);
redisAsyncContext *ac = redisAsyncInitialize(c);
redisContext *c;
redisAsyncContext *ac;

c = redisConnectUnixNonBlock(path);
if (c == NULL)
return NULL;

ac = redisAsyncInitialize(c);
__redisAsyncCopyError(ac);
return ac;
}
Expand Down
9 changes: 7 additions & 2 deletions example.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,13 @@ int main(void) {

struct timeval timeout = { 1, 500000 }; // 1.5 seconds
c = redisConnectWithTimeout((char*)"127.0.0.1", 6379, timeout);
if (c->err) {
printf("Connection error: %s\n", c->errstr);
if (c == NULL || c->err) {
if (c) {
printf("Connection error: %s\n", c->errstr);
redisFree(c);
} else {
printf("Connection error: can't allocate redis context\n");
}
exit(1);
}

Expand Down
42 changes: 36 additions & 6 deletions hiredis.c
Original file line number Diff line number Diff line change
Expand Up @@ -1014,42 +1014,72 @@ void redisFree(redisContext *c) {
* context will be set to the return value of the error function.
* When no set of reply functions is given, the default set will be used. */
redisContext *redisConnect(const char *ip, int port) {
redisContext *c = redisContextInit();
redisContext *c;

c = redisContextInit();
if (c == NULL)
return NULL;

c->flags |= REDIS_BLOCK;
redisContextConnectTcp(c,ip,port,NULL);
return c;
}

redisContext *redisConnectWithTimeout(const char *ip, int port, struct timeval tv) {
redisContext *c = redisContextInit();
redisContext *c;

c = redisContextInit();
if (c == NULL)
return NULL;

c->flags |= REDIS_BLOCK;
redisContextConnectTcp(c,ip,port,&tv);
return c;
}

redisContext *redisConnectNonBlock(const char *ip, int port) {
redisContext *c = redisContextInit();
redisContext *c;

c = redisContextInit();
if (c == NULL)
return NULL;

c->flags &= ~REDIS_BLOCK;
redisContextConnectTcp(c,ip,port,NULL);
return c;
}

redisContext *redisConnectUnix(const char *path) {
redisContext *c = redisContextInit();
redisContext *c;

c = redisContextInit();
if (c == NULL)
return NULL;

c->flags |= REDIS_BLOCK;
redisContextConnectUnix(c,path,NULL);
return c;
}

redisContext *redisConnectUnixWithTimeout(const char *path, struct timeval tv) {
redisContext *c = redisContextInit();
redisContext *c;

c = redisContextInit();
if (c == NULL)
return NULL;

c->flags |= REDIS_BLOCK;
redisContextConnectUnix(c,path,&tv);
return c;
}

redisContext *redisConnectUnixNonBlock(const char *path) {
redisContext *c = redisContextInit();
redisContext *c;

c = redisContextInit();
if (c == NULL)
return NULL;

c->flags &= ~REDIS_BLOCK;
redisContextConnectUnix(c,path,NULL);
return c;
Expand Down
5 changes: 4 additions & 1 deletion test.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,10 @@ static redisContext *connect(struct config config) {
assert(NULL);
}

if (c->err) {
if (c == NULL) {
printf("Connection error: can't allocate redis context\n");
exit(1);
} else if (c->err) {
printf("Connection error: %s\n", c->errstr);
exit(1);
}
Expand Down

0 comments on commit 814be4f

Please sign in to comment.