mirror of
https://github.com/troglobit/libite.git
synced 2026-10-01 13:32:42 +07:00
libite: Improve error handling for copyfile() and rsync()
When using the simple rsync() or copyfile() functions of libite some error codes should not be interpreted as error. I.e., if a file or directory already exists when attempting to create it. Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
@@ -179,6 +179,7 @@ int copy_filep(FILE *src, FILE *dst)
|
||||
return errno;
|
||||
|
||||
while (1) {
|
||||
errno = 0;
|
||||
if (!fgets(buf, BUFSIZ, src)) {
|
||||
if (errno == EINTR) {
|
||||
clearerr(src);
|
||||
|
||||
@@ -62,7 +62,12 @@ int rsync(char *src, char *dst, int delete, int (*filter) (const char *file))
|
||||
{
|
||||
errno = 0;
|
||||
copyfile(src, dst, 0);
|
||||
if (errno) result++;
|
||||
if (errno) {
|
||||
if (errno == EEXIST)
|
||||
errno = 0;
|
||||
else
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
if (!fisdir(dst))
|
||||
@@ -127,8 +132,12 @@ int rsync(char *src, char *dst, int delete, int (*filter) (const char *file))
|
||||
static int makedir(char *buf, size_t buf_len, char *dir, char *name, mode_t mode)
|
||||
{
|
||||
snprintf(buf, buf_len, "%s%s%s/", dir, fisslashdir(dir) ? "" : "/", name);
|
||||
if (mkdir(buf, mode))
|
||||
return 1;
|
||||
if (mkdir(buf, mode)) {
|
||||
if (EEXIST != errno)
|
||||
return 1;
|
||||
|
||||
errno = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user