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:
Joachim Nilsson
2013-05-19 18:00:31 +02:00
parent 77971a31b2
commit ddf5ecc907
2 changed files with 13 additions and 3 deletions
+1
View File
@@ -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);
+12 -3
View File
@@ -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;
}