because of recursion */
*error_r = NULL;
ret = unlink_directory_r(dir, flags, error_r);
- if (ret < 0 && errno == ENOENT)
- ret = 0;
old_errno = errno;
if (fchdir(fd) < 0) {
if (ret < 0) {
errno = old_errno;
- return -1;
+ return errno == ENOENT ? 0 : 1;
}
if ((flags & UNLINK_DIRECTORY_FLAG_RMDIR) != 0) {
/* standardize errno */
errno = ENOTEMPTY;
}
- return -1;
+ return errno == ENOENT ? 0 : 1;
}
}
- return 0;
+ return 1;
}
};
/* Unlink directory and/or everything under it.
- Returns 0 if successful, -1 if error. If the directory doesn't exist,
- -1 and errno=ENOENT is returned. The returned error message contains the
- exact syscall that failed, e.g. "open(path) failed: Permission denied" */
+ Returns 1 if successful, 0 if error is ENOENT, -1 if other error.
+ The returned error message contains the exact syscall that failed,
+ e.g. "open(path) failed: Permission denied"
+ In case of ENOENT error, error message is also set. */
int unlink_directory(const char *dir, enum unlink_directory_flags flags,
const char **error_r);