dect
/
libnl
Archived
13
0
Fork 0

cache: Add co_include_event allowing caches to provide their own nl_cache_include() implementation

This commit is contained in:
Thomas Graf 2012-04-22 15:23:52 +02:00
parent 2e23491c50
commit bd1e4d0384
3 changed files with 24 additions and 4 deletions

View File

@ -6,7 +6,7 @@
* License as published by the Free Software Foundation version 2.1
* of the License.
*
* Copyright (c) 2003-2006 Thomas Graf <tgraf@suug.ch>
* Copyright (c) 2003-2012 Thomas Graf <tgraf@suug.ch>
*/
#ifndef NETLINK_CACHE_API_H_
@ -18,6 +18,8 @@
extern "C" {
#endif
typedef void (*change_func_t)(struct nl_cache *, struct nl_object *, int, void *);
/**
* @ingroup cache
* @defgroup cache_api Cache Implementation
@ -225,6 +227,22 @@ struct nl_cache_ops
*/
int (*co_event_filter)(struct nl_cache *, struct nl_object *obj);
/**
* The function registered under this callback is called when an
* object formed from a notification event needs to be included in
* a cache.
*
* For each modified object, the change callback \c change_cb must
* be called with the \c data argument provided.
*
* If no function is registered, the function nl_cache_include()
* will be used for this purpose.
*
* @see nl_cache_include()
*/
int (*co_include_event)(struct nl_cache *cache, struct nl_object *obj,
change_func_t change_cb, void *data);
/** Object operations */
struct nl_object_ops * co_obj_ops;

View File

@ -24,8 +24,6 @@ extern "C" {
struct nl_cache;
typedef void (*change_func_t)(struct nl_cache *, struct nl_object *, int, void *);
/* Access Functions */
extern int nl_cache_nitems(struct nl_cache *);
extern int nl_cache_nitems_filter(struct nl_cache *,

View File

@ -42,7 +42,11 @@ static int include_cb(struct nl_object *obj, struct nl_parser_param *p)
if (ops->co_event_filter(ca->ca_cache, obj) != NL_OK)
return 0;
return nl_cache_include(ca->ca_cache, obj, ca->ca_change, ca->ca_change_data);
if (ops->co_include_event)
return ops->co_include_event(ca->ca_cache, obj, ca->ca_change,
ca->ca_change_data);
else
return nl_cache_include(ca->ca_cache, obj, ca->ca_change, ca->ca_change_data);
}
static int event_input(struct nl_msg *msg, void *arg)