From 0e1bbd28f8e62e63bea081a00d72cb8b6a3155e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=A0=E4=B8=8D=E8=A6=81=E8=BF=87=E6=9D=A5=E5=95=8A?= <73388438+iiiuwioajdks@users.noreply.github.com> Date: Mon, 27 Mar 2023 00:29:30 +0800 Subject: [PATCH] Remove RzBitmap in favor of RzBitvector (#3433) --- librz/bin/format/dmp/dmp64.c | 12 ++--- librz/include/meson.build | 1 - librz/include/rz_util.h | 1 - librz/include/rz_util/rz_bitmap.h | 34 ------------ librz/util/bitmap.c | 89 ------------------------------- librz/util/meson.build | 1 - test/unit/meson.build | 1 - test/unit/test_bitmap.c | 36 ------------- 8 files changed, 6 insertions(+), 169 deletions(-) delete mode 100644 librz/include/rz_util/rz_bitmap.h delete mode 100644 librz/util/bitmap.c delete mode 100644 test/unit/test_bitmap.c diff --git a/librz/bin/format/dmp/dmp64.c b/librz/bin/format/dmp/dmp64.c index 282c351fba..3241872228 100644 --- a/librz/bin/format/dmp/dmp64.c +++ b/librz/bin/format/dmp/dmp64.c @@ -274,14 +274,14 @@ static int rz_bin_dmp64_init_bmp_pages(struct rz_bin_dmp64_obj_t *obj) { } ut64 paddr_base = obj->bmp_header->FirstPage; ut64 num_pages = obj->bmp_header->Pages; - RzBitmap *bitmap = rz_bitmap_new(num_pages); - rz_bitmap_set_bytes(bitmap, obj->bitmap, num_pages / 8); + RzBitVector *bitmap = rz_bv_new(num_pages); + rz_bv_set_from_bytes_le(bitmap, obj->bitmap, 0, num_pages); ut64 num_bitset = 0; bool create_new_page = true; dmp_page_desc *page; for (ut64 i = 0; i < num_pages; i++) { - if (!rz_bitmap_test(bitmap, i)) { + if (!rz_bv_get(bitmap, i)) { create_new_page = true; continue; } @@ -292,7 +292,7 @@ static int rz_bin_dmp64_init_bmp_pages(struct rz_bin_dmp64_obj_t *obj) { } page = RZ_NEW0(dmp_page_desc); if (!page) { - rz_bitmap_free(bitmap); + rz_bv_free(bitmap); return false; } if (UT64_MUL_OVFCHK(i, DMP_PAGE_SIZE)) { @@ -310,11 +310,11 @@ static int rz_bin_dmp64_init_bmp_pages(struct rz_bin_dmp64_obj_t *obj) { RZ_LOG_ERROR("The total present pages number (%" PFMT64u ") in the header " "does not match with the counted one (%" PFMT64u ").\n", obj->bmp_header->TotalPresentPages, num_bitset); - rz_bitmap_free(bitmap); + rz_bv_free(bitmap); return false; } - rz_bitmap_free(bitmap); + rz_bv_free(bitmap); return true; } diff --git a/librz/include/meson.build b/librz/include/meson.build index 1c69d06850..c1b721e892 100644 --- a/librz/include/meson.build +++ b/librz/include/meson.build @@ -66,7 +66,6 @@ rz_util_files = [ 'rz_util/rz_base64.h', 'rz_util/rz_base91.h', 'rz_util/rz_big.h', - 'rz_util/rz_bitmap.h', 'rz_util/rz_bitvector.h', 'rz_util/rz_buf.h', 'rz_util/rz_debruijn.h', diff --git a/librz/include/rz_util.h b/librz/include/rz_util.h index b57516ea76..647ba27e1b 100644 --- a/librz/include/rz_util.h +++ b/librz/include/rz_util.h @@ -33,7 +33,6 @@ #include "rz_util/rz_base64.h" #include "rz_util/rz_base91.h" #include "rz_util/rz_buf.h" -#include "rz_util/rz_bitmap.h" #include "rz_util/rz_bitvector.h" #include "rz_util/rz_time.h" #include "rz_util/rz_debruijn.h" diff --git a/librz/include/rz_util/rz_bitmap.h b/librz/include/rz_util/rz_bitmap.h deleted file mode 100644 index 0718741024..0000000000 --- a/librz/include/rz_util/rz_bitmap.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef RZ_BITMAP_H -#define RZ_BITMAP_H - -#include - -#if RZ_SYS_BITS == 4 -#define BITWORD_BITS_SHIFT 5 -#define RzBitword ut32 -#else -#define BITWORD_BITS_SHIFT 6 -#define RzBitword ut64 -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct rz_bitmap_t { - size_t length; - RzBitword *bitmap; -} RzBitmap; - -RZ_API RZ_OWN RzBitmap *rz_bitmap_new(size_t len); -RZ_API void rz_bitmap_set_bytes(RZ_NONNULL RzBitmap *b, RZ_NONNULL const ut8 *buf, size_t len); -RZ_API void rz_bitmap_free(RZ_NULLABLE RzBitmap *b); -RZ_API void rz_bitmap_set(RZ_NONNULL RzBitmap *b, size_t bit); -RZ_API void rz_bitmap_unset(RZ_NONNULL RzBitmap *b, size_t bit); -RZ_API int rz_bitmap_test(RZ_NONNULL RzBitmap *b, size_t bit); - -#ifdef __cplusplus -} -#endif - -#endif // RZ_BITMAP_H diff --git a/librz/util/bitmap.c b/librz/util/bitmap.c deleted file mode 100644 index 376cfe8570..0000000000 --- a/librz/util/bitmap.c +++ /dev/null @@ -1,89 +0,0 @@ -// SPDX-FileCopyrightText: 2017-2020 pancake -// SPDX-FileCopyrightText: 2017-2020 crowell -// SPDX-License-Identifier: LGPL-3.0-only - -#include - -#define BITMAP_TEST 0 - -#if RZ_SYS_BITS == 4 -#define bitword_read rz_read_le32 -#define bitword_write rz_write_le32 -#else -#define bitword_read rz_read_le64 -#define bitword_write rz_write_le64 -#endif - -#define BITWORD_BITS (sizeof(RzBitword) * 8) -#define BITWORD_BITS_MASK (BITWORD_BITS - 1) -#define BITWORD_MULT(bit) (((bit) + (BITWORD_BITS_MASK)) & ~(BITWORD_BITS_MASK)) -#define BITWORD_TEST(x, y) (((x) >> (y)) & 1) - -#define BITMAP_WORD_COUNT(bit) (BITWORD_MULT(bit) >> BITWORD_BITS_SHIFT) - -RZ_API RZ_OWN RzBitmap *rz_bitmap_new(size_t len) { - if (len < 1) { - return NULL; - } - - RzBitmap *b = RZ_NEW0(RzBitmap); - if (!b) { - return NULL; - } - - b->bitmap = calloc(BITMAP_WORD_COUNT(len), sizeof(RzBitword)); - if (!b->bitmap) { - free(b); - return NULL; - } - b->length = len; - return b; -} - -RZ_API void rz_bitmap_set_bytes(RZ_NONNULL RzBitmap *b, RZ_NONNULL const ut8 *buf, size_t len) { - rz_return_if_fail(b && buf); - size_t blen = b->length << BITWORD_BITS_SHIFT; - if (blen < len) { - len = blen; - } - - memcpy(b->bitmap, buf, len); -} - -RZ_API void rz_bitmap_free(RZ_NULLABLE RzBitmap *b) { - if (!b) { - return; - } - free(b->bitmap); - free(b); -} - -RZ_API void rz_bitmap_set(RZ_NONNULL RzBitmap *b, size_t bit) { - rz_return_if_fail(b); - if (bit < b->length) { - const size_t pos = bit >> BITWORD_BITS_SHIFT; - RzBitword value = bitword_read(&b->bitmap[pos]); - value |= ((RzBitword)1 << (bit & BITWORD_BITS_MASK)); - bitword_write(&b->bitmap[pos], value); - } -} - -RZ_API void rz_bitmap_unset(RZ_NONNULL RzBitmap *b, size_t bit) { - rz_return_if_fail(b); - if (bit < b->length) { - const size_t pos = bit >> BITWORD_BITS_SHIFT; - RzBitword value = bitword_read(&b->bitmap[pos]); - value &= ~((RzBitword)1 << (bit & BITWORD_BITS_MASK)); - bitword_write(&b->bitmap[pos], value); - } -} - -RZ_API int rz_bitmap_test(RZ_NONNULL RzBitmap *b, size_t bit) { - rz_return_val_if_fail(b && bit >= 0, -1); - if (bit < b->length) { - const size_t pos = bit >> BITWORD_BITS_SHIFT; - RzBitword bword = bitword_read(&b->bitmap[pos]); - return BITWORD_TEST(bword, (bit & BITWORD_BITS_MASK)); - } - return -1; -} diff --git a/librz/util/meson.build b/librz/util/meson.build index 9f23dae3a3..21fa8b8a11 100644 --- a/librz/util/meson.build +++ b/librz/util/meson.build @@ -10,7 +10,6 @@ rz_util_common_sources = [ 'axml.c', 'base85.c', 'base91.c', - 'bitmap.c', 'bitvector.c', 'buf.c', 'calc.c', diff --git a/test/unit/meson.build b/test/unit/meson.build index a6cf8af726..a0d559d2b8 100644 --- a/test/unit/meson.build +++ b/test/unit/meson.build @@ -26,7 +26,6 @@ if get_option('enable_tests') 'big', 'bin_lines', 'bin_mach0', - 'bitmap', 'bitvector', 'buf', 'cmd', diff --git a/test/unit/test_bitmap.c b/test/unit/test_bitmap.c deleted file mode 100644 index 1e0197eae2..0000000000 --- a/test/unit/test_bitmap.c +++ /dev/null @@ -1,36 +0,0 @@ -// SPDX-FileCopyrightText: 2016 Jeffrey Crowell -// SPDX-License-Identifier: LGPL-3.0-only - -#include -#include "minunit.h" - -bool test_rz_bitmap_set(void) { - int i; - static const int max_value = (2343 + 1); - static const ut32 values[] = { 1, 2, 3, 4, 8, 34, 543, 2343 }; - static const int len = (sizeof(values) / sizeof(ut32)); - RzBitmap *bitmap = rz_bitmap_new(max_value); - for (i = 0; i < len; i++) { - rz_bitmap_set(bitmap, values[i]); - } - for (i = 0; i < len; i++) { - mu_assert_eq(rz_bitmap_test(bitmap, values[i]), true, - "Bit should be set."); - } - for (i = 0; i < len; i++) { - rz_bitmap_unset(bitmap, values[i]); - } - for (i = 0; i < len; i++) { - mu_assert_eq(rz_bitmap_test(bitmap, values[i]), false, - "Bit should not be set."); - } - rz_bitmap_free(bitmap); - mu_end; -} - -int all_tests() { - mu_run_test(test_rz_bitmap_set); - return tests_passed != tests_run; -} - -mu_main(all_tests)