ntfs3g-2017.3.23-full-clusters.patch 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. --- a/ntfsprogs/ntfsclone.c 2018-05-16 18:46:47.114964000 +0200
  2. +++ b/ntfsprogs/ntfsclone.c 2018-07-16 14:03:20.273809100 +0200
  3. @@ -776,6 +776,10 @@
  4. /* possible partial cluster holding the backup boot sector */
  5. backup_bootsector = (lcn + 1)*csize >= full_device_size;
  6. + buff = (char*)ntfs_malloc(csize);
  7. + if (!buff)
  8. + err_exit("Not enough memory");
  9. +
  10. if (backup_bootsector) {
  11. csize = full_device_size - lcn*csize;
  12. if (csize < 0) {
  13. @@ -783,10 +787,6 @@
  14. }
  15. }
  16. - buff = (char*)ntfs_malloc(csize);
  17. - if (!buff)
  18. - err_exit("Not enough memory");
  19. -
  20. // need reading when not about to write ?
  21. if (read_all(fd, buff, csize) == -1) {
  22. @@ -1507,6 +1507,7 @@
  23. s64 mft_no;
  24. u32 mft_record_size;
  25. u32 csize;
  26. + u32 buff_size;
  27. u32 bytes_per_sector;
  28. u32 records_per_set;
  29. u32 clusters_per_set;
  30. @@ -1524,15 +1525,18 @@
  31. /*
  32. * Depending on the sizes, there may be several records
  33. * per cluster, or several clusters per record.
  34. + * Anyway, full clusters are needed for rescuing bad ones.
  35. */
  36. if (csize >= mft_record_size) {
  37. records_per_set = csize/mft_record_size;
  38. clusters_per_set = 1;
  39. + buff_size = csize;
  40. } else {
  41. clusters_per_set = mft_record_size/csize;
  42. records_per_set = 1;
  43. + buff_size = mft_record_size;
  44. }
  45. - buff = (char*)ntfs_malloc(mft_record_size);
  46. + buff = (char*)ntfs_malloc(buff_size);
  47. if (!buff)
  48. err_exit("Not enough memory");
  49. @@ -1585,6 +1589,7 @@
  50. void *fd;
  51. u32 indx_record_size;
  52. u32 csize;
  53. + u32 buff_size;
  54. u32 bytes_per_sector;
  55. u32 records_per_set;
  56. u32 clusters_per_set;
  57. @@ -1601,16 +1606,19 @@
  58. /*
  59. * Depending on the sizes, there may be several records
  60. * per cluster, or several clusters per record.
  61. + * Anyway, full clusters are needed for rescuing bad ones.
  62. */
  63. indx_record_size = image->ni->vol->indx_record_size;
  64. if (csize >= indx_record_size) {
  65. records_per_set = csize/indx_record_size;
  66. clusters_per_set = 1;
  67. + buff_size = csize;
  68. } else {
  69. clusters_per_set = indx_record_size/csize;
  70. records_per_set = 1;
  71. + buff_size = indx_record_size;
  72. }
  73. - buff = (char*)ntfs_malloc(indx_record_size);
  74. + buff = (char*)ntfs_malloc(buff_size);
  75. if (!buff)
  76. err_exit("Not enough memory");