#endif /* !CONFIG_KFILE_GETS */
+kfile_off_t kfile_copy(KFile *src, KFile *dst, kfile_off_t size)
+{
+ char buf[32];
+ kfile_off_t cp_len = 0;
+
+ while (size)
+ {
+ size_t len = MIN(sizeof(buf), (size_t)size);
+ if (kfile_read(src, buf, len) != len)
+ break;
+
+ size_t wr_len = kfile_write(dst, buf, len);
+ cp_len += wr_len;
+ size -= len;
+
+ if (wr_len != len)
+ break;
+ }
+
+ return cp_len;
+}
+
+
/**
* Move \a fd file seek position of \a offset bytes from \a whence.
*
break;
}
- #if LOG_LEVEL >= LOG_LVL_INFO
/* Bound check */
if (seek_pos + offset > fd->size)
LOG_INFO("seek outside EOF\n");
- #endif
fd->seek_pos = seek_pos + offset;
/**
* Close file \a fd.
- * This is a generic implementation that only return 0.
+ * This is a generic implementation that only flush the file.
*/
-int kfile_genericClose(UNUSED_ARG(struct KFile *, fd))
+int kfile_genericClose(struct KFile *fd)
{
- return 0;
-};
+ return kfile_flush(fd);
+}
/**