From: Khem Raj Date: Fri, 13 Jan 2023 20:36:35 +0000 (-0700) Subject: api: Use GNU strerror_r when available X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1211e1621d3ddf6f9513380018979cf6601a1c98;p=thirdparty%2Flibcgroup.git api: Use GNU strerror_r when available GNU strerror_r is only available in glibc, musl impelents the XSI version which is slightly different, therefore check if GNU version is available before using it, otherwise use the XSI compliant version. Signed-off-by: Khem Raj Signed-off-by: Kamalesh Babulal Signed-off-by: Tom Hromatka TJH: Minor formatting change so that the line doesn't exceed 100 chars (cherry picked from commit 942ef655237b90909edf53eafd121842cdc07ce1) --- diff --git a/configure.ac b/configure.ac index f667474d..1ea331c3 100644 --- a/configure.ac +++ b/configure.ac @@ -207,6 +207,11 @@ AC_FUNC_REALLOC AC_FUNC_STAT AC_CHECK_FUNCS([getmntent hasmntopt memset mkdir rmdir strdup]) +orig_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -D_GNU_SOURCE" +AC_FUNC_STRERROR_R +CFLAGS="$orig_CFLAGS" + AC_SEARCH_LIBS( [fts_open], [fts], diff --git a/src/api.c b/src/api.c index 484b46ab..cea3efe1 100644 --- a/src/api.c +++ b/src/api.c @@ -4672,9 +4672,14 @@ const char *cgroup_strerror(int code) { int idx = code % ECGROUPNOTCOMPILED; - if (code == ECGOTHER) + if (code == ECGOTHER) { +#ifdef STRERROR_R_CHAR_P return strerror_r(cgroup_get_last_errno(), errtext, MAXLEN); - +#else + return strerror_r(cgroup_get_last_errno(), errtext, sizeof (errtext)) ? + "unknown error" : errtext; +#endif + } if (idx >= sizeof(cgroup_strerror_codes)/sizeof(cgroup_strerror_codes[0])) return "Invalid error code";