Just abuse tftp_read to step forward. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> --- fs/tftp.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/fs/tftp.c b/fs/tftp.c index 56d4365d773a..272a7106eb51 100644 --- a/fs/tftp.c +++ b/fs/tftp.c @@ -591,8 +591,29 @@ static int tftp_read(struct device_d *dev, FILE *f, void *buf, size_t insize) static loff_t tftp_lseek(struct device_d *dev, FILE *f, loff_t pos) { - /* not implemented in tftp protocol */ - return -ENOSYS; + if (pos >= f->pos) { + char buf[1024]; + int ret; + while (pos > f->pos) { + size_t len = min(sizeof(buf), (size_t)(pos - f->pos)); + ret = tftp_read(dev, f, buf, len); + + if (ret < 0) + return ret; + else if (!ret) + return -EINVAL; + f->pos += ret; + + memory_display(buf, f->pos - len, 0x10, 4, 0); + } + return pos; + } else { + /* + * We cannot seek backwards without reloading or caching the + * file + */ + return -ENOSYS; + } } static DIR* tftp_opendir(struct device_d *dev, const char *pathname) -- 2.11.0 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox