[PATCH] Introduce new filtering architecture
Nikolay Marchuk
marchuk.nikolay.a at gmail.com
Tue Jun 20 05:10:12 UTC 2017
On 20.06.2017 08:42, Dmitry V. Levin wrote:
> On Mon, Jun 19, 2017 at 08:37:32PM +0700, Nikolay Marchuk wrote:
>> On 19.06.2017 11:08, Eugene Syromiatnikov wrote:
>>>> + if (!strncmp(name, str, len)) {
>>> Not sure whether strncmp is better than strcmp here, since this function
>>> is not called with user-supplied str at all.
>>>
>>> Or, do you expect that these will work with user-supplied strings in the
>>> future?
>>>
>>> BTW, personally, I don't think that this needs to be string-keyed.
>>> Something as simple as
>>>
>>> enum filter_type_name {
>>> FILTER_TYPE_syscall,
>>> FILTER_TYPE_fd,
>>> };
>>>
>>> #define FILTER_TYPE(name) \
>>> [FILTER_TYPE_ ## name] = { \
>>> .parse_filter = parse_ ## name ## _filter, \
>>> .run_filter = run_ ## name ## _filter, \
>>> ._free_priv_data = free_ ## name ## _filter, \
>>> }
>>>
>>> static const struct filter_type {
>>> void* (*parse_filter)(const char *, const char *const);
>>> bool (*run_filter)(struct tcb *, void *);
>>> void (*_free_priv_data)(void *);
>>> } filter_types[] = {
>>> FILTER_TYPE(syscall),
>>> FILTER_TYPE(fd),
>>> };
>>>
>>> struct filter *
>>> add_filter_to_array(struct filter **filters, unsigned int *nfilters,
>>> enum filter_type_name name)
>>> {
>>> *filters = xreallocarray(*filters, ++(*nfilters),
>>> sizeof(struct filter));
>>> struct filter *filter = &((*filters)[*nfilters - 1]);
>>> filter->type = filters[name];
>>> return filter;
>>> }
>>>
>>> [...]
>>>
>>> #define create_filter(a, t) actual_create_filter(a, FILTER_TYPE_ ## t)
>>>
>>> [...]
>>>
>>> create_filter(action, fd);
>>>
>>> should also suffice.
>> I am going to use string-keyed filters and actions for new filtering
>> language parsing and enum is not sufficient.
>
> I'm not sure I follow this; how could it be that enum is not sufficient?
This functions will be later used for parsing of user-supplied expression.
If enum is used, I will need additional table to parse string to enum,
because preprocessor wrapper will not work for user-supplied strings.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 213 bytes
Desc: OpenPGP digital signature
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20170620/ee9da991/attachment.bin>
More information about the Strace-devel
mailing list