qemu-option.c (70b9433109ed99217b812f19800de550e2e0ecd5) qemu-option.c (c6bd8c706a799eb0fece99f468aaa22b818036f3)
1/*
2 * Commandline option parsing functions
3 *
4 * Copyright (c) 2003-2008 Fabrice Bellard
5 * Copyright (c) 2009 Kevin Wolf <kwolf@redhat.com>
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal

--- 118 unchanged lines hidden (view full) ---

127 Error **errp)
128{
129 if (value != NULL) {
130 if (!strcmp(value, "on")) {
131 *ret = 1;
132 } else if (!strcmp(value, "off")) {
133 *ret = 0;
134 } else {
1/*
2 * Commandline option parsing functions
3 *
4 * Copyright (c) 2003-2008 Fabrice Bellard
5 * Copyright (c) 2009 Kevin Wolf <kwolf@redhat.com>
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal

--- 118 unchanged lines hidden (view full) ---

127 Error **errp)
128{
129 if (value != NULL) {
130 if (!strcmp(value, "on")) {
131 *ret = 1;
132 } else if (!strcmp(value, "off")) {
133 *ret = 0;
134 } else {
135 error_set(errp,QERR_INVALID_PARAMETER_VALUE, name, "'on' or 'off'");
135 error_setg(errp, QERR_INVALID_PARAMETER_VALUE,
136 name, "'on' or 'off'");
136 }
137 } else {
138 *ret = 1;
139 }
140}
141
142static void parse_option_number(const char *name, const char *value,
143 uint64_t *ret, Error **errp)
144{
145 char *postfix;
146 uint64_t number;
147
148 if (value != NULL) {
149 number = strtoull(value, &postfix, 0);
150 if (*postfix != '\0') {
137 }
138 } else {
139 *ret = 1;
140 }
141}
142
143static void parse_option_number(const char *name, const char *value,
144 uint64_t *ret, Error **errp)
145{
146 char *postfix;
147 uint64_t number;
148
149 if (value != NULL) {
150 number = strtoull(value, &postfix, 0);
151 if (*postfix != '\0') {
151 error_set(errp, QERR_INVALID_PARAMETER_VALUE, name, "a number");
152 error_setg(errp, QERR_INVALID_PARAMETER_VALUE, name, "a number");
152 return;
153 }
154 *ret = number;
155 } else {
153 return;
154 }
155 *ret = number;
156 } else {
156 error_set(errp, QERR_INVALID_PARAMETER_VALUE, name, "a number");
157 error_setg(errp, QERR_INVALID_PARAMETER_VALUE, name, "a number");
157 }
158}
159
160static const QemuOptDesc *find_desc_by_name(const QemuOptDesc *desc,
161 const char *name)
162{
163 int i;
164

--- 28 unchanged lines hidden (view full) ---

193 case 'k':
194 sizef *= 1024;
195 /* fall through */
196 case 'b':
197 case '\0':
198 *ret = (uint64_t) sizef;
199 break;
200 default:
158 }
159}
160
161static const QemuOptDesc *find_desc_by_name(const QemuOptDesc *desc,
162 const char *name)
163{
164 int i;
165

--- 28 unchanged lines hidden (view full) ---

194 case 'k':
195 sizef *= 1024;
196 /* fall through */
197 case 'b':
198 case '\0':
199 *ret = (uint64_t) sizef;
200 break;
201 default:
201 error_set(errp, QERR_INVALID_PARAMETER_VALUE, name, "a size");
202 error_setg(errp, QERR_INVALID_PARAMETER_VALUE, name, "a size");
202#if 0 /* conversion from qerror_report() to error_set() broke this: */
203 error_printf_unless_qmp("You may use k, M, G or T suffixes for "
204 "kilobytes, megabytes, gigabytes and terabytes.\n");
205#endif
206 return;
207 }
208 } else {
203#if 0 /* conversion from qerror_report() to error_set() broke this: */
204 error_printf_unless_qmp("You may use k, M, G or T suffixes for "
205 "kilobytes, megabytes, gigabytes and terabytes.\n");
206#endif
207 return;
208 }
209 } else {
209 error_set(errp, QERR_INVALID_PARAMETER_VALUE, name, "a size");
210 error_setg(errp, QERR_INVALID_PARAMETER_VALUE, name, "a size");
210 }
211}
212
213bool has_help_option(const char *param)
214{
215 size_t buflen = strlen(param) + 1;
216 char *buf = g_malloc(buflen);
217 const char *p = param;

--- 304 unchanged lines hidden (view full) ---

522 bool prepend, Error **errp)
523{
524 QemuOpt *opt;
525 const QemuOptDesc *desc;
526 Error *local_err = NULL;
527
528 desc = find_desc_by_name(opts->list->desc, name);
529 if (!desc && !opts_accepts_any(opts)) {
211 }
212}
213
214bool has_help_option(const char *param)
215{
216 size_t buflen = strlen(param) + 1;
217 char *buf = g_malloc(buflen);
218 const char *p = param;

--- 304 unchanged lines hidden (view full) ---

523 bool prepend, Error **errp)
524{
525 QemuOpt *opt;
526 const QemuOptDesc *desc;
527 Error *local_err = NULL;
528
529 desc = find_desc_by_name(opts->list->desc, name);
530 if (!desc && !opts_accepts_any(opts)) {
530 error_set(errp, QERR_INVALID_PARAMETER, name);
531 error_setg(errp, QERR_INVALID_PARAMETER, name);
531 return;
532 }
533
534 opt = g_malloc0(sizeof(*opt));
535 opt->name = g_strdup(name);
536 opt->opts = opts;
537 if (prepend) {
538 QTAILQ_INSERT_HEAD(&opts->head, opt, next);

--- 19 unchanged lines hidden (view full) ---

558 Error **errp)
559{
560 QemuOpt *opt;
561 const QemuOptDesc *desc = opts->list->desc;
562
563 opt = g_malloc0(sizeof(*opt));
564 opt->desc = find_desc_by_name(desc, name);
565 if (!opt->desc && !opts_accepts_any(opts)) {
532 return;
533 }
534
535 opt = g_malloc0(sizeof(*opt));
536 opt->name = g_strdup(name);
537 opt->opts = opts;
538 if (prepend) {
539 QTAILQ_INSERT_HEAD(&opts->head, opt, next);

--- 19 unchanged lines hidden (view full) ---

559 Error **errp)
560{
561 QemuOpt *opt;
562 const QemuOptDesc *desc = opts->list->desc;
563
564 opt = g_malloc0(sizeof(*opt));
565 opt->desc = find_desc_by_name(desc, name);
566 if (!opt->desc && !opts_accepts_any(opts)) {
566 error_set(errp, QERR_INVALID_PARAMETER, name);
567 error_setg(errp, QERR_INVALID_PARAMETER, name);
567 g_free(opt);
568 return;
569 }
570
571 opt->name = g_strdup(name);
572 opt->opts = opts;
573 opt->value.boolean = !!val;
574 opt->str = g_strdup(val ? "on" : "off");

--- 4 unchanged lines hidden (view full) ---

579 Error **errp)
580{
581 QemuOpt *opt;
582 const QemuOptDesc *desc = opts->list->desc;
583
584 opt = g_malloc0(sizeof(*opt));
585 opt->desc = find_desc_by_name(desc, name);
586 if (!opt->desc && !opts_accepts_any(opts)) {
568 g_free(opt);
569 return;
570 }
571
572 opt->name = g_strdup(name);
573 opt->opts = opts;
574 opt->value.boolean = !!val;
575 opt->str = g_strdup(val ? "on" : "off");

--- 4 unchanged lines hidden (view full) ---

580 Error **errp)
581{
582 QemuOpt *opt;
583 const QemuOptDesc *desc = opts->list->desc;
584
585 opt = g_malloc0(sizeof(*opt));
586 opt->desc = find_desc_by_name(desc, name);
587 if (!opt->desc && !opts_accepts_any(opts)) {
587 error_set(errp, QERR_INVALID_PARAMETER, name);
588 error_setg(errp, QERR_INVALID_PARAMETER, name);
588 g_free(opt);
589 return;
590 }
591
592 opt->name = g_strdup(name);
593 opt->opts = opts;
594 opt->value.uint = val;
595 opt->str = g_strdup_printf("%" PRId64, val);

--- 39 unchanged lines hidden (view full) ---

635
636QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id,
637 int fail_if_exists, Error **errp)
638{
639 QemuOpts *opts = NULL;
640
641 if (id) {
642 if (!id_wellformed(id)) {
589 g_free(opt);
590 return;
591 }
592
593 opt->name = g_strdup(name);
594 opt->opts = opts;
595 opt->value.uint = val;
596 opt->str = g_strdup_printf("%" PRId64, val);

--- 39 unchanged lines hidden (view full) ---

636
637QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id,
638 int fail_if_exists, Error **errp)
639{
640 QemuOpts *opts = NULL;
641
642 if (id) {
643 if (!id_wellformed(id)) {
643 error_set(errp,QERR_INVALID_PARAMETER_VALUE, "id", "an identifier");
644 error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "id",
645 "an identifier");
644#if 0 /* conversion from qerror_report() to error_set() broke this: */
645 error_printf_unless_qmp("Identifiers consist of letters, digits, '-', '.', '_', starting with a letter.\n");
646#endif
647 return NULL;
648 }
649 opts = qemu_opts_find(list, id);
650 if (opts != NULL) {
651 if (fail_if_exists && !list->merge_lists) {

--- 398 unchanged lines hidden (view full) ---

1050 QemuOpt *opt;
1051 Error *local_err = NULL;
1052
1053 assert(opts_accepts_any(opts));
1054
1055 QTAILQ_FOREACH(opt, &opts->head, next) {
1056 opt->desc = find_desc_by_name(desc, opt->name);
1057 if (!opt->desc) {
646#if 0 /* conversion from qerror_report() to error_set() broke this: */
647 error_printf_unless_qmp("Identifiers consist of letters, digits, '-', '.', '_', starting with a letter.\n");
648#endif
649 return NULL;
650 }
651 opts = qemu_opts_find(list, id);
652 if (opts != NULL) {
653 if (fail_if_exists && !list->merge_lists) {

--- 398 unchanged lines hidden (view full) ---

1052 QemuOpt *opt;
1053 Error *local_err = NULL;
1054
1055 assert(opts_accepts_any(opts));
1056
1057 QTAILQ_FOREACH(opt, &opts->head, next) {
1058 opt->desc = find_desc_by_name(desc, opt->name);
1059 if (!opt->desc) {
1058 error_set(errp, QERR_INVALID_PARAMETER, opt->name);
1060 error_setg(errp, QERR_INVALID_PARAMETER, opt->name);
1059 return;
1060 }
1061
1062 qemu_opt_parse(opt, &local_err);
1063 if (local_err) {
1064 error_propagate(errp, local_err);
1065 return;
1066 }

--- 112 unchanged lines hidden ---
1061 return;
1062 }
1063
1064 qemu_opt_parse(opt, &local_err);
1065 if (local_err) {
1066 error_propagate(errp, local_err);
1067 return;
1068 }

--- 112 unchanged lines hidden ---