fmacros.h: Fix warning when compiled with -Wundef
When compiling with the flag `-Wundef` the following warning is emitted:
```
[ 40%] Building C object CMakeFiles/hiredis-STATIC.dir/read.c.o
In file included from /data/files/users/jerry/github/hiredis/read.c:33:0:
/data/files/users/jerry/github/hiredis/fmacros.h:17:5: warning: "__APPLE__" is not defined [-Wundef]
#if __APPLE__ && __MACH__
^
In file included from /usr/include/string.h:25:0,
from /data/files/users/jerry/github/hiredis/read.c:34:
```
Prevent buffer overflow when formatting the error
strncat might copy n+1 bytes (n bytes from the source plus a terminating nul byte).
Also strncat appends after the first found nul byte. But all we pass is
a buffer we might not have zeroed out already.
Closes#380
test.c: Fix shadowed name with typedef when compiling with -Wshadow
Fixes:
```
/data/files/users/jerry/github/hiredis/test.c: In function 'test_free_null':
/data/files/users/jerry/github/hiredis/test.c:331:11: warning: declaration of 'redisContext' shadows a global declaration [-Wshadow]
void *redisContext = NULL;
^
In file included from /data/files/users/jerry/github/hiredis/test.c:13:0:
/data/files/users/jerry/github/hiredis/hiredis.h:161:3: note: shadowed declaration is here
} redisContext;
^
```
strncat might copy n+1 bytes (n bytes from the source plus a terminating nul byte).
Also strncat appends after the first found nul byte. But all we pass is
a buffer we might not have zeroed out already.
Closes#380
This reverts commit 1db17f257b.
If the `REDIS_CONNECTED` flag is cleared,
the async onDisconnect callback function will never be called.
This causes problems as the disconnect is never reported back to the user.
Closes#359
This adds a new adapter and an example for using hiredis with the ivykis
async I/O library.
Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
Not all code using hiredis can compile using '-std=c99', and/or not all users are able to easily make that change to the build process of various open-source projects, so it is more pragmatic to choose a different identifier that does not impose this requirement.
When an asynchronous hiredis connection subscribes to a Pub/Sub channel
and gets an error, and in other related conditions, the function
redisProcessCallbacks() enters a code path where the link is
disconnected, however the function returns before freeing the allocated
reply object. This causes a memory leak. The memory leak was trivial to
trigger in Redis Sentinel, which uses hiredis, every time we tried to
subscribe to an instance that required a password, in case the Sentinel
was configured either with the wrong password or without password at
all. In this case, the -AUTH error caused the leaking code path to be
executed.
Originally implemented by @abedra as part of #306.
In case a write or read times out, we force an error state, because we
can't guarantuee that the next read will get the right data.
Instead we need to reconnect to have a clean-state connection, which is
now easily possible with this method.