From 9dc79852c36706cbb2f1faad98e8fcf99bcbdafd Mon Sep 17 00:00:00 2001 From: Bartosz Golaszewski Date: Sat, 7 Jan 2017 18:53:46 +0100 Subject: [PATCH] core: use strerror_r() instead of strerror() Use a thread-local buffer for the error message. Signed-off-by: Bartosz Golaszewski --- core.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core.c b/core.c index 974527d..d754e1b 100644 --- a/core.c +++ b/core.c @@ -50,7 +50,14 @@ static const char dev_dir[] = "/dev/"; static const char cdev_prefix[] = "gpiochip"; static const char libgpiod_consumer[] = "libgpiod"; +/* + * The longest error message in glibc is about 50 characters long so 64 should + * be enough to store every error message in the future too. + */ +#define ERRSTR_MAX 64 + static __thread int last_error; +static __thread char errmsg[ERRSTR_MAX]; static const char *const error_descr[] = { "success", @@ -116,7 +123,7 @@ int gpiod_errno(void) const char * gpiod_strerror(int errnum) { if (errnum < __GPIOD_ERRNO_OFFSET) - return strerror(errnum); + return strerror_r(errnum, errmsg, sizeof(errmsg)); else if (errnum > __GPIOD_MAX_ERR) return "invalid error number"; else -- 2.30.2