Fix ramdisk issues

This commit is contained in:
Baptiste Wicht 2016-08-11 23:35:10 +02:00
parent c4ee872169
commit 1dedabe1c0

View File

@ -32,6 +32,10 @@ ramdisk::disk_descriptor* ramdisk::make_disk(uint64_t max_size){
ramdisks[current].pages = pages; ramdisks[current].pages = pages;
ramdisks[current].allocated = new char*[pages]; ramdisks[current].allocated = new char*[pages];
for(size_t i = 0; i < pages; ++i){
ramdisks[current].allocated[i] = nullptr;
}
++current; ++current;
return &ramdisks[current - 1]; return &ramdisks[current - 1];
} }
@ -51,7 +55,7 @@ size_t ramdisk::ramdisk_driver::read(void* data, char* destination, size_t count
auto page = offset / paging::PAGE_SIZE; auto page = offset / paging::PAGE_SIZE;
auto page_offset = offset % paging::PAGE_SIZE; auto page_offset = offset % paging::PAGE_SIZE;
auto to_read = std::min(paging::PAGE_SIZE, count - read) - page_offset; auto to_read = std::min(paging::PAGE_SIZE - page_offset, count - read);
// If the page is not allocated, we simply consider it full of zero // If the page is not allocated, we simply consider it full of zero
if(!disk->allocated[page]){ if(!disk->allocated[page]){
@ -89,14 +93,14 @@ size_t ramdisk::ramdisk_driver::write(void* data, const char* source, size_t cou
std::fill_n(disk->allocated[page], paging::PAGE_SIZE, 0); std::fill_n(disk->allocated[page], paging::PAGE_SIZE, 0);
} }
auto to_write = std::min(paging::PAGE_SIZE, count - written) - page_offset; uint64_t to_write = std::min(paging::PAGE_SIZE - page_offset, count - written);
std::copy_n(disk->allocated[page] + page_offset, source, to_write); std::copy_n(disk->allocated[page] + page_offset, source, to_write);
written += to_write; written += to_write;
offset += to_write; offset += to_write;
} }
return std::ERROR_INVALID_COUNT; return 0;
} }
size_t ramdisk::ramdisk_driver::size(void* data){ size_t ramdisk::ramdisk_driver::size(void* data){