oslib: do not call g_strdup from qemu_get_exec_dir
Just return the directory without requiring the caller to free it. This also removes a bogus check for NULL in os_find_datadir and module_load_one; g_strdup of a static variable cannot return NULL. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
05512f55aa
commit
a4c13869f9
@ -597,12 +597,8 @@ char *qemu_get_local_state_pathname(const char *relative_pathname);
|
||||
* Try OS specific API first, if not working, parse from argv0. */
|
||||
void qemu_init_exec_dir(const char *argv0);
|
||||
|
||||
/* Get the saved exec dir.
|
||||
*
|
||||
* The caller is responsible for releasing the value returned with g_free()
|
||||
* after use.
|
||||
*/
|
||||
char *qemu_get_exec_dir(void);
|
||||
/* Get the saved exec dir. */
|
||||
const char *qemu_get_exec_dir(void);
|
||||
|
||||
/**
|
||||
* qemu_getauxval:
|
||||
|
@ -90,13 +90,9 @@ void os_setup_signal_handling(void)
|
||||
*/
|
||||
char *os_find_datadir(void)
|
||||
{
|
||||
g_autofree char *exec_dir = NULL;
|
||||
g_autofree char *dir = NULL;
|
||||
|
||||
exec_dir = qemu_get_exec_dir();
|
||||
g_return_val_if_fail(exec_dir != NULL, NULL);
|
||||
|
||||
dir = g_build_filename(exec_dir, "pc-bios", 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);
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ void os_setup_early_signal_handling(void)
|
||||
*/
|
||||
char *os_find_datadir(void)
|
||||
{
|
||||
return qemu_get_exec_dir();
|
||||
return g_strdup(qemu_get_exec_dir());
|
||||
}
|
||||
|
||||
void os_set_line_buffering(void)
|
||||
|
@ -143,7 +143,8 @@ int LLVMFuzzerInitialize(int *argc, char ***argv, char ***envp)
|
||||
{
|
||||
|
||||
char *target_name;
|
||||
char *bindir, *datadir;
|
||||
const char *bindir;
|
||||
char *datadir;
|
||||
bool serialize = false;
|
||||
|
||||
/* Initialize qgraph and modules */
|
||||
@ -166,7 +167,6 @@ int LLVMFuzzerInitialize(int *argc, char ***argv, char ***envp)
|
||||
*/
|
||||
bindir = g_path_get_dirname(**argv);
|
||||
datadir = g_build_filename(bindir, "pc-bios", NULL);
|
||||
g_free(bindir);
|
||||
if (g_file_test(datadir, G_FILE_TEST_IS_DIR)) {
|
||||
qemu_add_data_dir(datadir);
|
||||
}
|
||||
|
@ -172,7 +172,6 @@ bool module_load_one(const char *prefix, const char *lib_name)
|
||||
|
||||
#ifdef CONFIG_MODULES
|
||||
char *fname = NULL;
|
||||
char *exec_dir;
|
||||
#ifdef CONFIG_MODULE_UPGRADES
|
||||
char *version_dir;
|
||||
#endif
|
||||
@ -199,13 +198,12 @@ bool module_load_one(const char *prefix, const char *lib_name)
|
||||
return true;
|
||||
}
|
||||
|
||||
exec_dir = qemu_get_exec_dir();
|
||||
search_dir = getenv("QEMU_MODULE_DIR");
|
||||
if (search_dir != NULL) {
|
||||
dirs[n_dirs++] = g_strdup_printf("%s", search_dir);
|
||||
}
|
||||
dirs[n_dirs++] = g_strdup_printf("%s", CONFIG_QEMU_MODDIR);
|
||||
dirs[n_dirs++] = g_strdup_printf("%s", exec_dir ? : "");
|
||||
dirs[n_dirs++] = g_strdup(qemu_get_exec_dir());
|
||||
|
||||
#ifdef CONFIG_MODULE_UPGRADES
|
||||
version_dir = g_strcanon(g_strdup(QEMU_PKGVERSION),
|
||||
@ -216,9 +214,6 @@ bool module_load_one(const char *prefix, const char *lib_name)
|
||||
|
||||
assert(n_dirs <= ARRAY_SIZE(dirs));
|
||||
|
||||
g_free(exec_dir);
|
||||
exec_dir = NULL;
|
||||
|
||||
for (i = 0; i < n_dirs; i++) {
|
||||
fname = g_strdup_printf("%s/%s%s",
|
||||
dirs[i], module_name, CONFIG_HOST_DSOSUF);
|
||||
|
@ -366,7 +366,9 @@ void qemu_init_exec_dir(const char *argv0)
|
||||
char *p = NULL;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
assert(!exec_dir[0]);
|
||||
if (exec_dir[0]) {
|
||||
return;
|
||||
}
|
||||
|
||||
#if defined(__linux__)
|
||||
{
|
||||
@ -439,9 +441,9 @@ void qemu_init_exec_dir(const char *argv0)
|
||||
g_free(dir);
|
||||
}
|
||||
|
||||
char *qemu_get_exec_dir(void)
|
||||
const char *qemu_get_exec_dir(void)
|
||||
{
|
||||
return g_strdup(exec_dir);
|
||||
return exec_dir;
|
||||
}
|
||||
|
||||
static void sigbus_handler(int signal)
|
||||
|
@ -315,7 +315,7 @@ void qemu_set_tty_echo(int fd, bool echo)
|
||||
}
|
||||
}
|
||||
|
||||
static char exec_dir[PATH_MAX];
|
||||
static char *exec_dir;
|
||||
|
||||
void qemu_init_exec_dir(const char *argv0)
|
||||
{
|
||||
@ -324,6 +324,10 @@ void qemu_init_exec_dir(const char *argv0)
|
||||
char buf[MAX_PATH];
|
||||
DWORD len;
|
||||
|
||||
if (exec_dir) {
|
||||
return;
|
||||
}
|
||||
|
||||
len = GetModuleFileName(NULL, buf, sizeof(buf) - 1);
|
||||
if (len == 0) {
|
||||
return;
|
||||
@ -336,13 +340,13 @@ void qemu_init_exec_dir(const char *argv0)
|
||||
}
|
||||
*p = 0;
|
||||
if (access(buf, R_OK) == 0) {
|
||||
pstrcpy(exec_dir, sizeof(exec_dir), buf);
|
||||
exec_dir = g_strdup(buf);
|
||||
}
|
||||
}
|
||||
|
||||
char *qemu_get_exec_dir(void)
|
||||
const char *qemu_get_exec_dir(void)
|
||||
{
|
||||
return g_strdup(exec_dir);
|
||||
return exec_dir;
|
||||
}
|
||||
|
||||
#if !GLIB_CHECK_VERSION(2, 50, 0)
|
||||
|
Loading…
Reference in New Issue
Block a user