mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 18:22:45 +00:00 
			
		
		
		
	 de49714f36
			
		
	
	
		de49714f36
		
	
	
	
	
		
			
			Also added a script to handle creation of GPT partitioned disk (with GRUB config file). Block limit will be used to disallow potential access to other partitions.
		
			
				
	
	
		
			61 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include <Kernel/Devices/DiskPartition.h>
 | |
| 
 | |
| // #define OFFD_DEBUG
 | |
| 
 | |
| NonnullRefPtr<DiskPartition> DiskPartition::create(DiskDevice& device, unsigned block_offset, unsigned block_limit)
 | |
| {
 | |
|     return adopt(*new DiskPartition(device, block_offset, block_limit));
 | |
| }
 | |
| 
 | |
| DiskPartition::DiskPartition(DiskDevice& device, unsigned block_offset, unsigned block_limit)
 | |
|     : DiskDevice(100, 0, device.block_size())
 | |
|     , m_device(device)
 | |
|     , m_block_offset(block_offset)
 | |
|     , m_block_limit(block_limit)
 | |
| {
 | |
| }
 | |
| 
 | |
| DiskPartition::~DiskPartition()
 | |
| {
 | |
| }
 | |
| 
 | |
| bool DiskPartition::read_block(unsigned index, u8* out) const
 | |
| {
 | |
| #ifdef OFFD_DEBUG
 | |
|     kprintf("DiskPartition::read_block %u (really: %u)\n", index, m_block_offset + index);
 | |
| #endif
 | |
| 
 | |
|     return m_device->read_block(m_block_offset + index, out);
 | |
| }
 | |
| 
 | |
| bool DiskPartition::write_block(unsigned index, const u8* data)
 | |
| {
 | |
| #ifdef OFFD_DEBUG
 | |
|     kprintf("DiskPartition::write_block %u (really: %u)\n", index, m_block_offset + index);
 | |
| #endif
 | |
| 
 | |
|     return m_device->write_block(m_block_offset + index, data);
 | |
| }
 | |
| 
 | |
| bool DiskPartition::read_blocks(unsigned index, u16 count, u8* out)
 | |
| {
 | |
| #ifdef OFFD_DEBUG
 | |
|     kprintf("DiskPartition::read_blocks %u (really: %u) count=%u\n", index, m_block_offset + index, count);
 | |
| #endif
 | |
| 
 | |
|     return m_device->read_blocks(m_block_offset + index, count, out);
 | |
| }
 | |
| 
 | |
| bool DiskPartition::write_blocks(unsigned index, u16 count, const u8* data)
 | |
| {
 | |
| #ifdef OFFD_DEBUG
 | |
|     kprintf("DiskPartition::write_blocks %u (really: %u) count=%u\n", index, m_block_offset + index, count);
 | |
| #endif
 | |
| 
 | |
|     return m_device->write_blocks(m_block_offset + index, count, data);
 | |
| }
 | |
| 
 | |
| const char* DiskPartition::class_name() const
 | |
| {
 | |
|     return "DiskPartition";
 | |
| }
 |