diff options
author | Jeff Mahoney <jeffm@suse.com> | 2013-08-26 12:20:59 -0400 |
---|---|---|
committer | Jeff Mahoney <jeffm@suse.com> | 2013-08-26 19:00:03 -0400 |
commit | dd29f49a6c4e241b055175f29e17ee2fe8457fcd (patch) | |
tree | fe6cc84eec923b0f475dc7cefa6bc1919405df61 | |
parent | a1623ca6b3e7173cb8b359ac1908f63a9cf091a9 (diff) | |
download | reiserfsprogs-dd29f49a6c4e241b055175f29e17ee2fe8457fcd.tar.gz |
sparse: move bitops functions to include/misc.h
The bitops functions were declared as 'extern inline' in include/misc.h but
weren't actually defined there. They were also defined as inline in
lib/misc.c, which can't actually happen if they're used elsewhere.
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
-rw-r--r-- | include/misc.h | 144 | ||||
-rw-r--r-- | lib/misc.c | 135 |
2 files changed, 132 insertions, 147 deletions
diff --git a/include/misc.h b/include/misc.h index 93d9f8f..49e7b2b 100644 --- a/include/misc.h +++ b/include/misc.h @@ -83,24 +83,144 @@ __u32 get_random(void); int user_confirmed(FILE * fp, char *q, char *yes); -extern inline int misc_set_bit(unsigned long long nr, void *addr); -extern inline int misc_clear_bit(unsigned long long nr, void *addr); -extern inline int misc_test_bit(unsigned long long nr, const void *addr); -extern inline unsigned long long misc_find_first_zero_bit(const void *vaddr, +/* Only le bitops operations are used. */ +static inline int misc_set_bit(unsigned long long nr, void *addr) +{ + __u8 *p, mask; + int retval; + + p = (__u8 *) addr; + p += nr >> 3; + mask = 1 << (nr & 0x7); + /*cli(); */ + retval = (mask & *p) != 0; + *p |= mask; + /*sti(); */ + return retval; +} + +static inline int misc_clear_bit(unsigned long long nr, void *addr) +{ + __u8 *p, mask; + int retval; + + p = (__u8 *) addr; + p += nr >> 3; + mask = 1 << (nr & 0x7); + /*cli(); */ + retval = (mask & *p) != 0; + *p &= ~mask; + /*sti(); */ + return retval; +} + +static inline int misc_test_bit(unsigned long long nr, const void *addr) +{ + __u8 *p, mask; + + p = (__u8 *) addr; + p += nr >> 3; + mask = 1 << (nr & 0x7); + return ((mask & *p) != 0); +} + +static inline unsigned long long misc_find_first_zero_bit(const void *vaddr, unsigned long long - size); -extern inline unsigned long long misc_find_next_zero_bit(const void *vaddr, + size) +{ + const __u8 *p = vaddr, *addr = vaddr; + unsigned long long res; + + if (!size) + return 0; + + size = (size >> 3) + ((size & 0x7) > 0); + while (*p++ == 255) { + if (--size == 0) + return (unsigned long long)(p - addr) << 3; + } + + --p; + for (res = 0; res < 8; res++) + if (!misc_test_bit(res, p)) + break; + return res + (p - addr) * 8; +} + +static inline unsigned long long misc_find_next_zero_bit(const void *vaddr, unsigned long long size, unsigned long long - offset); -extern inline unsigned long long misc_find_next_set_bit(const void *vaddr, + offset) +{ + const __u8 *addr = vaddr; + const __u8 *p = addr + (offset >> 3); + int bit = offset & 7; + unsigned long long res; + + if (offset >= size) + return size; + + if (bit) { + /* Look for zero in first char */ + for (res = bit; res < 8; res++) + if (!misc_test_bit(res, p)) + return res + (p - addr) * 8; + p++; + } + /* No zero yet, search remaining full bytes for a zero */ + res = misc_find_first_zero_bit(p, size - 8 * (p - addr)); + return res + (p - addr) * 8; +} + +static inline unsigned long long misc_find_first_set_bit(const void *vaddr, + unsigned long long + size) +{ + const __u8 *p = vaddr, *addr = vaddr; + unsigned long long res; + + if (!size) + return 0; + + size = (size >> 3) + ((size & 0x7) > 0); + while (*p++ == 0) { + if (--size == 0) + return (unsigned long long)(p - addr) << 3; + } + + --p; + for (res = 0; res < 8; res++) + if (misc_test_bit(res, p)) + break; + + return res + (p - addr) * 8; +} + +static inline unsigned long long misc_find_next_set_bit(const void *vaddr, unsigned long long size, unsigned long long - offset); -extern inline unsigned long long misc_find_first_set_bit(const void *vaddr, - unsigned long long - size); + offset) +{ + const __u8 *addr = vaddr; + const __u8 *p = addr + (offset >> 3); + int bit = offset & 7; + unsigned long long res; + + if (offset >= size) + return size; + + if (bit) { + /* Look for zero in first char */ + for (res = bit; res < 8; res++) + if (misc_test_bit(res, p)) + return res + (p - addr) * 8; + p++; + } + /* No set bit yet, search remaining full bytes for a 1 */ + res = misc_find_first_set_bit(p, size - 8 * (p - addr)); + return res + (p - addr) * 8; +} #define STAT_FIELD_H(Field, Type) \ inline Type misc_device_##Field(char *device); @@ -813,141 +813,6 @@ void clean_after_dma_check(int fd, dma_info_t *dma_info) close(dma_info->fd); } -/* Only le bitops operations are used. */ - -inline int misc_set_bit(unsigned long long nr, void *addr) -{ - __u8 *p, mask; - int retval; - - p = (__u8 *) addr; - p += nr >> 3; - mask = 1 << (nr & 0x7); - /*cli(); */ - retval = (mask & *p) != 0; - *p |= mask; - /*sti(); */ - return retval; -} - -inline int misc_clear_bit(unsigned long long nr, void *addr) -{ - __u8 *p, mask; - int retval; - - p = (__u8 *) addr; - p += nr >> 3; - mask = 1 << (nr & 0x7); - /*cli(); */ - retval = (mask & *p) != 0; - *p &= ~mask; - /*sti(); */ - return retval; -} - -inline int misc_test_bit(unsigned long long nr, const void *addr) -{ - __u8 *p, mask; - - p = (__u8 *) addr; - p += nr >> 3; - mask = 1 << (nr & 0x7); - return ((mask & *p) != 0); -} - -inline unsigned long long misc_find_first_zero_bit(const void *vaddr, - unsigned long long size) -{ - const __u8 *p = vaddr, *addr = vaddr; - unsigned long long res; - - if (!size) - return 0; - - size = (size >> 3) + ((size & 0x7) > 0); - while (*p++ == 255) { - if (--size == 0) - return (unsigned long long)(p - addr) << 3; - } - - --p; - for (res = 0; res < 8; res++) - if (!misc_test_bit(res, p)) - break; - return res + (p - addr) * 8; -} - -inline unsigned long long misc_find_next_zero_bit(const void *vaddr, - unsigned long long size, - unsigned long long offset) -{ - const __u8 *addr = vaddr; - const __u8 *p = addr + (offset >> 3); - int bit = offset & 7; - unsigned long long res; - - if (offset >= size) - return size; - - if (bit) { - /* Look for zero in first char */ - for (res = bit; res < 8; res++) - if (!misc_test_bit(res, p)) - return res + (p - addr) * 8; - p++; - } - /* No zero yet, search remaining full bytes for a zero */ - res = misc_find_first_zero_bit(p, size - 8 * (p - addr)); - return res + (p - addr) * 8; -} - -inline unsigned long long misc_find_first_set_bit(const void *vaddr, - unsigned long long size) -{ - const __u8 *p = vaddr, *addr = vaddr; - unsigned long long res; - - if (!size) - return 0; - - size = (size >> 3) + ((size & 0x7) > 0); - while (*p++ == 0) { - if (--size == 0) - return (unsigned long long)(p - addr) << 3; - } - - --p; - for (res = 0; res < 8; res++) - if (misc_test_bit(res, p)) - break; - - return res + (p - addr) * 8; -} - -inline unsigned long long misc_find_next_set_bit(const void *vaddr, - unsigned long long size, - unsigned long long offset) -{ - const __u8 *addr = vaddr; - const __u8 *p = addr + (offset >> 3); - int bit = offset & 7; - unsigned long long res; - - if (offset >= size) - return size; - - if (bit) { - /* Look for zero in first char */ - for (res = bit; res < 8; res++) - if (misc_test_bit(res, p)) - return res + (p - addr) * 8; - p++; - } - /* No set bit yet, search remaining full bytes for a 1 */ - res = misc_find_first_set_bit(p, size - 8 * (p - addr)); - return res + (p - addr) * 8; -} - int user_confirmed(FILE * fp, char *q, char *yes) { char *answer = 0; |