Commit 927c684f by Celine Mercier

Utils: new function to copy the content of a file into another file

parent 344566d9
......@@ -36,6 +36,66 @@
**********************************************************************/
int copy_file(const char* src_file_path, const char* dest_file_path)
{
int src_fd, dst_fd, n, err;
unsigned char buffer[4096];
src_fd = open(src_file_path, O_RDONLY);
if (src_fd == -1)
{
obi_set_errno(OBI_UTILS_ERROR);
obidebug(1, "\nError opening a file to copy");
return -1;
}
dst_fd = open(dest_file_path, O_CREAT | O_WRONLY, 0777); // overwrite if already exists
if (dst_fd == -1)
{
obi_set_errno(OBI_UTILS_ERROR);
obidebug(1, "\nError opening a file to write a copy: %s", dest_file_path);
return -1;
}
while (1)
{
err = read(src_fd, buffer, 4096);
if (err == -1)
{
obi_set_errno(OBI_UTILS_ERROR);
obidebug(1, "\nProblem reading a file to copy");
return -1;
}
n = err;
if (n == 0)
break;
err = write(dst_fd, buffer, n);
if (err == -1)
{
obi_set_errno(OBI_UTILS_ERROR);
obidebug(1, "\nProblem writing to a file while copying");
return -1;
}
}
if (close(src_fd) < 0)
{
obi_set_errno(OBI_UTILS_ERROR);
obidebug(1, "\nError closing a file after copying it");
return -1;
}
if (close(dst_fd) < 0)
{
obi_set_errno(OBI_UTILS_ERROR);
obidebug(1, "\nError closing a file after copying to it");
return -1;
}
return 0;
}
int digit_count(index_t i)
{
int n_digits;
......
......@@ -25,6 +25,20 @@
#define ONE_IF_ZERO(x) (((x)==0)?1:(x)) /**< If x is equal to 0, x takes the value 1.
*/
/**
* @brief Copy the content of a file into another file.
*
* @param src_file_path The path to the source file to copy.
* @param dest_file_path The path to the destination file.
*
* @retval 0 if the operation was successfully completed.
* @retval -1 if an error occurred.
*
* @since July 2017
* @author Celine Mercier (celine.mercier@metabarcoding.org)
*/
int copy_file(const char* src_file_path, const char* dest_file_path);
/**
* @brief Counts the number of digits of a number.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment