#include <stdarg.h> /* for va_list */
#include <sys/time.h> /* for struct timeval */
#include <stdint.h> /* uintXX_t, etc */
+#include <string.h> /* strerror_r, etc */
#include "sds.h" /* for sds */
#define HIREDIS_MAJOR 0
* then GNU strerror_r returned an internal static buffer and we \
* need to copy the result into our private buffer. */ \
if (err_str != (buf)) { \
- buf[(len)] = '\0'; \
+ buf[(len)-1] = '\0'; \
strncat((buf), err_str, ((len) - 1)); \
} \
} while (0)
static void __redisSetErrorFromErrno(redisContext *c, int type, const char *prefix) {
char buf[128] = { 0 };
+ char *p;
size_t len = 0;
if (prefix != NULL)
len = snprintf(buf,sizeof(buf),"%s: ",prefix);
- __redis_strerror_r(errno, (char *)(buf + len), sizeof(buf) - len);
+ p = buf + len;
+ __redis_strerror_r(errno, p, sizeof(buf) - len);
__redisSetError(c,type,buf);
}