github.com/golang/gofrontend@v0.0.0-20240429183944-60f985a78526/libgo/runtime/go-strerror.c (about)

     1  /* go-strerror.c -- wrapper around XSI-compliant strerror_r.
     2  
     3     Copyright 2022 The Go Authors. All rights reserved.
     4     Use of this source code is governed by a BSD-style
     5     license that can be found in the LICENSE file.  */
     6  
     7  /* There are two version of strerror_r on GNU/Linux: a GNU-specific
     8     and an XSI-compliant version.  The former version is only available
     9     on glibc.  Since glibc 2.13, the XSI-compliant version is also
    10     provided by glibc if _GNU_SOURCE is not defined.  Since the
    11     entirety of gofrontend is compiled with _GNU_SOURCE, this file
    12     exists to selectively undefine it and provides an alias to the
    13     XSI-compliant version of strerror_r(3).  */
    14  
    15  #if defined(__linux__) || defined(__gnu_hurd__)
    16  
    17  /* Force selection of XSI-compliant strerror_r by glibc.  */
    18  #undef XOPEN_SOURCE
    19  #define XOPEN_SOURCE 600
    20  #undef _POSIX_C_SOURCE
    21  #define _POSIX_C_SOURCE 200112L
    22  #undef _GNU_SOURCE
    23  
    24  #endif /* defined(__linux__) || defined(__gnu_hurd__) */
    25  
    26  #include <string.h>
    27  
    28  #ifndef HAVE_STRERROR_R
    29  // Provided by go-nosys.c if not provided by libc itself.
    30  extern int strerror_r (int, char *, size_t);
    31  #endif
    32  
    33  int
    34  go_strerror (int errnum, char *buf, size_t buflen)
    35  {
    36    return strerror_r (errnum, buf, buflen);
    37  }