X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fio%2Fkfile.c;h=52762bd7dfd59ea8e82ba08162b88e93c392b56f;hb=77398df4a178dea4f1d20a1ac50d4241325b6251;hp=6113d5f77e6ef0e19538799e08fd30f9f977f1e9;hpb=b46f64914c62fbb0297728280478681659469654;p=bertos.git diff --git a/bertos/io/kfile.c b/bertos/io/kfile.c index 6113d5f7..52762bd7 100644 --- a/bertos/io/kfile.c +++ b/bertos/io/kfile.c @@ -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. * @@ -195,11 +218,9 @@ kfile_off_t kfile_genericSeek(struct KFile *fd, kfile_off_t offset, KSeekMode wh 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; @@ -220,12 +241,12 @@ struct KFile * kfile_genericReopen(struct KFile *fd) /** * 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); +} /**