Unified multiple definitions of container_of() macro.

Removed duplicate definitions of the container_of() macro and
refactored sources to use the single implementation.

Signed-off-by: Jon A. Cruz <jonc@osg.samsung.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
This commit is contained in:
Jon Cruz
2015-06-15 15:37:10 -07:00
committed by Bryce Harrington
parent d618f688d5
commit 867d50eea7
29 changed files with 64 additions and 12 deletions
+1 -4
View File
@@ -39,10 +39,7 @@
#include <wayland-util.h>
#include "config-parser.h"
#define container_of(ptr, type, member) ({ \
const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
#include "helpers.h"
struct weston_config_entry {
char *key;
+37
View File
@@ -52,6 +52,43 @@ extern "C" {
#define MIN(x,y) (((x) < (y)) ? (x) : (y))
#endif
/**
* Returns a pointer the the containing struct of a given member item.
*
* To demonstrate, the following example retrieves a pointer to
* `example_container` given only its `destroy_listener` member:
*
* @code
* struct example_container {
* struct wl_listener destroy_listener;
* // other members...
* };
*
* void example_container_destroy(struct wl_listener *listener, void *data)
* {
* struct example_container *ctr;
*
* ctr = wl_container_of(listener, ctr, destroy_listener);
* // destroy ctr...
* }
* @endcode
*
* @param ptr A valid pointer to the contained item.
*
* @param type A pointer to the type of content that the list item
* stores. Type does not need be a valid pointer; a null or
* an uninitialised pointer will suffice.
*
* @param member The named location of ptr within the sample type.
*
* @return The container for the specified pointer.
*/
#ifndef container_of
#define container_of(ptr, type, member) ({ \
const __typeof__( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
#endif
#ifdef __cplusplus
}
#endif