.. | .. |
---|
56 | 56 | lbaint_t blk; |
---|
57 | 57 | lbaint_t blkcnt; |
---|
58 | 58 | lbaint_t blks; |
---|
59 | | - uint32_t bytes_written = 0; |
---|
| 59 | + uint64_t bytes_written = 0; |
---|
60 | 60 | unsigned int chunk; |
---|
61 | 61 | unsigned int offset; |
---|
62 | | - unsigned int chunk_data_sz; |
---|
| 62 | + uint64_t chunk_data_sz; |
---|
63 | 63 | uint32_t *fill_buf = NULL; |
---|
64 | 64 | uint32_t fill_val; |
---|
65 | 65 | sparse_header_t *sparse_header; |
---|
.. | .. |
---|
130 | 130 | sizeof(chunk_header_t)); |
---|
131 | 131 | } |
---|
132 | 132 | |
---|
133 | | - chunk_data_sz = sparse_header->blk_sz * chunk_header->chunk_sz; |
---|
134 | | - blkcnt = chunk_data_sz / info->blksz; |
---|
| 133 | + chunk_data_sz = ((u64)sparse_header->blk_sz) * chunk_header->chunk_sz; |
---|
| 134 | + blkcnt = DIV_ROUND_UP_ULL(chunk_data_sz, info->blksz); |
---|
135 | 135 | switch (chunk_header->chunk_type) { |
---|
136 | 136 | case CHUNK_TYPE_RAW: |
---|
137 | 137 | if (chunk_header->total_sz != |
---|
.. | .. |
---|
161 | 161 | return; |
---|
162 | 162 | } |
---|
163 | 163 | blk += blks; |
---|
164 | | - bytes_written += blkcnt * info->blksz; |
---|
| 164 | + bytes_written += ((u64)blkcnt) * info->blksz; |
---|
165 | 165 | total_blocks += chunk_header->chunk_sz; |
---|
166 | 166 | data += chunk_data_sz; |
---|
167 | 167 | break; |
---|
.. | .. |
---|
222 | 222 | blk += blks; |
---|
223 | 223 | i += j; |
---|
224 | 224 | } |
---|
225 | | - bytes_written += blkcnt * info->blksz; |
---|
226 | | - total_blocks += chunk_data_sz / sparse_header->blk_sz; |
---|
| 225 | + bytes_written += ((u64)blkcnt) * info->blksz; |
---|
| 226 | + total_blocks += DIV_ROUND_UP_ULL(chunk_data_sz, |
---|
| 227 | + sparse_header->blk_sz); |
---|
227 | 228 | free(fill_buf); |
---|
228 | 229 | break; |
---|
229 | 230 | |
---|
.. | .. |
---|
253 | 254 | |
---|
254 | 255 | debug("Wrote %d blocks, expected to write %d blocks\n", |
---|
255 | 256 | total_blocks, sparse_header->total_blks); |
---|
256 | | - printf("........ wrote %u bytes to '%s'\n", bytes_written, part_name); |
---|
| 257 | + printf("........ wrote %llu bytes to '%s'\n", bytes_written, part_name); |
---|
257 | 258 | |
---|
258 | 259 | if (total_blocks != sparse_header->total_blks) |
---|
259 | 260 | fastboot_fail("sparse image write failure", response); |
---|