Historically we matched log filters with strstr(), and when switching to
fnmatch in
cbb0fd3cfdc287f6f4653ef1f04a7cfb2ea51b27, 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: Erik Skultety <eskultet@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
{
virLogFilterPtr ret = NULL;
char *mdup = NULL;
+ size_t mlen = strlen(match);
virCheckFlags(VIR_LOG_STACK_TRACE, NULL);
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;