All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@web.de>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [PATCH 1/3] Modular command line options
Date: Thu, 22 May 2008 14:49:08 +0200	[thread overview]
Message-ID: <48356BC4.3090805@web.de> (raw)
In-Reply-To: <18485.18619.634431.859466@mariner.uk.xensource.com>

[-- Attachment #1: Type: text/plain, Size: 2487 bytes --]

Ian Jackson wrote:
> Jan Kiszka writes ("[Qemu-devel] [PATCH 1/3] Modular command line options"):
>> Following up on my earlier proposal to introduce per-machine command
>> line options, this version provides a more generic approach. It should
>> also be usable for scenarios like per-arch or per-accelerator.
> 
> I approve of splitting the code up like this, and having a
> table-driven parsing arrangement.  But ideally we could get rid of
> `index' and the giant switch() statements too.  Something more like
> 
>   typedef void QEMUOptionParser(struct QEMUOption *option, const char *optarg);
> 
>   typedef struct QEMUOption {
>       const char *name, *helpstring;
>       QEMUOptionParser handler;
>       int flags;

Ack. This just enforces a bit more effort to convert the existing
opts... :->

>       int int_for_handler;
>       void *void_for_handler;

I don't think there is an need for both. A plain

	void *parser_opaque;

should suffice as the user can perfectly typecast the void to int.

>   } QEMUOption;
> 
>   qemu_register_option_set(const QEMUOption *options);

Here I would then suggest

	qemu_register_option_set(const char *set_name,
	                         const QEMUOption *options);

to save the chance for visually grouping options.

> 
> We pass the QEMUOption* to the parser handler so it can see the
> canonical name and any extra stuff put in the option structure.
> and in vl.c you'd do something like this:
> 
>   static const QEMUOption basic_options[]= {
>     ...
>     { "hda", opthandler_drive, 0, 0 },
>     { "hdb", opthandler_drive, 0, 1 },
>     { "hdc", opthandler_drive, 0, 3 },
>     { "hdd", opthandler_drive, 0, 4 },
>     ...
>     { 0 } /* null entry is required to terminate the table */
>   }
> 
>     qemu_register_option_set(basic_options);
> 
> The linked list of option tables is private to the option parser.

Good idea. Then the structure should look like this:

struct QEMUOptionSet {
	const char *name;
	const QEMUOption *options;
	struct QEMUOptionSet *next;
};


OK, as this version would require even more refactoring, please let us
agree on the critical data structures first. Specifically, this takes an
ack from the maintainers.

Jan


PS: The element set of a future config file format could perfectly grow
with each QEMUOption registered to the core. So I also see no conflict
of this effort with the config file specification work.


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 254 bytes --]

  parent reply	other threads:[~2008-05-22 12:49 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-05-20 23:51 [Qemu-devel] [PATCH 1/3] Modular command line options Jan Kiszka
2008-05-21 19:17 ` Glauber Costa
2008-05-21 20:58 ` Fabrice Bellard
2008-05-22 10:11   ` Ian Jackson
2008-05-22 10:19 ` Ian Jackson
2008-05-22 10:20   ` Ian Jackson
2008-05-22 12:49   ` Jan Kiszka [this message]
2008-05-23 13:29     ` [Qemu-devel] " Glauber Costa
2008-05-23 15:12       ` Jan Kiszka

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=48356BC4.3090805@web.de \
    --to=jan.kiszka@web.de \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.