BeRTOS
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 }