* grub-core/fs/btrfs.c: Some minor cleanups.

This commit is contained in:
Szymon Janc 2011-08-24 11:24:10 +02:00
parent ec543969bf
commit 579c12fbb4

View file

@ -894,7 +894,7 @@ static grub_ssize_t
grub_btrfs_lzo_decompress(char *ibuf, grub_size_t isize, grub_off_t off, grub_btrfs_lzo_decompress(char *ibuf, grub_size_t isize, grub_off_t off,
char *obuf, grub_size_t osize) char *obuf, grub_size_t osize)
{ {
grub_uint32_t total_size, cblock_size, uncompressed = 0; grub_uint32_t total_size, cblock_size, ret = 0;
unsigned char buf[GRUB_BTRFS_LZO_BLOCK_SIZE]; unsigned char buf[GRUB_BTRFS_LZO_BLOCK_SIZE];
total_size = grub_le_to_cpu32 (grub_get_unaligned32 (ibuf)); total_size = grub_le_to_cpu32 (grub_get_unaligned32 (ibuf));
@ -909,6 +909,9 @@ grub_btrfs_lzo_decompress(char *ibuf, grub_size_t isize, grub_off_t off,
cblock_size = grub_le_to_cpu32 (grub_get_unaligned32 (ibuf)); cblock_size = grub_le_to_cpu32 (grub_get_unaligned32 (ibuf));
ibuf += sizeof (cblock_size); ibuf += sizeof (cblock_size);
if (cblock_size > GRUB_BTRFS_LZO_BLOCK_MAX_CSIZE)
return -1;
off -= GRUB_BTRFS_LZO_BLOCK_SIZE; off -= GRUB_BTRFS_LZO_BLOCK_SIZE;
ibuf += cblock_size; ibuf += cblock_size;
} }
@ -920,6 +923,9 @@ grub_btrfs_lzo_decompress(char *ibuf, grub_size_t isize, grub_off_t off,
cblock_size = grub_le_to_cpu32 (grub_get_unaligned32 (ibuf)); cblock_size = grub_le_to_cpu32 (grub_get_unaligned32 (ibuf));
ibuf += sizeof (cblock_size); ibuf += sizeof (cblock_size);
if (cblock_size > GRUB_BTRFS_LZO_BLOCK_MAX_CSIZE)
return -1;
/* Block partially filled with requested data. */ /* Block partially filled with requested data. */
if (off > 0 || osize < GRUB_BTRFS_LZO_BLOCK_SIZE) if (off > 0 || osize < GRUB_BTRFS_LZO_BLOCK_SIZE)
{ {
@ -929,28 +935,29 @@ grub_btrfs_lzo_decompress(char *ibuf, grub_size_t isize, grub_off_t off,
NULL) != LZO_E_OK) NULL) != LZO_E_OK)
return -1; return -1;
to_copy = grub_min(to_copy, usize);
grub_memcpy(obuf, buf + off, to_copy); grub_memcpy(obuf, buf + off, to_copy);
osize -= to_copy; osize -= to_copy;
uncompressed += to_copy; ret += to_copy;
obuf += to_copy; obuf += to_copy;
ibuf += cblock_size; ibuf += cblock_size;
off = 0; off = 0;
continue; continue;
} }
/* 'Main' case, decompress whole block directly to output buffer. */ /* Decompress whole block directly to output buffer. */
if (lzo1x_decompress_safe ((lzo_bytep)ibuf, cblock_size, (lzo_bytep)obuf, if (lzo1x_decompress_safe ((lzo_bytep)ibuf, cblock_size, (lzo_bytep)obuf,
&usize, NULL) != LZO_E_OK) &usize, NULL) != LZO_E_OK)
return -1; return -1;
osize -= usize; osize -= usize;
uncompressed += usize; ret += usize;
obuf += usize; obuf += usize;
ibuf += cblock_size; ibuf += cblock_size;
} }
return uncompressed; return ret;
} }
static grub_ssize_t static grub_ssize_t