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