| /* 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); | 
 | } |