Introduce error_string() as a portable replacement for strerror_r()
This commit is contained in:
parent
f1130198e1
commit
25b4b526f4
@ -29,6 +29,7 @@ SOURCE=\
|
||||
base/base64.cc \
|
||||
base/endian_utils.cc \
|
||||
base/error_state.cc \
|
||||
base/error_string.cc \
|
||||
base/progress_monitor.cc \
|
||||
base/xml_utils.cc \
|
||||
block-cache/block_cache.cc \
|
||||
@ -98,6 +99,7 @@ CFLAGS+=-g -Wall -O3
|
||||
CXXFLAGS+=-g -Wall -fno-strict-aliasing
|
||||
CXXFLAGS+=@CXXOPTIMISE_FLAG@
|
||||
CXXFLAGS+=@CXXDEBUG_FLAG@
|
||||
CXXFLAGS+=@CXX_STRERROR_FLAG@
|
||||
INCLUDES+=-I$(TOP_BUILDDIR) -I$(TOP_DIR) -I$(TOP_DIR)/thin-provisioning
|
||||
LIBS:=-lstdc++ -laio -lexpat
|
||||
INSTALL:=@INSTALL@
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include "base/error_state.h"
|
||||
#include "base/error_string.h"
|
||||
#include "base/nested_output.h"
|
||||
#include "caching/commands.h"
|
||||
#include "caching/metadata.h"
|
||||
@ -202,10 +203,7 @@ namespace {
|
||||
int r = ::stat(path.c_str(), &info);
|
||||
if (r) {
|
||||
ostringstream msg;
|
||||
char buffer[128], *ptr;
|
||||
|
||||
ptr = ::strerror_r(errno, buffer, sizeof(buffer));
|
||||
msg << path << ": " << ptr;
|
||||
msg << path << ": " << error_string(errno);
|
||||
throw runtime_error(msg.str());
|
||||
}
|
||||
|
||||
|
@ -42,6 +42,13 @@ AC_PROG_MAKE_SET
|
||||
AC_PROG_MKDIR_P
|
||||
AC_PROG_INSTALL
|
||||
|
||||
################################################################
|
||||
dnl -- Checks for functions.
|
||||
AC_FUNC_STRERROR_R
|
||||
if test x$ac_cv_func_strerror_r_char_p = xyes; then
|
||||
CXX_STRERROR_FLAG="-DSTRERROR_R_CHAR_P"
|
||||
fi
|
||||
|
||||
################################################################################
|
||||
dnl -- Prefix is /usr by default, the exec_prefix default is setup later
|
||||
AC_PREFIX_DEFAULT(/usr)
|
||||
@ -136,6 +143,7 @@ VERSION_PATCHLEVEL=`echo "$VER" | $AWK -F '[[(.]]' '{print $3}'`
|
||||
################################################################
|
||||
AC_SUBST(CXXDEBUG_FLAG)
|
||||
AC_SUBST(CXXOPTIMISE_FLAG)
|
||||
AC_SUBST(CXX_STRERROR_FLAG)
|
||||
AC_SUBST(INSTALL)
|
||||
AC_SUBST(prefix)
|
||||
AC_SUBST(RELEASE_DATE)
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include "base/error_state.h"
|
||||
#include "base/error_string.h"
|
||||
#include "base/nested_output.h"
|
||||
#include "era/commands.h"
|
||||
#include "era/writeset_tree.h"
|
||||
@ -186,10 +187,7 @@ namespace {
|
||||
int r = ::stat(path.c_str(), &info);
|
||||
if (r) {
|
||||
ostringstream msg;
|
||||
char buffer[128], *ptr;
|
||||
|
||||
ptr = ::strerror_r(errno, buffer, sizeof(buffer));
|
||||
msg << path << ": " << ptr;
|
||||
msg << path << ": " << error_string(errno);;
|
||||
throw runtime_error(msg.str());
|
||||
}
|
||||
|
||||
|
@ -18,13 +18,14 @@
|
||||
|
||||
#include "block.h"
|
||||
|
||||
#include "base/error_string.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <boost/bind.hpp>
|
||||
#include <stdexcept>
|
||||
@ -44,11 +45,8 @@ namespace {
|
||||
// FIXME: introduce a new exception for this, or at least lift this
|
||||
// to exception.h
|
||||
void syscall_failed(char const *call) {
|
||||
char buffer[128];
|
||||
char *msg = strerror_r(errno, buffer, sizeof(buffer));
|
||||
|
||||
ostringstream out;
|
||||
out << "syscall '" << call << "' failed: " << msg;
|
||||
out << "syscall '" << call << "' failed: " << base::error_string(errno);;
|
||||
throw runtime_error(out.str());
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user