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 }