X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fkern%2Fkfile.c;h=81cd9d0a422d941717250c0e84cdb3c71d166ce5;hb=72c5f5cde2bc9ffe5427d65bb8f798bf8c4a0cce;hp=22da2a70f3f3fdf76c41f3218ec1ba1df9f560bb;hpb=d9c18a57ee52dd0421e62f45c81234a57b63e773;p=bertos.git diff --git a/bertos/kern/kfile.c b/bertos/kern/kfile.c index 22da2a70..81cd9d0a 100644 --- a/bertos/kern/kfile.c +++ b/bertos/kern/kfile.c @@ -42,7 +42,9 @@ #include "cfg/cfg_kfile.h" #include +#include +#include #include #include @@ -194,12 +196,11 @@ 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) - { - ASSERT(0); - return EOF; - } + LOG_INFO("seek outside EOF\n"); + #endif fd->seek_pos = seek_pos + offset; @@ -218,4 +219,40 @@ struct KFile * kfile_genericReopen(struct KFile *fd) return fd; } +/** + * Close file \a fd. + * This is a generic implementation that only return 0. + */ +int kfile_genericClose(UNUSED_ARG(struct KFile *, fd)) +{ + return 0; +}; + + +/** + * Discard input to resynchronize with remote end. + * + * Discard incoming data until the kfile_getc stops receiving + * characters for at least \a delay milliseconds. + * + * \note If the timeout occur, we reset the error before to + * quit. + */ +void kfile_resync(KFile *fd, mtime_t delay) +{ + ticks_t start_time = timer_clock(); + for(;;) + { + if(kfile_getc(fd) != EOF) + start_time = timer_clock(); + + if ((timer_clock() - start_time) > ms_to_ticks(delay)) + { + kfile_clearerr(fd); + break; + } + + } +} +