| /* 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 <string.h> |
| |
| #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); |
| } |