Samba uses -Wcast-qual to warn about casting away const. The kind of
coders who care about const correctness are likely to turn that option
on, so we should make sure it's compatible with cast_const().
#ifndef CCAN_CAST_H
#define CCAN_CAST_H
#include "config.h"
#ifndef CCAN_CAST_H
#define CCAN_CAST_H
#include "config.h"
#include <ccan/build_assert/build_assert.h>
/**
#include <ccan/build_assert/build_assert.h>
/**
-#define cast_const(type, expr) \
- ((type)(expr) \
- + BUILD_ASSERT_OR_ZERO(cast_const_compat1((expr), type)))
+#define cast_const(type, expr) \
+ ((type)((intptr_t)(expr) \
+ + BUILD_ASSERT_OR_ZERO(cast_const_compat1((expr), type))))
/**
* cast_const2 - remove a const qualifier from a pointer to a pointer.
/**
* cast_const2 - remove a const qualifier from a pointer to a pointer.
* This ensures that you are only removing the const qualifier from an
* expression. The expression must otherwise match @type.
*/
* This ensures that you are only removing the const qualifier from an
* expression. The expression must otherwise match @type.
*/
-#define cast_const2(type, expr) \
- ((type)(expr) \
- + BUILD_ASSERT_OR_ZERO(cast_const_compat2((expr), type)))
+#define cast_const2(type, expr) \
+ ((type)((intptr_t)(expr) \
+ + BUILD_ASSERT_OR_ZERO(cast_const_compat2((expr), type))))
/**
* cast_const3 - remove a const from a pointer to a pointer to a pointer..
/**
* cast_const3 - remove a const from a pointer to a pointer to a pointer..
* This ensures that you are only removing the const qualifier from an
* expression. The expression must otherwise match @type.
*/
* This ensures that you are only removing the const qualifier from an
* expression. The expression must otherwise match @type.
*/
-#define cast_const3(type, expr) \
- ((type)(expr) \
- + BUILD_ASSERT_OR_ZERO(cast_const_compat3((expr), type)))
+#define cast_const3(type, expr) \
+ ((type)((intptr_t)(expr) \
+ + BUILD_ASSERT_OR_ZERO(cast_const_compat3((expr), type))))