aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libstrongswan/utils/backtrace.c25
-rw-r--r--src/libstrongswan/utils/backtrace.h8
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);