cache: Add co_include_event allowing caches to provide their own nl_cache_include() implementation
This commit is contained in:
parent
2e23491c50
commit
bd1e4d0384
|
@ -6,7 +6,7 @@
|
||||||
* License as published by the Free Software Foundation version 2.1
|
* License as published by the Free Software Foundation version 2.1
|
||||||
* of the License.
|
* 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_
|
#ifndef NETLINK_CACHE_API_H_
|
||||||
|
@ -18,6 +18,8 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef void (*change_func_t)(struct nl_cache *, struct nl_object *, int, void *);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup cache
|
* @ingroup cache
|
||||||
* @defgroup cache_api Cache Implementation
|
* @defgroup cache_api Cache Implementation
|
||||||
|
@ -225,6 +227,22 @@ struct nl_cache_ops
|
||||||
*/
|
*/
|
||||||
int (*co_event_filter)(struct nl_cache *, struct nl_object *obj);
|
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 */
|
/** Object operations */
|
||||||
struct nl_object_ops * co_obj_ops;
|
struct nl_object_ops * co_obj_ops;
|
||||||
|
|
||||||
|
|
|
@ -24,8 +24,6 @@ extern "C" {
|
||||||
|
|
||||||
struct nl_cache;
|
struct nl_cache;
|
||||||
|
|
||||||
typedef void (*change_func_t)(struct nl_cache *, struct nl_object *, int, void *);
|
|
||||||
|
|
||||||
/* Access Functions */
|
/* Access Functions */
|
||||||
extern int nl_cache_nitems(struct nl_cache *);
|
extern int nl_cache_nitems(struct nl_cache *);
|
||||||
extern int nl_cache_nitems_filter(struct nl_cache *,
|
extern int nl_cache_nitems_filter(struct nl_cache *,
|
||||||
|
|
|
@ -42,6 +42,10 @@ static int include_cb(struct nl_object *obj, struct nl_parser_param *p)
|
||||||
if (ops->co_event_filter(ca->ca_cache, obj) != NL_OK)
|
if (ops->co_event_filter(ca->ca_cache, obj) != NL_OK)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
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);
|
return nl_cache_include(ca->ca_cache, obj, ca->ca_change, ca->ca_change_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in New Issue