From 319a0fd7d7e9ebbb71ca6930abfc20777cb4aacc Mon Sep 17 00:00:00 2001 From: Lasse Collin Date: Tue, 1 Sep 2009 20:40:01 +0300 Subject: Refactored option parsing. --- src/xz/options.c | 70 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/src/xz/options.c b/src/xz/options.c index c52f61e0..6fdf3a26 100644 --- a/src/xz/options.c +++ b/src/xz/options.c @@ -87,47 +87,47 @@ parse_options(const char *str, const option_map *opts, "pairs separated with commas"), str); // Look for the option name from the option map. - bool found = false; - for (size_t i = 0; opts[i].name != NULL; ++i) { - if (strcmp(name, opts[i].name) != 0) - continue; - - if (opts[i].map != NULL) { - // value is a string which we should map - // to an integer. - size_t j; - for (j = 0; opts[i].map[j].name != NULL; ++j) { - if (strcmp(opts[i].map[j].name, value) - == 0) - break; - } - - if (opts[i].map[j].name == NULL) - message_fatal(_("%s: Invalid option " - "value"), value); - - set(filter_options, i, opts[i].map[j].id, - value); + size_t i = 0; + while (true) { + if (opts[i].name == NULL) + message_fatal(_("%s: Invalid option name"), + name); + + if (strcmp(name, opts[i].name) == 0) + break; - } else if (opts[i].min == UINT64_MAX) { - // value is a special string that will be - // parsed by set(). - set(filter_options, i, 0, value); + ++i; + } - } else { - // value is an integer. - const uint64_t v = str_to_uint64(name, value, - opts[i].min, opts[i].max); - set(filter_options, i, v, value); + // Option was found from the map. See how we should handle it. + if (opts[i].map != NULL) { + // value is a string which we should map + // to an integer. + size_t j; + for (j = 0; opts[i].map[j].name != NULL; ++j) { + if (strcmp(opts[i].map[j].name, value) == 0) + break; } - found = true; - break; - } + if (opts[i].map[j].name == NULL) + message_fatal(_("%s: Invalid option value"), + value); + + set(filter_options, i, opts[i].map[j].id, value); - if (!found) - message_fatal(_("%s: Invalid option name"), name); + } else if (opts[i].min == UINT64_MAX) { + // value is a special string that will be + // parsed by set(). + set(filter_options, i, 0, value); + + } else { + // value is an integer. + const uint64_t v = str_to_uint64(name, value, + opts[i].min, opts[i].max); + set(filter_options, i, v, value); + } + // Check if it was the last option. if (split == NULL) break; -- cgit v1.2.3