Hi Sascha, On Wed, Jan 24, 2018 at 08:45:31AM +0100, Sascha Hauer wrote: > Due to the nature of TFTP which can't lseek and due to the silliness > of our filesystem implementation which can't cache accesses we have to > manually cache files on TFTP filesystems sometimes. Make it easier > for them by providing a cache_file() function which copies the file > from TFTP to RAM. > > Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> > --- > include/libfile.h | 2 ++ > lib/libfile.c | 27 +++++++++++++++++++++++++++ > 2 files changed, 29 insertions(+) > > diff --git a/include/libfile.h b/include/libfile.h > index 6dbb81a241..beec7cff79 100644 > --- a/include/libfile.h > +++ b/include/libfile.h > @@ -28,4 +28,6 @@ int unlink_recursive(const char *path, char **failedpath); > > char *make_temp(const char *template); > > +int cache_file(const char *path, char **newpath); > + > #endif /* __LIBFILE_H */ > diff --git a/lib/libfile.c b/lib/libfile.c > index 79054eb5ac..738ff1287d 100644 > --- a/lib/libfile.c > +++ b/lib/libfile.c > @@ -512,3 +512,30 @@ char *make_temp(const char *template) > > return name; > } > + > +/** > + * cache_file - Cache a file in /tmp > + * @path: The file to cache > + * @newpath: The return path where the file is copied to > + * > + * This function copies a given file to /tmp and returns its name in @newpath. Maybe add an additional note here that the caller is responsible for freeing the string returned in @newpath when the function exists successfully. The string is allocated by the make_temp() function. > + * > + * Return: 0 for success, negative error code otherwise. > + */ > +int cache_file(const char *path, char **newpath) > +{ > + char *npath; > + int ret; > + > + npath = make_temp("filecache-"); No dash suffix needed in "filecache-". The make_temp() function already adds a dash separator. Kind regards, Stefan > + > + ret = copy_file(path, npath, 0); > + if (ret) { > + free(npath); > + return ret; > + } > + > + *newpath = npath; > + > + return 0; > +} > -- > 2.11.0 > > > _______________________________________________ > barebox mailing list > barebox@xxxxxxxxxxxxxxxxxxx > http://lists.infradead.org/mailman/listinfo/barebox > _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox