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

Generated by cgit