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