From a205b87fa241ebe165da059617007c9263f33d2e Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Fri, 25 Sep 2009 12:19:37 +0200 Subject: [PATCH] make copy_file() globally available Signed-off-by: Sascha Hauer --- commands/cp.c | 59 ++----------------------------------------------- include/libbb.h | 2 ++ lib/Makefile | 2 +- lib/copy_file.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+), 58 deletions(-) create mode 100644 lib/copy_file.c diff --git a/commands/cp.c b/commands/cp.c index af03615f5..0a90c163b 100644 --- a/commands/cp.c +++ b/commands/cp.c @@ -26,66 +26,11 @@ */ #include #include -#include -#include -#include -#include #include #include #include - -#define RW_BUF_SIZE (ulong)4096 - -/** - * @param[in] src FIXME - * @param[out] dst FIXME - */ -static int copy_file(const char *src, const char *dst) -{ - char *rw_buf = NULL; - int srcfd = 0, dstfd = 0; - int r, w; - int ret = 1; - - rw_buf = xmalloc(RW_BUF_SIZE); - - srcfd = open(src, O_RDONLY); - if (srcfd < 0) { - printf("could not open %s: %s\n", src, errno_str()); - goto out; - } - - dstfd = open(dst, O_WRONLY | O_CREAT); - if (dstfd < 0) { - printf("could not open %s: %s\n", dst, errno_str()); - goto out; - } - - while(1) { - r = read(srcfd, rw_buf, RW_BUF_SIZE); - if (r < 0) { - perror("read"); - goto out; - } - if (!r) - break; - w = write(dstfd, rw_buf, r); - if (w < 0) { - perror("write"); - goto out; - } - } - - ret = 0; -out: - free(rw_buf); - if (srcfd > 0) - close(srcfd); - if (dstfd > 0) - close(dstfd); - - return ret; -} +#include +#include /** * @param[in] cmdtp FIXME diff --git a/include/libbb.h b/include/libbb.h index fdabc4bb5..735ed2126 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -26,4 +26,6 @@ int recursive_action(const char *fileName, unsigned flags, char * safe_strncpy(char *dst, const char *src, size_t size); +int copy_file(const char *src, const char *dst); + #endif /* __LIBBB_H */ diff --git a/lib/Makefile b/lib/Makefile index 4b1074d2a..b5326906e 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -27,4 +27,4 @@ obj-$(CONFIG_GLOB) += fnmatch.o obj-$(CONFIG_GENERIC_FIND_NEXT_BIT) += find_next_bit.o obj-y += glob.o obj-y += notifier.o - +obj-y += copy_file.o diff --git a/lib/copy_file.c b/lib/copy_file.c new file mode 100644 index 000000000..0ff0435f1 --- /dev/null +++ b/lib/copy_file.c @@ -0,0 +1,58 @@ +#include +#include +#include +#include +#include +#define RW_BUF_SIZE (ulong)4096 + +/** + * @param[in] src FIXME + * @param[out] dst FIXME + */ +int copy_file(const char *src, const char *dst) +{ + char *rw_buf = NULL; + int srcfd = 0, dstfd = 0; + int r, w; + int ret = 1; + + rw_buf = xmalloc(RW_BUF_SIZE); + + srcfd = open(src, O_RDONLY); + if (srcfd < 0) { + printf("could not open %s: %s\n", src, errno_str()); + goto out; + } + + dstfd = open(dst, O_WRONLY | O_CREAT); + if (dstfd < 0) { + printf("could not open %s: %s\n", dst, errno_str()); + goto out; + } + + while(1) { + r = read(srcfd, rw_buf, RW_BUF_SIZE); + if (r < 0) { + perror("read"); + goto out; + } + if (!r) + break; + w = write(dstfd, rw_buf, r); + if (w < 0) { + perror("write"); + goto out; + } + } + + ret = 0; +out: + free(rw_buf); + if (srcfd > 0) + close(srcfd); + if (dstfd > 0) + close(dstfd); + + return ret; +} +