37 lines
1.2 KiB
C
37 lines
1.2 KiB
C
/* 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);
|
|
}
|