Module Name: src
Committed By: rtr
Date: Wed May 11 03:17:22 UTC 2016
Modified Files:
src/sys/lib/libkern: libkern.h
Log Message:
provide const versions of container_of macros.
discussed with riastradh@ by email
To generate a diff of this commit:
cvs rdiff -u -r1.122 -r1.123 src/sys/lib/libkern/libkern.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/lib/libkern/libkern.h
diff -u src/sys/lib/libkern/libkern.h:1.122 src/sys/lib/libkern/libkern.h:1.123
--- src/sys/lib/libkern/libkern.h:1.122 Mon May 2 19:18:29 2016
+++ src/sys/lib/libkern/libkern.h Wed May 11 03:17:22 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: libkern.h,v 1.122 2016/05/02 19:18:29 christos Exp $ */
+/* $NetBSD: libkern.h,v 1.123 2016/05/11 03:17:22 rtr Exp $ */
/*-
* Copyright (c) 1992, 1993
@@ -337,15 +337,22 @@ tolower(int ch)
*/
#ifdef __COVERITY__
#define __validate_container_of(PTR, TYPE, FIELD) 0
+#define __validate_const_container_of(PTR, TYPE, FIELD) 0
#else
#define __validate_container_of(PTR, TYPE, FIELD) \
(0 * sizeof((PTR) - &((TYPE *)(((char *)(PTR)) - \
offsetof(TYPE, FIELD)))->FIELD))
+#define __validate_const_container_of(PTR, TYPE, FIELD) \
+ (0 * sizeof((PTR) - &((const TYPE *)(((const char *)(PTR)) - \
+ offsetof(TYPE, FIELD)))->FIELD))
#endif
#define container_of(PTR, TYPE, FIELD) \
((TYPE *)(((char *)(PTR)) - offsetof(TYPE, FIELD)) \
+ __validate_container_of(PTR, TYPE, FIELD))
+#define const_container_of(PTR, TYPE, FIELD) \
+ ((const TYPE *)(((const char *)(PTR)) - offsetof(TYPE, FIELD)) \
+ + __validate_const_container_of(PTR, TYPE, FIELD))
#define MTPRNG_RLEN 624
struct mtprng_state {