mirror of
https://github.com/troglobit/libite.git
synced 2026-10-11 17:02:26 +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;
|
return errno;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
errno = 0;
|
||||||
if (!fgets(buf, BUFSIZ, src)) {
|
if (!fgets(buf, BUFSIZ, src)) {
|
||||||
if (errno == EINTR) {
|
if (errno == EINTR) {
|
||||||
clearerr(src);
|
clearerr(src);
|
||||||
|
|||||||
@@ -62,7 +62,12 @@ int rsync(char *src, char *dst, int delete, int (*filter) (const char *file))
|
|||||||
{
|
{
|
||||||
errno = 0;
|
errno = 0;
|
||||||
copyfile(src, dst, 0);
|
copyfile(src, dst, 0);
|
||||||
if (errno) result++;
|
if (errno) {
|
||||||
|
if (errno == EEXIST)
|
||||||
|
errno = 0;
|
||||||
|
else
|
||||||
|
result++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!fisdir(dst))
|
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)
|
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);
|
snprintf(buf, buf_len, "%s%s%s/", dir, fisslashdir(dir) ? "" : "/", name);
|
||||||
if (mkdir(buf, mode))
|
if (mkdir(buf, mode)) {
|
||||||
return 1;
|
if (EEXIST != errno)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user