[coreboot-gerrit] New patch to review for coreboot: cbfstool: Factor out compression algorithm list

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Wed Jul 15 21:52:57 CEST 2015


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/10931

-gerrit

commit 43ae3c69931e581ef52ae7fdc0fc37da073e16be
Author: Sol Boucher <solb at chromium.org>
Date:   Thu May 7 21:00:05 2015 -0700

    cbfstool: Factor out compression algorithm list
    
    Parse compression algorithm arguments using a single list.
    
    Change-Id: Idc5b14a53377b29964f24221e42db6e09a497d48
    Signed-off-by: Sol Boucher <solb at chromium.org>
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Change-Id: I1a117a9473e895feaf455bb30d0f945f57de51eb
    Original-Signed-off-by: Sol Boucher <solb at chromium.org>
---
 util/cbfstool/cbfs_image.c | 12 ++++++++++++
 util/cbfstool/cbfs_image.h |  4 ++++
 util/cbfstool/cbfstool.c   | 14 +++++++-------
 3 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/util/cbfstool/cbfs_image.c b/util/cbfstool/cbfs_image.c
index 783999c..f5fddcb 100644
--- a/util/cbfstool/cbfs_image.c
+++ b/util/cbfstool/cbfs_image.c
@@ -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)
diff --git a/util/cbfstool/cbfs_image.h b/util/cbfstool/cbfs_image.h
index 5df5dd2..cb2935b 100644
--- a/util/cbfstool/cbfs_image.h
+++ b/util/cbfstool/cbfs_image.h
@@ -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);
diff --git a/util/cbfstool/cbfstool.c b/util/cbfstool/cbfstool.c
index cae1227..b6a486f 100644
--- a/util/cbfstool/cbfstool.c
+++ b/util/cbfstool/cbfstool.c
@@ -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;



More information about the coreboot-gerrit mailing list