aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLasse Collin <lasse.collin@tukaani.org>2009-09-01 20:40:01 +0300
committerLasse Collin <lasse.collin@tukaani.org>2009-09-01 20:40:01 +0300
commit319a0fd7d7e9ebbb71ca6930abfc20777cb4aacc (patch)
tree35fec1c634982479deff94e535899543fc8fc211
parentFix options parsing bug in xz. (diff)
downloadxz-319a0fd7d7e9ebbb71ca6930abfc20777cb4aacc.tar.xz
Refactored option parsing.
Diffstat (limited to '')
-rw-r--r--src/xz/options.c70
1 files 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;