Merge remote-tracking branch 'jeremyhu/master'
This commit is contained in:
commit
856f80c8d7
|
@ -137,6 +137,7 @@ AC_CHECK_HEADERS([fcntl.h stdlib.h string.h unistd.h dlfcn.h stropts.h fnmatch.h
|
||||||
|
|
||||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||||
AC_C_CONST
|
AC_C_CONST
|
||||||
|
AC_C_TYPEOF
|
||||||
AC_C_BIGENDIAN([ENDIAN="X_BIG_ENDIAN"], [ENDIAN="X_LITTLE_ENDIAN"])
|
AC_C_BIGENDIAN([ENDIAN="X_BIG_ENDIAN"], [ENDIAN="X_LITTLE_ENDIAN"])
|
||||||
|
|
||||||
AC_CHECK_SIZEOF([unsigned long])
|
AC_CHECK_SIZEOF([unsigned long])
|
||||||
|
|
|
@ -423,6 +423,9 @@
|
||||||
/* Define to 64-bit byteswap macro */
|
/* Define to 64-bit byteswap macro */
|
||||||
#undef bswap_64
|
#undef bswap_64
|
||||||
|
|
||||||
|
/* Define to 1 if typeof works with your compiler. */
|
||||||
|
#undef HAVE_TYPEOF
|
||||||
|
|
||||||
/* The compiler supported TLS storage class, prefering initial-exec if tls_model is supported */
|
/* The compiler supported TLS storage class, prefering initial-exec if tls_model is supported */
|
||||||
#undef TLS
|
#undef TLS
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
#ifndef _XORG_LIST_H_
|
#ifndef _XORG_LIST_H_
|
||||||
#define _XORG_LIST_H_
|
#define _XORG_LIST_H_
|
||||||
|
|
||||||
|
#include <stddef.h> /* offsetof() */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file Classic doubly-link circular list implementation.
|
* @file Classic doubly-link circular list implementation.
|
||||||
* For real usage examples of the linked list, see the file test/list.c
|
* For real usage examples of the linked list, see the file test/list.c
|
||||||
|
@ -232,7 +234,7 @@ xorg_list_is_empty(struct xorg_list *head)
|
||||||
*/
|
*/
|
||||||
#ifndef container_of
|
#ifndef container_of
|
||||||
#define container_of(ptr, type, member) \
|
#define container_of(ptr, type, member) \
|
||||||
(type *)((char *)(ptr) - (char *) &((type *)0)->member)
|
(type *)((char *)(ptr) - offsetof(type, member))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -271,9 +273,20 @@ xorg_list_is_empty(struct xorg_list *head)
|
||||||
#define xorg_list_last_entry(ptr, type, member) \
|
#define xorg_list_last_entry(ptr, type, member) \
|
||||||
xorg_list_entry((ptr)->prev, type, member)
|
xorg_list_entry((ptr)->prev, type, member)
|
||||||
|
|
||||||
|
#ifdef HAVE_TYPEOF
|
||||||
|
#define __container_of(ptr, sample, member) \
|
||||||
|
container_of(ptr, typeof(*sample), member)
|
||||||
|
#else
|
||||||
|
/* This implementation of __container_of has undefined behavior according
|
||||||
|
* to the C standard, but it works in many cases. If your compiler doesn't
|
||||||
|
* support typeof() and fails with this implementation, please try a newer
|
||||||
|
* compiler.
|
||||||
|
*/
|
||||||
#define __container_of(ptr, sample, member) \
|
#define __container_of(ptr, sample, member) \
|
||||||
(void *)((char *)(ptr) \
|
(void *)((char *)(ptr) \
|
||||||
- ((char *)&(sample)->member - (char *)(sample)))
|
- ((char *)&(sample)->member - (char *)(sample)))
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loop through the list given by head and set pos to struct in the list.
|
* Loop through the list given by head and set pos to struct in the list.
|
||||||
*
|
*
|
||||||
|
|
|
@ -137,7 +137,7 @@ static void
|
||||||
test_xorg_list_del(void)
|
test_xorg_list_del(void)
|
||||||
{
|
{
|
||||||
struct parent parent = { 0 };
|
struct parent parent = { 0 };
|
||||||
struct child child[3];
|
struct child child[2];
|
||||||
struct child *c;
|
struct child *c;
|
||||||
|
|
||||||
xorg_list_init(&parent.children);
|
xorg_list_init(&parent.children);
|
||||||
|
@ -178,8 +178,8 @@ test_xorg_list_del(void)
|
||||||
xorg_list_add(&child[0].node, &parent.children);
|
xorg_list_add(&child[0].node, &parent.children);
|
||||||
xorg_list_del(&parent.children);
|
xorg_list_del(&parent.children);
|
||||||
assert(xorg_list_is_empty(&parent.children));
|
assert(xorg_list_is_empty(&parent.children));
|
||||||
|
assert(!xorg_list_is_empty(&child[0].node));
|
||||||
assert(!xorg_list_is_empty(&child[1].node));
|
assert(!xorg_list_is_empty(&child[1].node));
|
||||||
assert(!xorg_list_is_empty(&child[2].node));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue