Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/lib/libkern tricks with sizeof() make coverity complain.



details:   https://anonhg.NetBSD.org/src/rev/7377bdf7554b
branches:  trunk
changeset: 338072:7377bdf7554b
user:      christos <christos%NetBSD.org@localhost>
date:      Sat May 09 18:49:36 2015 +0000

description:
tricks with sizeof() make coverity complain.

diffstat:

 sys/lib/libkern/libkern.h |  17 ++++++++++++-----
 1 files changed, 12 insertions(+), 5 deletions(-)

diffs (33 lines):

diff -r 9b22d3fdb924 -r 7377bdf7554b sys/lib/libkern/libkern.h
--- a/sys/lib/libkern/libkern.h Sat May 09 18:48:14 2015 +0000
+++ b/sys/lib/libkern/libkern.h Sat May 09 18:49:36 2015 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: libkern.h,v 1.118 2015/04/20 15:22:17 riastradh Exp $  */
+/*     $NetBSD: libkern.h,v 1.119 2015/05/09 18:49:36 christos Exp $   */
 
 /*-
  * Copyright (c) 1992, 1993
@@ -329,12 +329,19 @@
  *
  * The 0*sizeof((PTR) - ...) causes the compiler to warn if the type of
  * *fp does not match the type of struct bar::b_foo.
+ * We skip the validation for coverity runs to avoid warnings.
  */
+#ifdef __COVERITY__
+#define __validate_container_of(PTR, TYPE, FIELD) 0
+#else
+#define __validate_container_of(PTR, TYPE, FIELD)                      \
+    (0 * sizeof((PTR) - &((TYPE *)(((char *)(PTR)) -                   \
+    offsetof(TYPE, FIELD)))->FIELD))
+#endif
+
 #define        container_of(PTR, TYPE, FIELD)                                  \
-       ((TYPE *)(((char *)(PTR)) - offsetof(TYPE, FIELD) +             \
-           0*sizeof((PTR) -                                            \
-               &((TYPE *)(((char *)(PTR)) -                            \
-                       offsetof(TYPE, FIELD)))->FIELD)))
+    ((TYPE *)(((char *)(PTR)) - offsetof(TYPE, FIELD))                 \
+       + __validate_container_of(PTR, TYPE, FIELD))
 
 #define        MTPRNG_RLEN             624
 struct mtprng_state {



Home | Main Index | Thread Index | Old Index