b835c1d276
* ntfsmount (and libntfs) now has full basic read/write support. * Cryptographic code is now integrated into libntfs, thus ntfscat and ntfsmount now can read encrypted files. See "man 8 libntfs" for details. * ntfsresize (and the entirety of ntfsprogs/libntfs in fact) now have full support for Windows Vista. * ntfsprogs and libntfs are now entirely endian safe and more over now we have checks that automatically reports endian errors. * mkntfs now creates a DCE compliant GUID for the volume and does a few other things to be more compliant with Windows Vista.
43 lines
1.3 KiB
Text
43 lines
1.3 KiB
Text
$NetBSD: patch-ac,v 1.4 2008/03/08 08:56:47 adam Exp $
|
|
|
|
--- libntfs/attrib.c.orig 2007-09-26 20:28:34.000000000 +0200
|
|
+++ libntfs/attrib.c
|
|
@@ -865,7 +865,7 @@ map_rl:
|
|
*/
|
|
s64 ntfs_attr_pread(ntfs_attr *na, const s64 pos, s64 count, void *b)
|
|
{
|
|
- s64 br, to_read, ofs, total, total2;
|
|
+ s64 br, to_read, ofs, total, total2, origcount;
|
|
ntfs_volume *vol;
|
|
runlist_element *rl;
|
|
|
|
@@ -892,6 +892,7 @@ s64 ntfs_attr_pread(ntfs_attr *na, const
|
|
vol = na->ni->vol;
|
|
if (!count)
|
|
return 0;
|
|
+ origcount = count;
|
|
/* Truncate reads beyond end of attribute. */
|
|
if (pos + count > na->data_size) {
|
|
if (pos >= na->data_size)
|
|
@@ -982,7 +983,7 @@ res_err_out:
|
|
continue;
|
|
}
|
|
/* It is a real lcn, read it into @dst. */
|
|
- to_read = min(count, (rl->length << vol->cluster_size_bits) -
|
|
+ to_read = min(origcount, (rl->length << vol->cluster_size_bits) -
|
|
ofs);
|
|
retry:
|
|
ntfs_log_trace("Reading 0x%llx bytes from vcn 0x%llx, "
|
|
@@ -990,6 +991,12 @@ retry:
|
|
rl->lcn, ofs);
|
|
br = ntfs_pread(vol->dev, (rl->lcn << vol->cluster_size_bits) +
|
|
ofs, to_read, b);
|
|
+ /* Zero any overage that we may have read */
|
|
+ if (br > count) {
|
|
+ memset(b + count, 0, br - count);
|
|
+ total += count;
|
|
+ return total + total2;
|
|
+ }
|
|
/* If everything ok, update progress counters and continue. */
|
|
if (br > 0) {
|
|
total += br;
|