| .. | .. |
|---|
| 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); |
|---|