Fix test_and_set_bit() as well as test_and_clear_bit().

(Logical change 1.56)
edge.strict_endians
cantab.net!aia21 2002-12-26 14:00:31 +00:00
parent de1ed338e6
commit 7781c8f5df
1 changed files with 18 additions and 6 deletions

View File

@ -43,13 +43,25 @@
#endif
/*
* Simple bit operation macros.
* Simple bit operation macros. NOTE: These are NOT atomic.
*/
#define test_bit(bit, var) ((var) & (1 << (bit)))
#define set_bit(bit, var) (var) |= 1 << (bit)
#define clear_bit(bit, var) (var) &= ~(1 << (bit))
#define test_and_set_bit(bit, var) (test_bit(bit, var), set_bit(bit, var))
#define test_and_clear_bit(bit, var) (test_bit(bit, var), clear_bit(bit, var))
#define test_bit(bit, var) ((var) & (1 << (bit)))
#define set_bit(bit, var) (var) |= 1 << (bit)
#define clear_bit(bit, var) (var) &= ~(1 << (bit))
#define test_and_set_bit(bit, var) \
({ \
const BOOL old_state = test_bit(bit, var); \
set_bit(bit, var); \
old_state; \
})
#define test_and_clear_bit(bit, var) \
({ \
const BOOL old_state = test_bit(bit, var); \
clear_bit(bit, var); \
old_state; \
})
#endif /* defined _NTFS_SUPPORT_H */