|
@@ -24,6 +24,7 @@
|
|
|
|
|
|
#include "qemu/osdep.h"
|
|
#include "qemu/osdep.h"
|
|
#include "qemu-common.h"
|
|
#include "qemu-common.h"
|
|
|
|
+#include "qemu/datadir.h"
|
|
#include "qemu/units.h"
|
|
#include "qemu/units.h"
|
|
#include "hw/boards.h"
|
|
#include "hw/boards.h"
|
|
#include "hw/qdev-properties.h"
|
|
#include "hw/qdev-properties.h"
|
|
@@ -128,8 +129,6 @@ typedef struct BlockdevOptionsQueueEntry {
|
|
typedef QSIMPLEQ_HEAD(, BlockdevOptionsQueueEntry) BlockdevOptionsQueue;
|
|
typedef QSIMPLEQ_HEAD(, BlockdevOptionsQueueEntry) BlockdevOptionsQueue;
|
|
|
|
|
|
static const char *cpu_option;
|
|
static const char *cpu_option;
|
|
-static const char *data_dir[16];
|
|
|
|
-static int data_dir_idx;
|
|
|
|
static const char *mem_path;
|
|
static const char *mem_path;
|
|
static const char *boot_order;
|
|
static const char *boot_order;
|
|
static const char *boot_once;
|
|
static const char *boot_once;
|
|
@@ -1994,59 +1993,6 @@ static void parse_display(const char *p)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-char *qemu_find_file(int type, const char *name)
|
|
|
|
-{
|
|
|
|
- int i;
|
|
|
|
- const char *subdir;
|
|
|
|
- char *buf;
|
|
|
|
-
|
|
|
|
- /* Try the name as a straight path first */
|
|
|
|
- if (access(name, R_OK) == 0) {
|
|
|
|
- trace_load_file(name, name);
|
|
|
|
- return g_strdup(name);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- switch (type) {
|
|
|
|
- case QEMU_FILE_TYPE_BIOS:
|
|
|
|
- subdir = "";
|
|
|
|
- break;
|
|
|
|
- case QEMU_FILE_TYPE_KEYMAP:
|
|
|
|
- subdir = "keymaps/";
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- abort();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- for (i = 0; i < data_dir_idx; i++) {
|
|
|
|
- buf = g_strdup_printf("%s/%s%s", data_dir[i], subdir, name);
|
|
|
|
- if (access(buf, R_OK) == 0) {
|
|
|
|
- trace_load_file(name, buf);
|
|
|
|
- return buf;
|
|
|
|
- }
|
|
|
|
- g_free(buf);
|
|
|
|
- }
|
|
|
|
- return NULL;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-void qemu_add_data_dir(char *path)
|
|
|
|
-{
|
|
|
|
- int i;
|
|
|
|
-
|
|
|
|
- if (path == NULL) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- if (data_dir_idx == ARRAY_SIZE(data_dir)) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- for (i = 0; i < data_dir_idx; i++) {
|
|
|
|
- if (strcmp(data_dir[i], path) == 0) {
|
|
|
|
- g_free(path); /* duplicate */
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- data_dir[data_dir_idx++] = path;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static inline bool nonempty_str(const char *str)
|
|
static inline bool nonempty_str(const char *str)
|
|
{
|
|
{
|
|
return str && *str;
|
|
return str && *str;
|
|
@@ -3187,26 +3133,6 @@ static void create_default_memdev(MachineState *ms, const char *path)
|
|
&error_fatal);
|
|
&error_fatal);
|
|
}
|
|
}
|
|
|
|
|
|
-/*
|
|
|
|
- * Find a likely location for support files using the location of the binary.
|
|
|
|
- * When running from the build tree this will be "$bindir/pc-bios".
|
|
|
|
- * Otherwise, this is CONFIG_QEMU_DATADIR (possibly relocated).
|
|
|
|
- *
|
|
|
|
- * The caller must use g_free() to free the returned data when it is
|
|
|
|
- * no longer required.
|
|
|
|
- */
|
|
|
|
-static char *find_datadir(void)
|
|
|
|
-{
|
|
|
|
- g_autofree char *dir = NULL;
|
|
|
|
-
|
|
|
|
- dir = g_build_filename(qemu_get_exec_dir(), "pc-bios", NULL);
|
|
|
|
- if (g_file_test(dir, G_FILE_TEST_IS_DIR)) {
|
|
|
|
- return g_steal_pointer(&dir);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return get_relocated_path(CONFIG_QEMU_DATADIR);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static void qemu_validate_options(void)
|
|
static void qemu_validate_options(void)
|
|
{
|
|
{
|
|
QemuOpts *machine_opts = qemu_get_machine_opts();
|
|
QemuOpts *machine_opts = qemu_get_machine_opts();
|
|
@@ -3266,9 +3192,6 @@ static void qemu_process_sugar_options(void)
|
|
|
|
|
|
static void qemu_process_early_options(void)
|
|
static void qemu_process_early_options(void)
|
|
{
|
|
{
|
|
- char **dirs;
|
|
|
|
- int i;
|
|
|
|
-
|
|
|
|
#ifdef CONFIG_SECCOMP
|
|
#ifdef CONFIG_SECCOMP
|
|
QemuOptsList *olist = qemu_find_opts_err("sandbox", NULL);
|
|
QemuOptsList *olist = qemu_find_opts_err("sandbox", NULL);
|
|
if (olist) {
|
|
if (olist) {
|
|
@@ -3306,21 +3229,11 @@ static void qemu_process_early_options(void)
|
|
qemu_set_log(0);
|
|
qemu_set_log(0);
|
|
}
|
|
}
|
|
|
|
|
|
- /* add configured firmware directories */
|
|
|
|
- dirs = g_strsplit(CONFIG_QEMU_FIRMWAREPATH, G_SEARCHPATH_SEPARATOR_S, 0);
|
|
|
|
- for (i = 0; dirs[i] != NULL; i++) {
|
|
|
|
- qemu_add_data_dir(get_relocated_path(dirs[i]));
|
|
|
|
- }
|
|
|
|
- g_strfreev(dirs);
|
|
|
|
-
|
|
|
|
- /* try to find datadir relative to the executable path */
|
|
|
|
- qemu_add_data_dir(find_datadir());
|
|
|
|
|
|
+ qemu_add_default_firmwarepath();
|
|
}
|
|
}
|
|
|
|
|
|
static void qemu_process_help_options(void)
|
|
static void qemu_process_help_options(void)
|
|
{
|
|
{
|
|
- int i;
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Check for -cpu help and -device help before we call select_machine(),
|
|
* Check for -cpu help and -device help before we call select_machine(),
|
|
* which will return an error if the architecture has no default machine
|
|
* which will return an error if the architecture has no default machine
|
|
@@ -3339,9 +3252,7 @@ static void qemu_process_help_options(void)
|
|
|
|
|
|
/* -L help lists the data directories and exits. */
|
|
/* -L help lists the data directories and exits. */
|
|
if (list_data_dirs) {
|
|
if (list_data_dirs) {
|
|
- for (i = 0; i < data_dir_idx; i++) {
|
|
|
|
- printf("%s\n", data_dir[i]);
|
|
|
|
- }
|
|
|
|
|
|
+ qemu_list_data_dirs();
|
|
exit(0);
|
|
exit(0);
|
|
}
|
|
}
|
|
}
|
|
}
|