Added ZERO_DATA() and COUNT_OF() macros to common.h (XCC)
authorDavide Libenzi <dlibenzi@google.com>
Fri, 27 Nov 2015 17:16:07 +0000 (09:16 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 16 Dec 2015 21:27:06 +0000 (16:27 -0500)
Added ZERO_DATA() and COUNT_OF() macros to common.h.
The ARRAY_SIZE(), when exported from ros/common.h, fights with other
userspace code redefining it.
So export it using COUNT_OF(), and make ARRAY_SIZE() use COUNT_OF().

Reinstall your kernel headers.

Signed-off-by: Davide Libenzi <dlibenzi@google.com>
[XCC / reinstall notice]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/include/ros/common.h

index 84f9523..6e8613e 100644 (file)
@@ -6,6 +6,7 @@
 #include <stdint.h>
 #include <sys/types.h>
 #include <stdbool.h>
+#include <string.h>
 
 typedef uintptr_t physaddr_t;
 typedef long intreg_t;
@@ -37,6 +38,8 @@ typedef unsigned long uintreg_t;
 #define is_defined__(comma, value) is_defined___(comma 1, 0)
 #define is_defined___(_, v, ...) v
 
+#define COUNT_OF(x) (sizeof((x))/sizeof((x)[0]))
+
 // Efficient min and max operations
 #ifdef ROS_KERNEL /* Glibc or other user libs have their own */
 #define MIN(_a, _b)                                            \
@@ -63,10 +66,12 @@ typedef unsigned long uintreg_t;
 /* Will return false for 0.  Debatable, based on what you want. */
 #define IS_PWR2(x) ((x) && !((x) & (x - 1)))
 
-#define ARRAY_SIZE(x) (sizeof((x))/sizeof((x)[0]))
+#define ARRAY_SIZE(x) COUNT_OF(x)
 
 #endif
 
+#define ZERO_DATA(s) memset(&(s), 0, sizeof(s))
+
 /* Rounding operations (efficient when n is a power of 2)
  * Round down to the nearest multiple of n.
  * The compiler should compile out the branch.  This is needed for 32 bit, so