This file is indexed.

/usr/include/ui-utilcpp/Exception.hpp is in libui-utilcpp-dev 1.8.3-3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
/**
 * @file
 */
#ifndef UI_UTIL_EXCEPTION_HPP
#define UI_UTIL_EXCEPTION_HPP

// STDC++
#include <string>
#include <cerrno>

// C++ libraries
#include <ui-utilcpp/Text.hpp>

#define UI_SOURCEDEBUG __FILE__ + std::string(":") + UI::Util::tos(__LINE__)

/** @name Throw macro shortcuts with automatic debug info and optimized errno handling.
 *
 * @{ */
/** @brief Throw non-code exception. */
#define UI_THROW(desc)                  throw Exception(desc, UI_SOURCEDEBUG)
/** @brief Throw non-code exception w/ errno handling. */
#define UI_THROW_ERRNO(call)            { int const myErrno(errno); throw Exception(call + Exception::Errno_, UI_SOURCEDEBUG, myErrno); }
/** @brief Throw code exception. */
#define UI_THROW_CODE(code, desc)       throw Exception(code, desc, UI_SOURCEDEBUG)
/** @brief Throw code exception w/ errno handling. */
#define UI_THROW_CODE_ERRNO(code, call) { int const myErrno(errno); throw Exception(code, call + Exception::Errno_, UI_SOURCEDEBUG, myErrno); }
/** @} */

/** @brief Namespace for any Schlund+Partner C++ code. */
namespace UI {

/** @brief Generic exception class for namespace UI.
 *
 * @section Exception_HowTo Exception HOWTO
 *
 * @subsection Exception_HowTo_U User's guide (exception handlers)
 *
 * - For standard (no "code" support), just use intuitively. For
 * example, <em>UI::Exception</em> catches any S+P Exception,
 * <em>UI::Util::Exception</em> any S+P exception in namespace UI::Util,
 * <em>UI::Util::File::Exception</em> any exception of class UI::Util::File.
 *
 * - Any time you want to catch <em>code exceptions</em>, you will
 * always need a dedicated handler (knowing the code semantics)
 * anyway. For example, knowing <em>UI::Util::File::Exception</em> is
 * a code exception, catch exactly that exception and evaluate further
 * using getCode().
 *
 * @subsection Exception_HowTo_D Developer's guide (write own exception classes)
 *
 * @subsubsection Exception_HowTo_D_P Preliminaries
 *
 * - In any context (namespace or class), a class "Exception" should
 * be available, using UI::Exception or UI::CodeException constructor
 * syntax; this is needed so UI_THROW* macros can be used.
 *
 * - Note that the "interfacing" exception class is always called
 * "Exception", even if it is a code exception. The
 * <em>CodeException</em> template is only used to ease writing
 * classes w/ dedicated code number support.
 *
 * - Be sure that your exception class always inherits the next class
 * "context up". For example UI::Util::Sys::Exception must inherit
 * from UI::Util::Exception, <b>not</b> UI::Exception; else a handler
 * on UI::Util::Exception would not catch UI::Util::Sys::Exception,
 * which is against intuitive use of exceptions. The same holds true
 * for mere typedefs.
 *
 * @subsubsection Exception_HowTo_D_E Quickstart
 *
 * Let's say, you invented a new namespace "UI::Humbug".
 *
 * - In the simplest case, if you don't need support to catch down all
 * UI::Humbug's exceptions, you may just use UI_THROW*-macros w/o any
 * additional code.
 *
 * - Alternatively, if UI::Humbug needs a generic exception class so
 * we can catch it all down, just use the very same source code for
 * UI::Util::Exception in your new namespace.
 *
 * - Optionally, if you want to ease the use of code exceptions in
 * your namespace for sub-contexts, just use the very code for
 * the UI::Util::CodeException template in your namespace.
 *
 * - Alernatively, if your new namespace's generic exception class is
 * to be a code exception itself, inherit UI::Humbug::Exception from
 * UI::CodeException<HumbugCode>.
 *
 * The above three points typically go into "Exception.hpp" of your project.
 *
 * - Optionally, you can now add exception classes for sub-contexts
 * (sub-namespaces or classes) if needed.
 *
 * - To throw exceptions, always use macros UI_THROW, UI_THROW_CODE,
 * UI_THROW_ERRNO or UI_THROW_CODE_ERRNO.
 *
 */
class Exception: public std::exception
{
protected:
	/** @name These constants may be used for description default values for derived classes.
	 * @{ */
	static std::string const NoWhatGiven_;
	static std::string const NoDebugGiven_;
	/** @} */

public:
	/** @brief If this string is used in a "what" description message, it will be replaced by an errno error string. */
	static std::string const Errno_;

	/** @brief Construct with description text.
	 *
	 * @note You usually <b>do not call this constructor directly</b>, but instead
	 *       always use one of the UI_THROW_* macros above.
	 *
	 * @param what  Exception description. Errno_ text in string will be replaced with error string.
	 * @param debug Any debug text.
	 * @param errNo Dedicated "errno" error number.
	 */
	Exception(std::string const & what=NoWhatGiven_, std::string const & debug=NoDebugGiven_, int const & errNo=0);
	virtual ~Exception() throw();

	/** @name Get exception information.
	 * @{ */
	char        const * what() const throw();
	int         const & getErrno() const;
	std::string         getDebug() const;
	/** @} */

private:
	std::string const what_;
	std::string const debug_;
	int const errNo_;
};

/** @brief Adding code facility to Exception. */
template <typename Code = int>
class CodeException: public Exception
{
public:
	CodeException(Code const & code, std::string const & what=NoWhatGiven_, std::string const & debug=NoDebugGiven_, int const & errNo=0)
		:UI::Exception(what, debug, errNo)
		,code_(code)
	{};
	Code const & getCode() const { return code_; }
private:
	Code const code_;
};

/** @brief Namespace for ui-utilcpp. */
namespace Util {

/** @brief Generic exception class for namespace UI::Util. */
class Exception: public UI::Exception
{
public:
	Exception(std::string const & what=NoWhatGiven_, std::string const & debug=NoDebugGiven_, int const & errNo=0)
		:UI::Exception(what, debug, errNo) {}
	virtual ~Exception() throw() {};
};

/** @brief Adding code facility to Exception. */
template <typename Code = int>
class CodeException: public Exception
{
public:
	CodeException(Code const & code, std::string const & what=NoWhatGiven_, std::string const & debug=NoDebugGiven_, int const & errNo=0)
		:Exception(what, debug, errNo)
		,code_(code)
	{};
	Code const & getCode() const { return code_; }
private:
	Code const code_;
};

}}
#endif