/* * Copyright (C) 2020 The Android Open Source Project * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include #include "diskio.h" using namespace std; int DiskIO::OpenForRead(const unsigned char* data, size_t size) { this->data = data; this->size = size; this->off = 0; this->isOpen = 1; this->openForWrite = 0; return 1; } void DiskIO::MakeRealName(void) { realFilename = userFilename; } int DiskIO::OpenForRead(void) { return 1; } int DiskIO::OpenForWrite(void) { return 1; } void DiskIO::Close(void) { } int DiskIO::GetBlockSize(void) { return 512; } int DiskIO::GetPhysBlockSize(void) { return 512; } uint32_t DiskIO::GetNumHeads(void) { return 255; } uint32_t DiskIO::GetNumSecsPerTrack(void) { return 63; } int DiskIO::DiskSync(void) { return 1; } int DiskIO::Seek(uint64_t sector) { off_t off = sector * GetBlockSize(); if (off >= this->size) { return 0; } else { this->off = off; return 1; } } int DiskIO::Read(void* buffer, int numBytes) { int actualBytes = std::min(static_cast(this->size - this->off), numBytes); memcpy(buffer, this->data + this->off, actualBytes); return actualBytes; } int DiskIO::Write(void*, int) { return 0; } uint64_t DiskIO::DiskSize(int *) { return this->size / GetBlockSize(); }