return open_flags & (O_RDWR | O_WRONLY);
}
-/* Like pread(), but keep trying until everything has been read or we know for
- * sure that there was an error. */
-static ssize_t
-full_pread(int fd, void *buf, size_t count, off_t offset)
-{
- ssize_t bytes_remaining = count;
- ssize_t bytes_read;
-
- while (bytes_remaining > 0) {
- bytes_read = pread(fd, buf, bytes_remaining, offset);
- if (bytes_read <= 0) {
- if (bytes_read < 0) {
- if (errno == EINTR)
- continue;
- } else {
- errno = EIO;
- }
- break;
- }
- bytes_remaining -= bytes_read;
- buf += bytes_read;
- offset += bytes_read;
- }
- return count - bytes_remaining;
-}
-
-/* Like pwrite(), but keep trying until everything has been written or we know
- * for sure that there was an error. */
-static ssize_t
-full_pwrite(int fd, const void *buf, size_t count, off_t offset)
-{
- ssize_t bytes_remaining = count;
- ssize_t bytes_written;
-
- while (bytes_remaining > 0) {
- bytes_written = pwrite(fd, buf, bytes_remaining, offset);
- if (bytes_written < 0) {
- if (errno == EINTR)
- continue;
- break;
- }
- bytes_remaining -= bytes_written;
- buf += bytes_written;
- offset += bytes_written;
- }
- return count - bytes_remaining;
-}
-
/*
* Allocate a file descriptor for a stream.
*
return 0;
}
+static mode_t
+fuse_mask_mode(mode_t mode, struct fuse_context *fuse_ctx)
+{
+#if FUSE_MAJOR_VERSION > 2 || (FUSE_MAJOR_VERSION == 2 && FUSE_MINOR_VERSION >= 8)
+ mode &= ~fuse_ctx->umask;
+#endif
+ return mode;
+}
+
/*
* Add a new dentry with a new inode to a WIM image.
*
if (inode_set_unix_data(new->d_inode,
fuse_ctx->uid,
fuse_ctx->gid,
- mode & ~fuse_ctx->umask,
+ fuse_mask_mode(mode, fuse_ctx),
wimfs_ctx->wim->lookup_table,
UNIX_DATA_ALL | UNIX_DATA_CREATE))
{
if (res_size > size)
return -ERANGE;
- ret = read_full_resource_into_buf(lte, value, true);
- if (ret != 0)
+ ret = read_full_resource_into_buf(lte, value);
+ if (ret)
return -EIO;
return res_size;
break;
case RESOURCE_IN_WIM:
if (read_partial_wim_resource_into_buf(fd->f_lte, size,
- offset, buf, true))
+ offset, buf))
ret = -errno;
else
ret = size;
}
if (mount_flags & WIMLIB_MOUNT_FLAG_READWRITE) {
- ret = lock_wim(wim, wim->fp);
+ ret = lock_wim(wim, wim->in_fd);
if (ret)
goto out;
}