提交 8fe30b21 编写于 作者: D Daniel P. Berrangé

log: actually do substring matches with fnmatch

Historically we matched log filters with strstr(), and when switching to
fnmatch in cbb0fd3c, it was stated that
we would continue to match substrings, with "foo" being equivalent to
"*foo*". Unfortuntely I forget to provide the code to actually make that
happen. This fixes it to prepend and append "*". We don't bother to
check if the pattern already has a leading/trailing '*', because
"**foo**" will match the same as "*foo*".
Reviewed-by: NErik Skultety <eskultet@redhat.com>
Signed-off-by: NDaniel P. Berrangé <berrange@redhat.com>
上级 fe8a0679
......@@ -1409,6 +1409,7 @@ virLogFilterNew(const char *match,
{
virLogFilterPtr ret = NULL;
char *mdup = NULL;
size_t mlen = strlen(match);
virCheckFlags(VIR_LOG_STACK_TRACE, NULL);
......@@ -1418,9 +1419,16 @@ virLogFilterNew(const char *match,
return NULL;
}
if (VIR_STRDUP_QUIET(mdup, match) < 0)
/* We must treat 'foo' as equiv to '*foo*' for fnmatch
* todo substring matches, so add 2 extra bytes
*/
if (VIR_ALLOC_N_QUIET(mdup, mlen + 3) < 0)
return NULL;
mdup[0] = '*';
memcpy(mdup + 1, match, mlen);
mdup[mlen + 1] = '*';
if (VIR_ALLOC_QUIET(ret) < 0) {
VIR_FREE(mdup);
return NULL;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册