.. | .. |
---|
126 | 126 | { |
---|
127 | 127 | struct ubifs_compressor *compr = ubifs_compressors[tfm->compressor]; |
---|
128 | 128 | int err; |
---|
| 129 | + size_t tmp_len = *dlen; |
---|
129 | 130 | |
---|
130 | 131 | if (compr->compr_type == UBIFS_COMPR_NONE) { |
---|
131 | 132 | memcpy(dst, src, slen); |
---|
.. | .. |
---|
133 | 134 | return 0; |
---|
134 | 135 | } |
---|
135 | 136 | |
---|
136 | | - err = compr->decompress(src, slen, dst, (size_t *)dlen); |
---|
| 137 | + err = compr->decompress(src, slen, dst, &tmp_len); |
---|
137 | 138 | if (err) |
---|
138 | 139 | ubifs_err(c, "cannot decompress %d bytes, compressor %s, " |
---|
139 | 140 | "error %d", slen, compr->name, err); |
---|
140 | 141 | |
---|
| 142 | + *dlen = tmp_len; |
---|
141 | 143 | return err; |
---|
142 | 144 | |
---|
143 | 145 | return 0; |
---|
.. | .. |
---|
466 | 468 | dbg_gen("cannot find next direntry, error %d", err); |
---|
467 | 469 | |
---|
468 | 470 | out_free: |
---|
469 | | - if (file->private_data) |
---|
470 | | - kfree(file->private_data); |
---|
471 | | - if (file) |
---|
472 | | - free(file); |
---|
473 | | - if (dentry) |
---|
474 | | - free(dentry); |
---|
475 | | - if (dir) |
---|
476 | | - free(dir); |
---|
| 471 | + kfree(file->private_data); |
---|
| 472 | + free(file); |
---|
| 473 | + free(dentry); |
---|
| 474 | + free(dir); |
---|
477 | 475 | |
---|
478 | 476 | return ret; |
---|
479 | 477 | } |
---|
.. | .. |
---|
801 | 799 | |
---|
802 | 800 | if (last_block_size) |
---|
803 | 801 | dlen = last_block_size; |
---|
| 802 | + else if (ret) |
---|
| 803 | + dlen = UBIFS_BLOCK_SIZE; |
---|
804 | 804 | else |
---|
805 | 805 | dlen = le32_to_cpu(dn->size); |
---|
806 | 806 | |
---|