aboutsummaryrefslogtreecommitdiffstats
path: root/sysutils/ntfsprogs/files/patch-512b_blocks
blob: 408254964fe8932bd09c664aeb1650cf282c85cf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
--- libntfs/attrib.c    Sat Sep  4 13:16:32 2004
+++ libntfs/attrib.c    Fri Jul 22 01:05:09 2005
@@ -709,9 +709,9 @@
  */
 s64 ntfs_attr_pread(ntfs_attr *na, const s64 pos, s64 count, void *b)
 {
-   s64 br, to_read, ofs, total, total2;
+   s64 br, old_to_read, to_read, ofs, total, total2;
    ntfs_volume *vol;
    runlist_element *rl;
 
    Dprintf("%s(): Entering for inode 0x%llx, attr 0x%x, pos 0x%llx, "
            "count 0x%llx.\n", __FUNCTION__,
@@ -741,6 +744,7 @@
    if (pos + count > na->data_size) {
        if (pos >= na->data_size)
            return 0;
+       Dprintf("trunacting read pos=%lld, na->data_size=%lld, (old) count=%lld\n", pos, na->data_size, count);
        count = na->data_size - pos;
    }
    vol = na->ni->vol;
@@ -820,6 +825,10 @@
        /* It is a real lcn, read it into @dst. */
        to_read = min(count, (rl->length << vol->cluster_size_bits) -
                ofs);
+       old_to_read = to_read;
+       to_read = (to_read + 511) / 512 * 512;
+       if(old_to_read != to_read)
+           Dprintf("adjusted %lld->%lld\n", old_to_read, to_read);
 retry:
        Dprintf("%s(): Reading 0x%llx bytes from vcn 0x%llx, lcn 0x%llx, "
                "ofs 0x%llx.\n", __FUNCTION__, to_read,
@@ -828,6 +837,8 @@
                ofs, to_read, b);
        /* If everything ok, update progress counters and continue. */
        if (br > 0) {
+           if(br > old_to_read)
+               br = old_to_read;
            total += br;
            count -= br;
            b = (u8*)b + br;
--- libntfs/device.c    Sat Sep  4 13:16:32 2004
+++ libntfs/device.c    Mon Jul 11 23:27:55 2005
@@ -441,10 +441,10 @@
  */
 static inline int ntfs_device_offset_valid(struct ntfs_device *dev, s64 ofs)
 {
-   char ch;
+   char ch[512];
 
    if (dev->d_ops->seek(dev, ofs, SEEK_SET) >= 0 &&
-           dev->d_ops->read(dev, &ch, 1) == 1)
+           dev->d_ops->read(dev, &ch, 512) > 0)
        return 0;
    return -1;
 }
--- ntfsprogs/ntfsclone.c   Mon Jul 25 12:31:30 2005
+++ ntfsprogs/ntfsclone.c   Mon Jul 25 12:33:32 2005
@@ -1080,9 +1080,9 @@
 
 static int device_offset_valid(int fd, s64 ofs)
 {
-   char ch;
+   char ch[512];
 
-   if (lseek(fd, ofs, SEEK_SET) >= 0 && read(fd, &ch, 1) == 1)
+   if (lseek(fd, ofs, SEEK_SET) >= 0 && read(fd, &ch, 512) > 0)
        return 0;
    return -1;
 }
--- ntfsprogs/ntfsresize.c  Sat Sep  4 13:16:32 2004
+++ ntfsprogs/ntfsresize.c  Tue Jul 12 01:15:30 2005
@@ -1783,6 +1783,10 @@
 
    nr_clusters = resize->new_volume_size;
    bm_bsize = nr_clusters_to_bitmap_byte_size(nr_clusters);
+   if(bm_bsize % 512 != 0) {
+       Dprintf("adjusted bm_bsize: %lld->%lld\n", bm_bsize, (bm_bsize + 511) / 512 * 512);
+       bm_bsize = (bm_bsize + 511) / 512 * 512;
+   }
    nr_bm_clusters = rounded_up_division(bm_bsize, vol->cluster_size);
 
    if (!(tmp = (u8 *)realloc(resize->lcn_bitmap.bm, bm_bsize)))