static bool
qualify_syscall(const char *token, struct number_set *set)
{
+ bool ignore_fail = false;
+
+ while (*token == '?') {
+ token++;
+ ignore_fail = true;
+ }
if (*token >= '0' && *token <= '9')
- return qualify_syscall_number(token, set);
+ return qualify_syscall_number(token, set) || ignore_fail;
if (*token == '/')
- return qualify_syscall_regex(token + 1, set);
+ return qualify_syscall_regex(token + 1, set) || ignore_fail;
return qualify_syscall_class(token, set)
- || qualify_syscall_name(token, set);
+ || qualify_syscall_name(token, set)
+ || ignore_fail;
}
/*
or how to trace them. The format of the expression is:
.RS 15
.IP
-[\,\fIqualifier\/\fB=\fR][\fB!\fR]\,\fIvalue1\/\fR[\fB,\,\fIvalue2\/\fR]...
+[\,\fIqualifier\/\fB=\fR][\fB!\fR][\fB?\fR]\,\fIvalue1\/\fR[\fB,\fR[\fB?\fR]\,\fIvalue2\/\fR]...
.RE
.IP
where
.BR \-e "\ " trace "=!" open
means to trace every system call except
.BR open .
+Question mark before the syscall qualification allows suppression of error
+in case no syscalls matched the qualification provided.
In addition, the special values
.B all
and