cbfstool: Factor out compression algorithm list

Parse compression algorithm arguments using a single list.

Change-Id: Idc5b14a53377b29964f24221e42db6e09a497d48
Signed-off-by: Sol Boucher <solb@chromium.org>
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Original-Change-Id: I1a117a9473e895feaf455bb30d0f945f57de51eb
Original-Signed-off-by: Sol Boucher <solb@chromium.org>
Reviewed-on: http://review.coreboot.org/10931
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
Sol Boucher 2015-05-07 21:00:05 -07:00 committed by Patrick Georgi
parent 6533671ce0
commit ec42486055
3 changed files with 23 additions and 7 deletions

View File

@ -96,11 +96,23 @@ static const char *lookup_name_by_type(const struct typedesc_t *desc, uint32_t t
return default_value;
}
static int lookup_type_by_name(const struct typedesc_t *desc, const char *name)
{
int i;
for (i = 0; desc[i].name && strcasecmp(name, desc[i].name); ++i);
return desc[i].name ? (int)desc[i].type : -1;
}
static const char *get_cbfs_entry_type_name(uint32_t type)
{
return lookup_name_by_type(types_cbfs_entry, type, "(unknown)");
}
int cbfs_parse_comp_algo(const char *name)
{
return lookup_type_by_name(types_cbfs_compression, name);
}
/* CBFS image */
static size_t cbfs_calculate_file_header_size(const char *name)

View File

@ -32,6 +32,10 @@ struct cbfs_image {
struct cbfs_header header;
};
/* Given the string name of a compression algorithm, return the corresponding
* enum comp_algo if it's supported, or a number < 0 otherwise. */
int cbfs_parse_comp_algo(const char *name);
/* Given a pointer, serialize the header from host-native byte format
* to cbfs format, i.e. big-endian. */
void cbfs_put_header(void *dest, const struct cbfs_header *header);

View File

@ -973,15 +973,15 @@ int main(int argc, char **argv)
WARN("Unknown type '%s' ignored\n",
optarg);
break;
case 'c':
if (!strncasecmp(optarg, "lzma", 5))
param.compression = CBFS_COMPRESS_LZMA;
else if (!strncasecmp(optarg, "none", 5))
param.compression = CBFS_COMPRESS_NONE;
case 'c': {
int algo = cbfs_parse_comp_algo(optarg);
if (algo >= 0)
param.compression = algo;
else
WARN("Unknown compression '%s'"
" ignored.\n", optarg);
WARN("Unknown compression '%s' ignored.\n",
optarg);
break;
}
case 'M':
param.fmap = optarg;
break;