diff options
Diffstat (limited to 'sys-fs/ntfs3g/files/ntfs3g-2017.3.23-full-clusters.patch')
-rw-r--r-- | sys-fs/ntfs3g/files/ntfs3g-2017.3.23-full-clusters.patch | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/sys-fs/ntfs3g/files/ntfs3g-2017.3.23-full-clusters.patch b/sys-fs/ntfs3g/files/ntfs3g-2017.3.23-full-clusters.patch new file mode 100644 index 000000000000..7d2496d372d5 --- /dev/null +++ b/sys-fs/ntfs3g/files/ntfs3g-2017.3.23-full-clusters.patch @@ -0,0 +1,81 @@ +--- a/ntfsprogs/ntfsclone.c 2018-05-16 18:46:47.114964000 +0200 ++++ b/ntfsprogs/ntfsclone.c 2018-07-16 14:03:20.273809100 +0200 +@@ -776,6 +776,10 @@ + + /* possible partial cluster holding the backup boot sector */ + backup_bootsector = (lcn + 1)*csize >= full_device_size; ++ buff = (char*)ntfs_malloc(csize); ++ if (!buff) ++ err_exit("Not enough memory"); ++ + if (backup_bootsector) { + csize = full_device_size - lcn*csize; + if (csize < 0) { +@@ -783,10 +787,6 @@ + } + } + +- buff = (char*)ntfs_malloc(csize); +- if (!buff) +- err_exit("Not enough memory"); +- + // need reading when not about to write ? + if (read_all(fd, buff, csize) == -1) { + +@@ -1507,6 +1507,7 @@ + s64 mft_no; + u32 mft_record_size; + u32 csize; ++ u32 buff_size; + u32 bytes_per_sector; + u32 records_per_set; + u32 clusters_per_set; +@@ -1524,15 +1525,18 @@ + /* + * Depending on the sizes, there may be several records + * per cluster, or several clusters per record. ++ * Anyway, full clusters are needed for rescuing bad ones. + */ + if (csize >= mft_record_size) { + records_per_set = csize/mft_record_size; + clusters_per_set = 1; ++ buff_size = csize; + } else { + clusters_per_set = mft_record_size/csize; + records_per_set = 1; ++ buff_size = mft_record_size; + } +- buff = (char*)ntfs_malloc(mft_record_size); ++ buff = (char*)ntfs_malloc(buff_size); + if (!buff) + err_exit("Not enough memory"); + +@@ -1585,6 +1589,7 @@ + void *fd; + u32 indx_record_size; + u32 csize; ++ u32 buff_size; + u32 bytes_per_sector; + u32 records_per_set; + u32 clusters_per_set; +@@ -1601,16 +1606,19 @@ + /* + * Depending on the sizes, there may be several records + * per cluster, or several clusters per record. ++ * Anyway, full clusters are needed for rescuing bad ones. + */ + indx_record_size = image->ni->vol->indx_record_size; + if (csize >= indx_record_size) { + records_per_set = csize/indx_record_size; + clusters_per_set = 1; ++ buff_size = csize; + } else { + clusters_per_set = indx_record_size/csize; + records_per_set = 1; ++ buff_size = indx_record_size; + } +- buff = (char*)ntfs_malloc(indx_record_size); ++ buff = (char*)ntfs_malloc(buff_size); + if (!buff) + err_exit("Not enough memory"); + |