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 }