+#include "filter.h"
+#include "number_set.h"
+#include "xstring.h"
+
+
+/**
+ * Checks whether a @-separated personality specification suffix is present.
+ * Personality suffix is a one of strings stored in personality_designators
+ * array.
+ *
+ * @param[in] s Specification string to check.
+ * @param[out] p Where to store personality number if it is found.
+ * @return If personality is found, the provided string is copied without
+ * suffix and returned as a result (callee should de-alllocate it
+ * with free() after use), and personality number is written to p.
+ * Otherwise, NULL is returned and p is untouched.
+ */
+static char *
+qualify_syscall_separate_personality(const char *s, unsigned int *p)
+{
+ char *pos = strchr(s, '@');
+
+ if (!pos)
+ return NULL;
+
+ for (unsigned int i = 0; i < SUPPORTED_PERSONALITIES; i++) {
+ if (!strcmp(pos + 1, personality_designators[i])) {
+ *p = i;
+ return xstrndup(s, pos - s);
+ }
+ }
+
+ error_msg_and_help("incorrect personality designator '%s'"
+ " in qualification '%s'", pos + 1, s);
+}
+
+static bool
+qualify_syscall_number_personality(int n, unsigned int p,
+ struct number_set *set)
+{
+ if ((unsigned int) n >= nsyscall_vec[p])
+ return false;
+
+ add_number_to_set_array(n, set, p);
+
+ return true;
+}
+