diff options
Diffstat (limited to 'kernel/storage.cpp')
-rw-r--r-- | kernel/storage.cpp | 67 |
1 files changed, 0 insertions, 67 deletions
diff --git a/kernel/storage.cpp b/kernel/storage.cpp deleted file mode 100644 index b6b1a04..0000000 --- a/kernel/storage.cpp +++ /dev/null @@ -1,67 +0,0 @@ -#include <hilbert/kernel/storage.hpp> - -namespace hilbert::kernel::storage { - - bd_result block_device::load_cache_block(uint64_t i) { - - if (block_cache_i == i) - return bd_result::success; - - bd_result result = read_blocks_no_cache(i, 1, block_cache); - - if (result != bd_result::success) { - block_cache_i = block_count; - return result; - } - - block_cache_i = i; - return bd_result::success; - - } - - bd_result block_device::read_bytes( - uint64_t start, uint64_t count, void *into - ) { - - if (start + count > block_size * block_count) - return bd_result::out_of_bounds; - - uint8_t *into_u8 = (uint8_t *)into; - - if (start % block_size != 0) { - uint64_t prefix_len = block_size - start % block_size; - bd_result result = load_cache_block(start / block_size); - if (result != bd_result::success) - return result; - for (uint64_t i = 0; i < prefix_len; ++i) - into_u8[i] = block_cache[start % block_size + i]; - into_u8 += prefix_len; - start += prefix_len; - count -= prefix_len; - } - - uint64_t postfix_start = ((start + count) / block_size) * block_size; - - if (postfix_start != start) { - bd_result result = read_blocks_no_cache( - start / block_size, (postfix_start - start) / block_size, into_u8); - if (result != bd_result::success) - return result; - count -= postfix_start - start; - into_u8 += postfix_start - start; - start = postfix_start; - } - - if (count != 0) { - bd_result result = load_cache_block(start / block_size); - if (result != bd_result::success) - return result; - for (uint64_t i = 0; i < count; ++i) - into_u8[i] = block_cache[i]; - } - - return bd_result::success; - - } - -} |