replace: use __xpg_strerror_r if available
authorMichael Tokarev <mjt@tls.msk.ru>
Fri, 7 Feb 2025 07:04:37 +0000 (10:04 +0300)
committerMichael Tokarev <mjt@tls.msk.ru>
Fri, 18 Apr 2025 10:02:55 +0000 (13:02 +0300)
Forwarded: no

In order to avoid linking libreplace, use __xpg_strerror_r
instead of rep_strerror_r

Gbp-Pq: Name replace-xpg-strerror.patch

lib/replace/replace.c
lib/replace/replace.h
lib/replace/wscript

index f7f26712614c18813f922a485e164fc5cd28a8dc..d6b1383c2ea20cea62a5c149cf173bb79dd190aa 100644 (file)
@@ -824,7 +824,7 @@ int rep_strerror_r(int errnum, char *buf, size_t buflen)
        strncpy(buf, s, buflen);
        return 0;
 }
-#elif (!defined(STRERROR_R_XSI_NOT_GNU))
+#elif (!defined(STRERROR_R_XSI_NOT_GNU)) && (!defined(HAVE___XPG_STRERROR_R))
 #undef strerror_r
 int rep_strerror_r(int errnum, char *buf, size_t buflen)
 {
index 3bd89dcad568ecd4d707cf32e3873e064aeb8fe8..65751ef2c5b4fad80cd31418bf95da0169a6c45f 100644 (file)
@@ -643,9 +643,14 @@ char *rep_get_current_dir_name(void);
 #endif
 
 #if (!defined(HAVE_STRERROR_R) || !defined(STRERROR_R_XSI_NOT_GNU))
+#if defined(HAVE___XPG_STRERROR_R)
+extern int __xpg_strerror_r (int, char *, size_t);
+#  define strerror_r __xpg_strerror_r
+#else
 #define strerror_r rep_strerror_r
 int rep_strerror_r(int errnum, char *buf, size_t buflen);
 #endif
+#endif
 
 #if !defined(HAVE_CLOCK_GETTIME)
 #define clock_gettime rep_clock_gettime
index 9c0cb7047f11904d57eca6498acb3a25524fe880..58f1f794726463a415675333a2d13eeafcebf2ab 100644 (file)
@@ -494,6 +494,7 @@ def configure(conf):
                         define = 'HAVE_BSD_STRTOLL',
                         )
     conf.CHECK_FUNCS('if_nameindex if_nametoindex strerror_r')
+    conf.CHECK_FUNCS('__xpg_strerror_r')
     conf.CHECK_FUNCS('syslog')
     conf.CHECK_FUNCS('gai_strerror get_current_dir_name')
     conf.CHECK_FUNCS('timegm getifaddrs freeifaddrs mmap setgroups syscall setsid')