Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Kea
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
Operations
Operations
Incidents
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Sebastian Schrader
Kea
Commits
4c43c7d9
Commit
4c43c7d9
authored
May 02, 2012
by
Jelte Jansen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[1857] make other exceptions we define subs of isc::Exception as well
instead of std::exception
parent
373ef178
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
55 additions
and
28 deletions
+55
-28
src/lib/exceptions/exceptions.h
src/lib/exceptions/exceptions.h
+10
-0
src/lib/log/compiler/Makefile.am
src/lib/log/compiler/Makefile.am
+1
-0
src/lib/log/compiler/message.cc
src/lib/log/compiler/message.cc
+10
-8
src/lib/log/message_exception.h
src/lib/log/message_exception.h
+14
-7
src/lib/log/message_reader.cc
src/lib/log/message_reader.cc
+20
-13
No files found.
src/lib/exceptions/exceptions.h
View file @
4c43c7d9
...
...
@@ -197,6 +197,16 @@ public:
throw type(__FILE__, __LINE__, oss__.str().c_str(), param1); \
} while (1)
///
/// Similar as isc_throw, but allows the exception to have two additional
/// parameters (the stream/text goes first)
#define isc_throw_2(type, stream, param1, param2) \
do { \
std::ostringstream oss__; \
oss__ << stream; \
throw type(__FILE__, __LINE__, oss__.str().c_str(), param1, param2); \
} while (1)
}
#endif // __EXCEPTIONS_H
...
...
src/lib/log/compiler/Makefile.am
View file @
4c43c7d9
...
...
@@ -16,3 +16,4 @@ noinst_PROGRAMS = message
message_SOURCES
=
message.cc
message_LDADD
=
$(top_builddir)
/src/lib/log/liblog.la
message_LDADD
+=
$(top_builddir)
/src/lib/util/libutil.la
message_LDADD
+=
$(top_builddir)
/src/lib/exceptions/libexceptions.la
src/lib/log/compiler/message.cc
View file @
4c43c7d9
...
...
@@ -25,6 +25,8 @@
#include <time.h>
#include <unistd.h>
#include <exceptions/exceptions.h>
#include <util/filename.h>
#include <util/strutil.h>
...
...
@@ -325,8 +327,8 @@ writeHeaderFile(const string& file, const vector<string>& ns_components,
ofstream
hfile
(
header_file
.
fullName
().
c_str
());
if
(
hfile
.
fail
())
{
throw
MessageException
(
LOG_OPEN_OUTPUT_FAIL
,
header_file
.
fullName
()
,
strerror
(
errno
));
isc_throw_2
(
MessageException
,
LOG_OPEN_OUTPUT_FAIL
,
header_file
.
fullName
(),
strerror
(
errno
));
}
// Write the header preamble. If there is an error, we'll pick it up
...
...
@@ -359,8 +361,8 @@ writeHeaderFile(const string& file, const vector<string>& ns_components,
// Report errors (if any) and exit
if
(
hfile
.
fail
())
{
throw
MessageException
(
LOG_WRITE_ERROR
,
header_file
.
fullName
(),
strerror
(
errno
));
isc_throw_2
(
MessageException
,
LOG_WRITE_ERROR
,
header_file
.
fullName
(),
strerror
(
errno
));
}
hfile
.
close
();
...
...
@@ -425,8 +427,8 @@ writeProgramFile(const string& file, const vector<string>& ns_components,
ofstream
ccfile
(
program_file
.
fullName
().
c_str
());
if
(
ccfile
.
fail
())
{
throw
MessageException
(
LOG_OPEN_OUTPUT_FAIL
,
program_file
.
fullName
()
,
strerror
(
errno
));
isc_throw_2
(
MessageException
,
LOG_OPEN_OUTPUT_FAIL
,
program_file
.
fullName
(),
strerror
(
errno
));
}
// Write the preamble. If there is an error, we'll pick it up after
...
...
@@ -483,8 +485,8 @@ writeProgramFile(const string& file, const vector<string>& ns_components,
// Report errors (if any) and exit
if
(
ccfile
.
fail
())
{
throw
MessageException
(
LOG_WRITE_ERROR
,
program_file
.
fullName
(),
strerror
(
errno
));
isc_throw_2
(
MessageException
,
LOG_WRITE_ERROR
,
program_file
.
fullName
(),
strerror
(
errno
));
}
ccfile
.
close
();
...
...
src/lib/log/message_exception.h
View file @
4c43c7d9
...
...
@@ -15,12 +15,14 @@
#ifndef __MESSAGE_EXCEPTION_H
#define __MESSAGE_EXCEPTION_H
#include <exceptions/exceptions.h>
#include <log/message_types.h>
#include <stdexcept>
#include <string>
#include <vector>
#include <boost/lexical_cast.hpp>
#include <log/message_types.h>
namespace
isc
{
namespace
log
{
...
...
@@ -31,14 +33,16 @@ namespace log {
/// code and its arguments to be encapsulated in an exception and thrown
/// up the stack.
class
MessageException
:
public
std
::
e
xception
{
class
MessageException
:
public
isc
::
E
xception
{
public:
/// \brief Constructor
///
/// \param id Message identification.
/// \param lineno Line number on which error occurred (if > 0).
MessageException
(
MessageID
id
,
int
lineno
=
0
)
:
id_
(
id
)
MessageException
(
const
char
*
file
,
size_t
line
,
MessageID
id
,
int
lineno
=
0
)
:
isc
::
Exception
(
file
,
line
,
""
),
id_
(
id
)
{
if
(
lineno
>
0
)
{
args_
.
push_back
(
boost
::
lexical_cast
<
std
::
string
>
(
lineno
));
...
...
@@ -50,8 +54,9 @@ public:
/// \param id Message identification.
/// \param arg1 First message argument.
/// \param lineno Line number on which error occurred (if > 0).
MessageException
(
MessageID
id
,
const
std
::
string
&
arg1
,
int
lineno
=
0
)
:
id_
(
id
)
MessageException
(
const
char
*
file
,
size_t
line
,
MessageID
id
,
const
std
::
string
&
arg1
,
int
lineno
=
0
)
:
isc
::
Exception
(
file
,
line
,
""
),
id_
(
id
)
{
if
(
lineno
>
0
)
{
args_
.
push_back
(
boost
::
lexical_cast
<
std
::
string
>
(
lineno
));
...
...
@@ -65,8 +70,10 @@ public:
/// \param arg1 First message argument.
/// \param arg2 Second message argument.
/// \param lineno Line number on which error occurred (if > 0).
MessageException
(
MessageID
id
,
const
std
::
string
&
arg1
,
const
std
::
string
&
arg2
,
int
lineno
=
0
)
:
id_
(
id
)
MessageException
(
const
char
*
file
,
size_t
line
,
MessageID
id
,
const
std
::
string
&
arg1
,
const
std
::
string
&
arg2
,
int
lineno
=
0
)
:
isc
::
Exception
(
file
,
line
,
""
),
id_
(
id
)
{
if
(
lineno
>
0
)
{
args_
.
push_back
(
boost
::
lexical_cast
<
std
::
string
>
(
lineno
));
...
...
src/lib/log/message_reader.cc
View file @
4c43c7d9
...
...
@@ -48,7 +48,8 @@ MessageReader::readFile(const string& file, MessageReader::Mode mode) {
// Open the file.
ifstream
infile
(
file
.
c_str
());
if
(
infile
.
fail
())
{
throw
MessageException
(
LOG_INPUT_OPEN_FAIL
,
file
,
strerror
(
errno
));
isc_throw_2
(
MessageException
,
LOG_INPUT_OPEN_FAIL
,
file
,
strerror
(
errno
));
}
// Loop round reading it. As we process the file one line at a time,
...
...
@@ -65,7 +66,7 @@ MessageReader::readFile(const string& file, MessageReader::Mode mode) {
// Why did the loop terminate?
if
(
!
infile
.
eof
())
{
throw
MessageException
(
LOG_READ_ERROR
,
file
,
strerror
(
errno
));
isc_throw_2
(
MessageException
,
LOG_READ_ERROR
,
file
,
strerror
(
errno
));
}
infile
.
close
();
}
...
...
@@ -114,7 +115,8 @@ MessageReader::parseDirective(const std::string& text) {
}
else
{
// Unrecognised directive
throw
MessageException
(
LOG_UNRECOGNISED_DIRECTIVE
,
tokens
[
0
],
lineno_
);
isc_throw_2
(
MessageException
,
LOG_UNRECOGNISED_DIRECTIVE
,
tokens
[
0
],
lineno_
);
}
}
...
...
@@ -138,13 +140,14 @@ MessageReader::parsePrefix(const vector<string>& tokens) {
// and numeric characters (and underscores) and does not start with a
// digit.
if
(
invalidSymbol
(
prefix_
))
{
throw
MessageException
(
LOG_PREFIX_INVALID_ARG
,
prefix_
,
lineno_
);
isc_throw_2
(
MessageException
,
LOG_PREFIX_INVALID_ARG
,
prefix_
,
lineno_
);
}
}
else
{
// Too many arguments
throw
MessageException
(
LOG_PREFIX_EXTRA_ARGS
,
lineno_
);
isc_throw_1
(
MessageException
,
LOG_PREFIX_EXTRA_ARGS
,
lineno_
);
}
}
...
...
@@ -172,10 +175,10 @@ MessageReader::parseNamespace(const vector<string>& tokens) {
// Check argument count
if
(
tokens
.
size
()
<
2
)
{
throw
MessageException
(
LOG_NAMESPACE_NO_ARGS
,
lineno_
);
isc_throw_1
(
MessageException
,
LOG_NAMESPACE_NO_ARGS
,
lineno_
);
}
else
if
(
tokens
.
size
()
>
2
)
{
throw
MessageException
(
LOG_NAMESPACE_EXTRA_ARGS
,
lineno_
);
isc_throw_1
(
MessageException
,
LOG_NAMESPACE_EXTRA_ARGS
,
lineno_
);
}
...
...
@@ -187,12 +190,13 @@ MessageReader::parseNamespace(const vector<string>& tokens) {
"abcdefghijklmnopqrstuvwxyz"
"0123456789_:"
;
if
(
tokens
[
1
].
find_first_not_of
(
valid_chars
)
!=
string
::
npos
)
{
throw
MessageException
(
LOG_NAMESPACE_INVALID_ARG
,
tokens
[
1
],
lineno_
);
isc_throw_2
(
MessageException
,
LOG_NAMESPACE_INVALID_ARG
,
tokens
[
1
],
lineno_
);
}
// All OK - unless the namespace has already been set.
if
(
ns_
.
size
()
!=
0
)
{
throw
MessageException
(
LOG_DUPLICATE_NAMESPACE
,
lineno_
);
isc_throw_1
(
MessageException
,
LOG_DUPLICATE_NAMESPACE
,
lineno_
);
}
// Prefix has not been set, so set it and return success.
...
...
@@ -219,7 +223,7 @@ MessageReader::parseMessage(const std::string& text, MessageReader::Mode mode) {
// A line comprising just the message introducer is not valid.
if
(
text
.
size
()
==
1
)
{
throw
MessageException
(
LOG_NO_MESSAGE_ID
,
text
,
lineno_
);
isc_throw_2
(
MessageException
,
LOG_NO_MESSAGE_ID
,
text
,
lineno_
);
}
// Strip off the introducer and any leading space after that.
...
...
@@ -230,7 +234,8 @@ MessageReader::parseMessage(const std::string& text, MessageReader::Mode mode) {
if
(
first_delim
==
string
::
npos
)
{
// Just a single token in the line - this is not valid
throw
MessageException
(
LOG_NO_MESSAGE_TEXT
,
message_line
,
lineno_
);
isc_throw_2
(
MessageException
,
LOG_NO_MESSAGE_TEXT
,
message_line
,
lineno_
);
}
// Extract the first token into the message ID, preceding it with the
...
...
@@ -240,7 +245,8 @@ MessageReader::parseMessage(const std::string& text, MessageReader::Mode mode) {
string
ident
=
prefix_
+
message_line
.
substr
(
0
,
first_delim
);
if
(
prefix_
.
empty
())
{
if
(
invalidSymbol
(
ident
))
{
throw
MessageException
(
LOG_INVALID_MESSAGE_ID
,
ident
,
lineno_
);
isc_throw_2
(
MessageException
,
LOG_INVALID_MESSAGE_ID
,
ident
,
lineno_
);
}
}
isc
::
util
::
str
::
uppercase
(
ident
);
...
...
@@ -252,7 +258,8 @@ MessageReader::parseMessage(const std::string& text, MessageReader::Mode mode) {
// ?? This happens if there are trailing delimiters, which should not
// occur as we have stripped trailing spaces off the line. Just treat
// this as a single-token error for simplicity's sake.
throw
MessageException
(
LOG_NO_MESSAGE_TEXT
,
message_line
,
lineno_
);
isc_throw_2
(
MessageException
,
LOG_NO_MESSAGE_TEXT
,
message_line
,
lineno_
);
}
// Add the result to the dictionary and to the non-added list if the add to
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment