* grub-core/fs/ntfs.c (read_run_data): Rewrite using bitfields.
Saves 40 bytes on compressed image.
This commit is contained in:
parent
47601ffe73
commit
1437da5440
2 changed files with 20 additions and 20 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2013-10-21 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/fs/ntfs.c (read_run_data): Rewrite using bitfields.
|
||||||
|
|
||||||
|
Saves 40 bytes on compressed image.
|
||||||
|
|
||||||
2013-10-21 Vladimir Serbinenko <phcoder@gmail.com>
|
2013-10-21 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* grub-core/fs/ntfs.c (grub_ntfs_iterate_dir): Use grub_uint8_t for
|
* grub-core/fs/ntfs.c (grub_ntfs_iterate_dir): Use grub_uint8_t for
|
||||||
|
|
|
@ -283,25 +283,17 @@ locate_attr (struct grub_ntfs_attr *at, struct grub_ntfs_file *mft,
|
||||||
return pa;
|
return pa;
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_uint8_t *
|
static grub_disk_addr_t
|
||||||
read_run_data (grub_uint8_t *run, int nn, grub_disk_addr_t * val, int sig)
|
read_run_data (const grub_uint8_t *run, int nn, int sig)
|
||||||
{
|
{
|
||||||
grub_disk_addr_t r, v;
|
grub_uint64_t r = 0;
|
||||||
|
|
||||||
r = 0;
|
if (sig && nn && (run[nn - 1] & 0x80))
|
||||||
v = 1;
|
r = -1;
|
||||||
|
|
||||||
while (nn--)
|
grub_memcpy (&r, run, nn);
|
||||||
{
|
|
||||||
r += v * (*(run++));
|
|
||||||
v <<= 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((sig) && (r & (v >> 1)))
|
return grub_le_to_cpu64 (r);
|
||||||
r -= v;
|
|
||||||
|
|
||||||
*val = r;
|
|
||||||
return run;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_err_t
|
grub_err_t
|
||||||
|
@ -313,8 +305,9 @@ grub_ntfs_read_run_list (struct grub_ntfs_rlst * ctx)
|
||||||
|
|
||||||
run = ctx->cur_run;
|
run = ctx->cur_run;
|
||||||
retry:
|
retry:
|
||||||
c1 = ((*run) & 0xF);
|
c1 = ((*run) & 0x7);
|
||||||
c2 = ((*run) >> 4);
|
c2 = ((*run) >> 4) & 0x7;
|
||||||
|
run++;
|
||||||
if (!c1)
|
if (!c1)
|
||||||
{
|
{
|
||||||
if ((ctx->attr) && (ctx->attr->flags & GRUB_NTFS_AF_ALST))
|
if ((ctx->attr) && (ctx->attr->flags & GRUB_NTFS_AF_ALST))
|
||||||
|
@ -338,10 +331,11 @@ retry:
|
||||||
}
|
}
|
||||||
return grub_error (GRUB_ERR_BAD_FS, "run list overflown");
|
return grub_error (GRUB_ERR_BAD_FS, "run list overflown");
|
||||||
}
|
}
|
||||||
run = read_run_data (run + 1, c1, &val, 0); /* length of current VCN */
|
|
||||||
ctx->curr_vcn = ctx->next_vcn;
|
ctx->curr_vcn = ctx->next_vcn;
|
||||||
ctx->next_vcn += val;
|
ctx->next_vcn += read_run_data (run, c1, 0); /* length of current VCN */
|
||||||
run = read_run_data (run, c2, &val, 1); /* offset to previous LCN */
|
run += c1;
|
||||||
|
val = read_run_data (run, c2, 1); /* offset to previous LCN */
|
||||||
|
run += c2;
|
||||||
ctx->curr_lcn += val;
|
ctx->curr_lcn += val;
|
||||||
if (val == 0)
|
if (val == 0)
|
||||||
ctx->flags |= GRUB_NTFS_RF_BLNK;
|
ctx->flags |= GRUB_NTFS_RF_BLNK;
|
||||||
|
|
Loading…
Add table
Reference in a new issue