diff --git a/libntfs/attrib.c b/libntfs/attrib.c index 250efa18..e3d514cd 100644 --- a/libntfs/attrib.c +++ b/libntfs/attrib.c @@ -958,8 +958,12 @@ retry: Dprintf("%s(): Writing 0x%Lx bytes to vcn 0x%Lx, lcn 0x%Lx, " "ofs 0x%Lx.\n", __FUNCTION__, to_write, rl->vcn, rl->lcn, ofs); - written = ntfs_pwrite(f, (rl->lcn << vol->cluster_size_bits) + - ofs, to_write, b); + if (!NVolReadOnly(vol)) + written = ntfs_pwrite(f, (rl->lcn << + vol->cluster_size_bits) + ofs, + to_write, b); + else + written = to_write; /* If everything ok, update progress counters and continue. */ if (written > 0) { total += written; diff --git a/libntfs/disk_io.c b/libntfs/disk_io.c index eb38b1d0..c6dc7235 100644 --- a/libntfs/disk_io.c +++ b/libntfs/disk_io.c @@ -320,8 +320,11 @@ s64 ntfs_cluster_write(const ntfs_volume *vol, const s64 lcn, errno = ESPIPE; return -1; } - bw = ntfs_pwrite(vol->fd, lcn << vol->cluster_size_bits, - count << vol->cluster_size_bits, b); + if (!NVolReadOnly(vol)) + bw = ntfs_pwrite(vol->fd, lcn << vol->cluster_size_bits, + count << vol->cluster_size_bits, b); + else + bw = count << vol->cluster_size_bits; if (bw < 0) { Dperror("Error writing cluster(s)"); return bw; diff --git a/libntfs/runlist.c b/libntfs/runlist.c index 1ef50097..98012dee 100644 --- a/libntfs/runlist.c +++ b/libntfs/runlist.c @@ -1072,8 +1072,12 @@ s64 ntfs_rl_pwrite(const ntfs_volume *vol, const runlist_element *rl, to_write = min(count, (rl->length << vol->cluster_size_bits) - ofs); retry: - written = ntfs_pwrite(f, (rl->lcn << vol->cluster_size_bits) + - ofs, to_write, b); + if (!NVolReadOnly(vol)) + written = ntfs_pwrite(f, (rl->lcn << + vol->cluster_size_bits) + ofs, + to_write, b); + else + written = to_write; /* If everything ok, update progress counters and continue. */ if (written > 0) { total += written;