[PATCH 4/7] libfile: implement a function to cache a file
Stefan Lengfeld
contact at stefanchrist.eu
Wed Jan 24 11:23:51 PST 2018
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 at pengutronix.de>
> ---
> 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 at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
>
More information about the barebox
mailing list