From 467d7bb64eb8e77304fc6c91f612ec7b8036e475 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Thu, 5 Apr 2012 10:13:24 +0300 Subject: [PATCH] Implement missing xkb_state_ref and add return value xkb_state_ref was missing. Also modify the _ref functions to return the object instead of being void. This is a useful idiom: struct my_object my_object_new(struct xkb_state *state) { [...] my_object->state = xkb_state_ref(state); [...] } Essentially "taking" a reference, such that you don't forget to increment it and it's one line less (see example in our own code). A case could also be made for _unref to return the object or NULL, but this is quite uncommon. Signed-off-by: Ran Benita [daniels: Updated for xkb_keymap changes.] --- include/xkbcommon/xkbcommon.h | 8 ++++---- src/alloc.c | 3 +-- src/context.c | 3 ++- src/state.c | 10 ++++++++-- src/xkbcomp/xkbcomp.c | 3 ++- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/include/xkbcommon/xkbcommon.h b/include/xkbcommon/xkbcommon.h index 45e98e4..1391437 100644 --- a/include/xkbcommon/xkbcommon.h +++ b/include/xkbcommon/xkbcommon.h @@ -247,7 +247,7 @@ xkb_context_include_path_get(struct xkb_context *context, unsigned int index); /** * Takes a new reference on an XKB context. */ -_X_EXPORT void +_X_EXPORT struct xkb_context * xkb_context_ref(struct xkb_context *context); /** @@ -315,7 +315,7 @@ xkb_map_new_from_string(struct xkb_context *context, /** * Takes a new reference on a keymap. */ -_X_EXPORT extern void +_X_EXPORT extern struct xkb_keymap * xkb_map_ref(struct xkb_keymap *xkb); /** @@ -412,9 +412,9 @@ _X_EXPORT struct xkb_state * xkb_state_new(struct xkb_keymap *xkb); /** - * Adds a reference to a state object, so it will not be freed until unref. + * Takes a new reference on a state object. */ -_X_EXPORT void +_X_EXPORT struct xkb_state * xkb_state_ref(struct xkb_state *state); /** diff --git a/src/alloc.c b/src/alloc.c index 52d7af2..a2a1330 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -266,8 +266,7 @@ XkbcAllocKeyboard(struct xkb_context *context) return NULL; xkb->refcnt = 1; - xkb_context_ref(context); - xkb->context = context; + xkb->context = xkb_context_ref(context); return xkb; } diff --git a/src/context.c b/src/context.c index cbad424..a2c8f56 100644 --- a/src/context.c +++ b/src/context.c @@ -158,10 +158,11 @@ xkb_context_include_path_get(struct xkb_context *context, unsigned int idx) /** * Take a new reference on the context. */ -void +struct xkb_context * xkb_context_ref(struct xkb_context *context) { context->refcnt++; + return context; } /** diff --git a/src/state.c b/src/state.c index 6a9505d..a9f748e 100644 --- a/src/state.c +++ b/src/state.c @@ -472,12 +472,18 @@ xkb_state_new(struct xkb_keymap *xkb) return NULL; ret->refcnt = 1; - ret->xkb = xkb; - xkb_map_ref(xkb); + ret->xkb = xkb_map_ref(xkb); return ret; } +struct xkb_state * +xkb_state_ref(struct xkb_state *state) +{ + state->refcnt++; + return state; +} + void xkb_state_unref(struct xkb_state *state) { diff --git a/src/xkbcomp/xkbcomp.c b/src/xkbcomp/xkbcomp.c index 9534232..7ff22e1 100644 --- a/src/xkbcomp/xkbcomp.c +++ b/src/xkbcomp/xkbcomp.c @@ -312,10 +312,11 @@ xkb_map_new_from_fd(struct xkb_context *context, return compile_keymap(context, file); } -void +struct xkb_keymap * xkb_map_ref(struct xkb_keymap *xkb) { xkb->refcnt++; + return xkb; } void