/** * \file * * * \brief KFile interface over a memory buffer. * * \author Francesco Sacchi */ #include "kfile_mem.h" #include #include static size_t kfilemem_read(struct KFile *_fd, void *buf, size_t size) { KFileMem *fd = KFILEMEM_CAST(_fd); size = MIN((kfile_off_t)size, fd->fd.size - fd->fd.seek_pos); uint8_t *mem = (uint8_t *)fd->mem; memcpy(buf, mem + fd->fd.seek_pos, size); fd->fd.seek_pos += size; return size; } static size_t kfilemem_write(struct KFile *_fd, const void *buf, size_t size) { KFileMem *fd = KFILEMEM_CAST(_fd); size = MIN((kfile_off_t)size, fd->fd.size - fd->fd.seek_pos); uint8_t *mem = (uint8_t *)fd->mem; memcpy(mem + fd->fd.seek_pos, buf, size); fd->fd.seek_pos += size; return size; } void kfilemem_init(KFileMem *km, void *mem, size_t len) { ASSERT(km); ASSERT(mem); ASSERT(len); memset(km, 0, sizeof(*km)); km->mem = mem; kfile_init(&km->fd); km->fd.read = kfilemem_read; km->fd.write = kfilemem_write; km->fd.size = len; DB(km->fd._type = KFT_KFILEMEM); }