/* go-strerror.c -- wrapper around XSI-compliant strerror_r. Copyright 2022 The Go Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. */ /* There are two version of strerror_r on GNU/Linux: a GNU-specific and an XSI-compliant version. The former version is only available on glibc. Since glibc 2.13, the XSI-compliant version is also provided by glibc if _GNU_SOURCE is not defined. Since the entirety of gofrontend is compiled with _GNU_SOURCE, this file exists to selectively undefine it and provides an alias to the XSI-compliant version of strerror_r(3). */ #if defined(__linux__) || defined(__gnu_hurd__) /* Force selection of XSI-compliant strerror_r by glibc. */ #undef XOPEN_SOURCE #define XOPEN_SOURCE 600 #undef _POSIX_C_SOURCE #define _POSIX_C_SOURCE 200112L #undef _GNU_SOURCE #endif /* defined(__linux__) || defined(__gnu_hurd__) */ #include #ifndef HAVE_STRERROR_R // Provided by go-nosys.c if not provided by libc itself. extern int strerror_r (int, char *, size_t); #endif int go_strerror (int errnum, char *buf, size_t buflen) { return strerror_r (errnum, buf, buflen); }