text: //===- llvm37/Support/Unix/Unix.h - Common Unix Include File -------*- C++ -*-===//
  //
  //                     The LLVM37 Compiler Infrastructure
  //
  // This file is distributed under the University of Illinois Open Source
  // License. See LICENSE.TXT for details.
  //
  //===----------------------------------------------------------------------===//
  //
  // This file defines things specific to Unix implementations.
  //
  //===----------------------------------------------------------------------===//
  
  #ifndef LLVM37_LIB_SUPPORT_UNIX_UNIX_H
  #define LLVM37_LIB_SUPPORT_UNIX_UNIX_H
  
  //===----------------------------------------------------------------------===//
  //=== WARNING: Implementation here must contain only generic UNIX code that
  //===          is guaranteed to work on all UNIX variants.
  //                                                                           //
  ///////////////////////////////////////////////////////////////////////////////
  
  #include "llvm37/Config/config.h"     // Get autoconf configuration settings
  #include "llvm37/Support/Errno.h"
  #include <algorithm>
  #include <assert.h>
  #include <cerrno>
  #include <cstdio>
  #include <cstdlib>
  #include <cstring>
  #include <string>
  #include <sys/types.h>
  
  #ifdef HAVE_UNISTD_H
  #include <unistd.h>
  #endif
  
  #ifdef HAVE_SYS_PARAM_H
  #include <sys/param.h>
  #endif
  
  #ifdef HAVE_SYS_TIME_H
  # include <sys/time.h>
  #endif
  #include <time.h>
  
  #ifdef HAVE_SYS_WAIT_H
  # include <sys/wait.h>
  #endif
  
  #ifdef HAVE_DLFCN_H
  # include <dlfcn.h>
  #endif
  
  #ifndef WEXITSTATUS
  # define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
  #endif
  
  #ifndef WIFEXITED
  # define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
  #endif
  
  /// This function builds an error message into \p ErrMsg using the \p prefix
  /// string and the Unix error number given by \p errnum. If errnum is -1, the
  /// default then the value of errno is used.
  /// @brief Make an error message
  ///
  /// If the error number can be converted to a string, it will be
  /// separated from prefix by ": ".
  static inline bool MakeErrMsg(
    std::string* ErrMsg, const std::string& prefix, int errnum = -1) {
    if (!ErrMsg)
      return true;
    if (errnum == -1)
      errnum = errno;
    *ErrMsg = prefix + ": " + llvm37::sys::StrError(errnum);
    return true;
  }
  
  #endif
  