diff options
Diffstat (limited to 'target/linux/generic-2.6/patches-2.6.27/950-revert_xt_sctp_simplify.patch')
-rw-r--r-- | target/linux/generic-2.6/patches-2.6.27/950-revert_xt_sctp_simplify.patch | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/target/linux/generic-2.6/patches-2.6.27/950-revert_xt_sctp_simplify.patch b/target/linux/generic-2.6/patches-2.6.27/950-revert_xt_sctp_simplify.patch new file mode 100644 index 0000000000..a4d9381b59 --- /dev/null +++ b/target/linux/generic-2.6/patches-2.6.27/950-revert_xt_sctp_simplify.patch @@ -0,0 +1,103 @@ +--- a/include/linux/netfilter/xt_sctp.h ++++ b/include/linux/netfilter/xt_sctp.h +@@ -37,54 +37,68 @@ + + #define SCTP_CHUNKMAP_SET(chunkmap, type) \ + do { \ +- (chunkmap)[type / bytes(u_int32_t)] |= \ ++ chunkmap[type / bytes(u_int32_t)] |= \ + 1 << (type % bytes(u_int32_t)); \ + } while (0) + + #define SCTP_CHUNKMAP_CLEAR(chunkmap, type) \ + do { \ +- (chunkmap)[type / bytes(u_int32_t)] &= \ ++ chunkmap[type / bytes(u_int32_t)] &= \ + ~(1 << (type % bytes(u_int32_t))); \ + } while (0) + + #define SCTP_CHUNKMAP_IS_SET(chunkmap, type) \ + ({ \ +- ((chunkmap)[type / bytes (u_int32_t)] & \ ++ (chunkmap[type / bytes (u_int32_t)] & \ + (1 << (type % bytes (u_int32_t)))) ? 1: 0; \ + }) + +-#define SCTP_CHUNKMAP_RESET(chunkmap) \ +- memset((chunkmap), 0, sizeof(chunkmap)) ++#define SCTP_CHUNKMAP_RESET(chunkmap) \ ++ do { \ ++ int i; \ ++ for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \ ++ chunkmap[i] = 0; \ ++ } while (0) + +-#define SCTP_CHUNKMAP_SET_ALL(chunkmap) \ +- memset((chunkmap), ~0U, sizeof(chunkmap)) ++#define SCTP_CHUNKMAP_SET_ALL(chunkmap) \ ++ do { \ ++ int i; \ ++ for (i = 0; i < ARRAY_SIZE(chunkmap); i++) \ ++ chunkmap[i] = ~0; \ ++ } while (0) + +-#define SCTP_CHUNKMAP_COPY(destmap, srcmap) \ +- memcpy((destmap), (srcmap), sizeof(srcmap)) ++#define SCTP_CHUNKMAP_COPY(destmap, srcmap) \ ++ do { \ ++ int i; \ ++ for (i = 0; i < ARRAY_SIZE(srcmap); i++) \ ++ destmap[i] = srcmap[i]; \ ++ } while (0) ++ ++#define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) \ ++({ \ ++ int i; \ ++ int flag = 1; \ ++ for (i = 0; i < ARRAY_SIZE(chunkmap); i++) { \ ++ if (chunkmap[i]) { \ ++ flag = 0; \ ++ break; \ ++ } \ ++ } \ ++ flag; \ ++}) + +-#define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) \ +- __sctp_chunkmap_is_clear((chunkmap), ARRAY_SIZE(chunkmap)) +-static inline bool +-__sctp_chunkmap_is_clear(const u_int32_t *chunkmap, unsigned int n) +-{ +- unsigned int i; +- for (i = 0; i < n; ++i) +- if (chunkmap[i]) +- return false; +- return true; +-} +- +-#define SCTP_CHUNKMAP_IS_ALL_SET(chunkmap) \ +- __sctp_chunkmap_is_all_set((chunkmap), ARRAY_SIZE(chunkmap)) +-static inline bool +-__sctp_chunkmap_is_all_set(const u_int32_t *chunkmap, unsigned int n) +-{ +- unsigned int i; +- for (i = 0; i < n; ++i) +- if (chunkmap[i] != ~0U) +- return false; +- return true; +-} ++#define SCTP_CHUNKMAP_IS_ALL_SET(chunkmap) \ ++({ \ ++ int i; \ ++ int flag = 1; \ ++ for (i = 0; i < ARRAY_SIZE(chunkmap); i++) { \ ++ if (chunkmap[i] != ~0) { \ ++ flag = 0; \ ++ break; \ ++ } \ ++ } \ ++ flag; \ ++}) + + #endif /* _XT_SCTP_H_ */ + |