diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libstrongswan/utils/backtrace.c | 25 | ||||
-rw-r--r-- | src/libstrongswan/utils/backtrace.h | 8 |
2 files changed, 33 insertions, 0 deletions
diff --git a/src/libstrongswan/utils/backtrace.c b/src/libstrongswan/utils/backtrace.c index 3f3707b5a..f69bd1538 100644 --- a/src/libstrongswan/utils/backtrace.c +++ b/src/libstrongswan/utils/backtrace.c @@ -152,6 +152,30 @@ METHOD(backtrace_t, contains_function, bool, return FALSE; } +METHOD(backtrace_t, equals, bool, + private_backtrace_t *this, backtrace_t *other_public) +{ + private_backtrace_t *other = (private_backtrace_t*)other_public; + int i; + + if (this == other) + { + return TRUE; + } + if (this->frame_count != other->frame_count) + { + return FALSE; + } + for (i = 0; i < this->frame_count; i++) + { + if (this->frames[i] != other->frames[i]) + { + return FALSE; + } + } + return TRUE; +} + METHOD(backtrace_t, destroy, void, private_backtrace_t *this) { @@ -178,6 +202,7 @@ backtrace_t *backtrace_create(int skip) this->public = (backtrace_t) { .log = _log_, .contains_function = _contains_function, + .equals = _equals, .destroy = _destroy, }; diff --git a/src/libstrongswan/utils/backtrace.h b/src/libstrongswan/utils/backtrace.h index e8ccfc1bd..cf4d27770 100644 --- a/src/libstrongswan/utils/backtrace.h +++ b/src/libstrongswan/utils/backtrace.h @@ -50,6 +50,14 @@ struct backtrace_t { bool (*contains_function)(backtrace_t *this, char *function[], int count); /** + * Check two backtraces for equality. + * + * @param other backtrace to compare to this + * @return TRUE if backtraces are equal + */ + bool (*equals)(backtrace_t *this, backtrace_t *other); + + /** * Destroy a backtrace instance. */ void (*destroy)(backtrace_t *this); |