{"prefix", 'p', 0, N_("Base directory for hash list."), N_("DIRECTORY"),
ARG_TYPE_STRING},
{"keep-going", 'k', 0, N_("Don't stop after first error."), 0, 0},
+ {"uncompress", 'u', 0, N_("Uncompress file before checksumming."), 0, 0},
{0, 0, 0, 0, 0, 0}
};
static grub_err_t
check_list (const gcry_md_spec_t *hash, const char *hashfilename,
- const char *prefix, int keep)
+ const char *prefix, int keep, int uncompress)
{
grub_file_t hashlist, file;
char *buf = NULL;
filename = grub_xasprintf ("%s/%s", prefix, p);
if (!filename)
return grub_errno;
- grub_file_filter_disable_compression ();
+ if (!uncompress)
+ grub_file_filter_disable_compression ();
file = grub_file_open (filename);
grub_free (filename);
}
else
{
- grub_file_filter_disable_compression ();
+ if (!uncompress)
+ grub_file_filter_disable_compression ();
file = grub_file_open (p);
}
if (!file)
const gcry_md_spec_t *hash;
unsigned i;
int keep = state[3].set;
+ int uncompress = state[4].set;
unsigned unread = 0;
for (i = 0; i < ARRAY_SIZE (aliases); i++)
if (argc != 0)
return grub_error (GRUB_ERR_BAD_ARGUMENT,
"--check is incompatible with file list");
- return check_list (hash, state[1].arg, prefix, keep);
+ return check_list (hash, state[1].arg, prefix, keep, uncompress);
}
for (i = 0; i < (unsigned) argc; i++)
grub_file_t file;
grub_err_t err;
unsigned j;
- grub_file_filter_disable_compression ();
+ if (!uncompress)
+ grub_file_filter_disable_compression ();
file = grub_file_open (args[i]);
if (!file)
{