From 009664542be578ce6f1f27bbed86ddee78401cf6 Mon Sep 17 00:00:00 2001
From: midipix <writeonce@midipix.org>
Date: Thu, 9 Aug 2018 07:35:20 -0400
Subject: internals: slbt_output_strerror(): use strerror_r(3) rather than
 strerror(3).

---
 src/output/slbt_output_error.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

(limited to 'src')

diff --git a/src/output/slbt_output_error.c b/src/output/slbt_output_error.c
index 15fbd70..d1cc8e5 100644
--- a/src/output/slbt_output_error.c
+++ b/src/output/slbt_output_error.c
@@ -35,7 +35,9 @@ static const char * slbt_output_error_header(const struct slbt_error_info * erri
 		return "distorted state";
 }
 
-static const char * slbt_output_strerror(const struct slbt_error_info * erri)
+static const char * slbt_output_strerror(
+	const struct slbt_error_info * erri,
+	char (*errbuf)[256])
 {
 	if (erri->eflags & SLBT_ERROR_CUSTOM)
 		return "flow error: unexpected condition or other";
@@ -50,14 +52,17 @@ static const char * slbt_output_strerror(const struct slbt_error_info * erri)
 		return "input error: string length exceeds buffer size.";
 
 	else
-		return strerror(erri->esyscode);
+		return strerror_r(erri->esyscode,*errbuf,sizeof(*errbuf))
+			? "internal error: strerror_r(3) call failed"
+			: *errbuf;
 }
 
 static int slbt_output_error_record_plain(
 	const struct slbt_driver_ctx *	dctx,
 	const struct slbt_error_info *	erri)
 {
-	const char * errdesc = slbt_output_strerror(erri);
+	char         errbuf[256];
+	const char * errdesc = slbt_output_strerror(erri,&errbuf);
 
 	if (slbt_dprintf(slbt_driver_fderr(dctx),
 			"%s: %s %s(), line %d%s%s.\n",
@@ -76,7 +81,8 @@ static int slbt_output_error_record_annotated(
 	const struct slbt_driver_ctx *	dctx,
 	const struct slbt_error_info *	erri)
 {
-	const char * errdesc = slbt_output_strerror(erri);
+	char         errbuf[256];
+	const char * errdesc = slbt_output_strerror(erri,&errbuf);
 
 	if (slbt_dprintf(
 			slbt_driver_fderr(dctx),
@@ -100,7 +106,7 @@ static int slbt_output_error_record_annotated(
 			strlen(errdesc) ? ": " : "",
 
 			aclr_bold,
-			slbt_output_strerror(erri),
+			errdesc,
 			aclr_reset) < 0)
 		return -1;
 
-- 
cgit v1.2.3