Add new function: kfile_copy().
authorbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 2 Feb 2011 16:12:16 +0000 (16:12 +0000)
committerbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 2 Feb 2011 16:12:16 +0000 (16:12 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@4672 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/io/kfile.c
bertos/io/kfile.h

index f8981180324ce4bb6a36b2c899b5b8d15fa3b073..ca7e1fc37d43c464348c60ee40f34a34f473becb 100644 (file)
@@ -167,6 +167,29 @@ int kfile_gets_echo(struct KFile *fd, char *buf, int size, bool echo)
 #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.
  *
index 9b0b07d016aa27c8692c98b333827a3ace61e5b6..56f7d57aa3e7e3ea895625e58be98750e10b71a8 100644 (file)
@@ -245,6 +245,16 @@ INLINE size_t kfile_read(struct KFile *fd, void *buf, size_t size)
 int kfile_gets(struct KFile *fd, char *buf, int size);
 int kfile_gets_echo(struct KFile *fd, char *buf, int size, bool echo);
 
+/**
+ * Copy \a size bytes from file \a src to \a dst.
+ * 
+ * \param src Source KFile.
+ * \param dst Destionation KFile.
+ * \param size number of bytes to copy.
+ * \return the number of bytes copied.
+ */
+kfile_off_t kfile_copy(KFile *src, KFile *dst, kfile_off_t size);
+
 /**
  * Write \a size bytes from buffer \a buf into KFile \a fd.
  *