if (lchown(link, unix_data->uid, unix_data->gid)) {
if (errno == EPERM) {
/* Ignore */
- WARNING_WITH_ERRNO("failed to set symlink UNIX owner/group");
+ WARNING_WITH_ERRNO("failed to set symlink UNIX "
+ "owner/group on \"%s\"", link);
} else {
- ERROR_WITH_ERRNO("failed to set symlink UNIX owner/group");
+ ERROR_WITH_ERRNO("failed to set symlink UNIX "
+ "owner/group on \"%s\"", link);
return WIMLIB_ERR_INVALID_DENTRY;
}
}
}
static int
-fd_apply_unix_data(int fd, const struct wimlib_unix_data *unix_data)
+fd_apply_unix_data(int fd, const char *path,
+ const struct wimlib_unix_data *unix_data)
{
if (fchown(fd, unix_data->uid, unix_data->gid)) {
if (errno == EPERM) {
- WARNING_WITH_ERRNO("failed to set file UNIX owner/group");
+ WARNING_WITH_ERRNO("failed to set file UNIX "
+ "owner/group on \"%s\"", path);
/* Ignore? */
} else {
- ERROR_WITH_ERRNO("failed to set file UNIX owner/group");
+ ERROR_WITH_ERRNO("failed to set file UNIX "
+ "owner/group on \"%s\"", path);
return WIMLIB_ERR_INVALID_DENTRY;
}
}
if (fchmod(fd, unix_data->mode)) {
if (errno == EPERM) {
- WARNING_WITH_ERRNO("failed to set UNIX file mode");
+ WARNING_WITH_ERRNO("failed to set UNIX file mode "
+ "on \"%s\"", path);
/* Ignore? */
} else {
- ERROR_WITH_ERRNO("failed to set UNIX file mode");
+ ERROR_WITH_ERRNO("failed to set UNIX file mode "
+ "on \"%s\"", path);
return WIMLIB_ERR_INVALID_DENTRY;
}
}
int dfd = open(dir, O_RDONLY);
int ret;
if (dfd >= 0) {
- ret = fd_apply_unix_data(dfd, unix_data);
+ ret = fd_apply_unix_data(dfd, dir, unix_data);
if (close(dfd)) {
ERROR_WITH_ERRNO("can't close directory `%s'", dir);
ret = WIMLIB_ERR_MKDIR;
else if (ret < 0)
ret = 0;
else
- ret = fd_apply_unix_data(out_fd, &unix_data);
+ ret = fd_apply_unix_data(out_fd, output_path, &unix_data);
if (ret)
goto out;
}
# define ERROR(format, ...) wimlib_error(T(format), ## __VA_ARGS__)
# define ERROR_WITH_ERRNO(format, ...) wimlib_error_with_errno(T(format), ## __VA_ARGS__)
# define WARNING(format, ...) wimlib_warning(T(format), ## __VA_ARGS__)
-# define WARNING_WITH_ERRNO(format, ...) wimlib_warning(T(format), ## __VA_ARGS__)
+# define WARNING_WITH_ERRNO(format, ...) wimlib_warning_with_errno(T(format), ## __VA_ARGS__)
#else /* ENABLE_ERROR_MESSAGES */
# define ERROR(format, ...) dummy_tprintf(T(format), ## __VA_ARGS__)
# define ERROR_WITH_ERRNO(format, ...) dummy_tprintf(T(format), ## __VA_ARGS__)