blob: 8ff5ffbdfecbcd496ec10cb989ee532e3df43532 [file] [log] [blame]
/* 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);
}