Merge tag 'dm-pull-6feb20' of https://gitlab.denx.de/u-boot/custodians/u-boot-dm
[oweals/u-boot.git] / fs / fat / fat_write.c
index 320a8a7a87d4bfb485bbfcf71c357cb7e266d498..4f96699e36331427aa20e7134742d8f641bd99cf 100644 (file)
@@ -795,6 +795,8 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer,
 
                        newclust = get_fatent(mydata, endclust);
 
+                       if (newclust != endclust + 1)
+                               break;
                        if (IS_LAST_CLUST(newclust, mydata->fatsize))
                                break;
                        if (CHECK_CLUST(newclust, mydata->fatsize)) {
@@ -812,7 +814,9 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer,
                        offset = 0;
                else
                        offset = pos - cur_pos;
-               wsize = min(cur_pos + actsize, filesize) - pos;
+               wsize = min_t(unsigned long long, actsize, filesize - cur_pos);
+               wsize -= offset;
+
                if (get_set_cluster(mydata, curclust, offset,
                                    buffer, wsize, &actsize)) {
                        printf("Error get-and-setting cluster\n");
@@ -825,8 +829,6 @@ set_contents(fsdata *mydata, dir_entry *dentptr, loff_t pos, __u8 *buffer,
                if (filesize <= cur_pos)
                        break;
 
-               /* CHECK: newclust = get_fatent(mydata, endclust); */
-
                if (IS_LAST_CLUST(newclust, mydata->fatsize))
                        /* no more clusters */
                        break;