kfile_mem.c
Go to the documentation of this file.00001
00038 #include "kfile_mem.h"
00039
00040 #include <io/kfile.h>
00041
00042 #include <string.h>
00043
00044 static size_t kfilemem_read(struct KFile *_fd, void *buf, size_t size)
00045 {
00046 KFileMem *fd = KFILEMEM_CAST(_fd);
00047
00048 size = MIN((kfile_off_t)size, fd->fd.size - fd->fd.seek_pos);
00049 uint8_t *mem = (uint8_t *)fd->mem;
00050 memcpy(buf, mem + fd->fd.seek_pos, size);
00051 fd->fd.seek_pos += size;
00052
00053 return size;
00054 }
00055
00056 static size_t kfilemem_write(struct KFile *_fd, const void *buf, size_t size)
00057 {
00058 KFileMem *fd = KFILEMEM_CAST(_fd);
00059
00060 size = MIN((kfile_off_t)size, fd->fd.size - fd->fd.seek_pos);
00061 uint8_t *mem = (uint8_t *)fd->mem;
00062 memcpy(mem + fd->fd.seek_pos, buf, size);
00063 fd->fd.seek_pos += size;
00064
00065 return size;
00066 }
00067
00068 void kfilemem_init(KFileMem *km, void *mem, size_t len)
00069 {
00070 ASSERT(km);
00071 ASSERT(mem);
00072 ASSERT(len);
00073
00074 memset(km, 0, sizeof(*km));
00075
00076 km->mem = mem;
00077 kfile_init(&km->fd);
00078 km->fd.read = kfilemem_read;
00079 km->fd.write = kfilemem_write;
00080 km->fd.size = len;
00081 DB(km->fd._type = KFT_KFILEMEM);
00082 }