summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/exception/example/errinfos.cpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
commit19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch)
tree42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/boost/libs/exception/example/errinfos.cpp
parentInitial commit. (diff)
downloadceph-upstream.tar.xz
ceph-upstream.zip
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/exception/example/errinfos.cpp')
-rw-r--r--src/boost/libs/exception/example/errinfos.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/boost/libs/exception/example/errinfos.cpp b/src/boost/libs/exception/example/errinfos.cpp
new file mode 100644
index 000000000..2b3cff1bc
--- /dev/null
+++ b/src/boost/libs/exception/example/errinfos.cpp
@@ -0,0 +1,53 @@
+//Copyright (c) 2006-2009 Emil Dotchevski and Reverge Studios, Inc.
+
+//Distributed under the Boost Software License, Version 1.0. (See accompanying
+//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+//This example demonstrates the intended use of various commonly used
+//error_info typedefs provided by Boost Exception.
+
+#include <boost/exception/errinfo_api_function.hpp>
+#include <boost/exception/errinfo_at_line.hpp>
+#include <boost/exception/errinfo_errno.hpp>
+#include <boost/exception/errinfo_file_handle.hpp>
+#include <boost/exception/errinfo_file_name.hpp>
+#include <boost/exception/errinfo_file_open_mode.hpp>
+#include <boost/exception/info.hpp>
+#include <boost/throw_exception.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/weak_ptr.hpp>
+#include <stdio.h>
+#include <errno.h>
+#include <exception>
+
+struct error : virtual std::exception, virtual boost::exception { };
+struct file_error : virtual error { };
+struct file_open_error: virtual file_error { };
+struct file_read_error: virtual file_error { };
+
+boost::shared_ptr<FILE>
+open_file( char const * file, char const * mode )
+ {
+ if( FILE * f=fopen(file,mode) )
+ return boost::shared_ptr<FILE>(f,fclose);
+ else
+ BOOST_THROW_EXCEPTION(
+ file_open_error() <<
+ boost::errinfo_api_function("fopen") <<
+ boost::errinfo_errno(errno) <<
+ boost::errinfo_file_name(file) <<
+ boost::errinfo_file_open_mode(mode) );
+ }
+
+size_t
+read_file( boost::shared_ptr<FILE> const & f, void * buf, size_t size )
+ {
+ size_t nr=fread(buf,1,size,f.get());
+ if( ferror(f.get()) )
+ BOOST_THROW_EXCEPTION(
+ file_read_error() <<
+ boost::errinfo_api_function("fread") <<
+ boost::errinfo_errno(errno) <<
+ boost::errinfo_file_handle(f) );
+ return nr;
+ }