diff mbox

vl.c: Add -L ? (or -L help) which lists data dirs.

Message ID 1463404297-13094-1-git-send-email-rjones@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Richard W.M. Jones May 16, 2016, 1:11 p.m. UTC
QEMU compiles a list of data directories from various sources.  When
consuming a QEMU binary it's useful to be able to get this list of
data directories: a primary reason is so you can list what BIOSes or
keymaps ship with this version of QEMU.  However without reproducing
the method that QEMU uses internally, it's not possible to get the
list of data directories.

This commit adds a simple -L "?" (alternately -L help) that just lists
out the data directories as qemu calculates them:

$ ./x86_64-softmmu/qemu-system-x86_64 -L help
/home/rjones/d/qemu/pc-bios
/usr/local/share/qemu

$ ./x86_64-softmmu/qemu-system-x86_64 -L /tmp -L \?
/tmp
/home/rjones/d/qemu/pc-bios
/usr/local/share/qemu

Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
---
 qemu-options.hx |  2 ++
 vl.c            | 13 ++++++++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)

Comments

Peter Maydell May 16, 2016, 1:28 p.m. UTC | #1
On 16 May 2016 at 14:11, Richard W.M. Jones <rjones@redhat.com> wrote:
> QEMU compiles a list of data directories from various sources.  When
> consuming a QEMU binary it's useful to be able to get this list of
> data directories: a primary reason is so you can list what BIOSes or
> keymaps ship with this version of QEMU.  However without reproducing
> the method that QEMU uses internally, it's not possible to get the
> list of data directories.
>
> This commit adds a simple -L "?" (alternately -L help) that just lists
> out the data directories as qemu calculates them:

The preferred syntax for help options should be "help"; the "?" is
basically there for backwards compatibility, and I think we should
avoid implicitly recommending it for new uses in commit messages, docs
or comments.

thanks
-- PMM
diff mbox

Patch

diff --git a/qemu-options.hx b/qemu-options.hx
index 6106520..49b73d4 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -3199,6 +3199,8 @@  STEXI
 @item -L  @var{path}
 @findex -L
 Set the directory for the BIOS, VGA BIOS and keymaps.
+
+To list all the data directories, use @code{-L ?} or @code{-L help}.
 ETEXI
 
 DEF("bios", HAS_ARG, QEMU_OPTION_bios, \
diff --git a/vl.c b/vl.c
index 5fd22cb..597cb00 100644
--- a/vl.c
+++ b/vl.c
@@ -2990,6 +2990,7 @@  int main(int argc, char **argv, char **envp)
     FILE *vmstate_dump_file = NULL;
     Error *main_loop_err = NULL;
     Error *err = NULL;
+    bool list_data_dirs = 0;
 
     qemu_init_cpu_loop();
     qemu_mutex_lock_iothread();
@@ -3371,7 +3372,9 @@  int main(int argc, char **argv, char **envp)
                 add_device_config(DEV_GDB, optarg);
                 break;
             case QEMU_OPTION_L:
-                if (data_dir_idx < ARRAY_SIZE(data_dir)) {
+                if (is_help_option(optarg)) {
+                    list_data_dirs = 1;
+                } else if (data_dir_idx < ARRAY_SIZE(data_dir)) {
                     data_dir[data_dir_idx++] = optarg;
                 }
                 break;
@@ -4128,6 +4131,14 @@  int main(int argc, char **argv, char **envp)
         data_dir[data_dir_idx++] = CONFIG_QEMU_DATADIR;
     }
 
+    /* -L ? lists the data directories and exits. */
+    if (list_data_dirs) {
+        for (i = 0; i < data_dir_idx; i++) {
+            printf("%s\n", data_dir[i]);
+        }
+        exit(0);
+    }
+
     smp_parse(qemu_opts_find(qemu_find_opts("smp-opts"), NULL));
 
     machine_class->max_cpus = machine_class->max_cpus ?: 1; /* Default to UP */