summaryrefslogtreecommitdiff
path: root/libgo/runtime/go-strerror.c
blob: 8ff5ffbdfecbcd496ec10cb989ee532e3df43532 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/* 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);
}