diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2014-02-24 15:37:59 +0000 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2014-02-24 15:38:00 +0000 |
commit | 6dedf0522c3fdeb10fe27d4aef35f4c57f3d0806 (patch) | |
tree | e1177c7fd43a8165c8f697ff0aa5a5e6fcdd7766 /os-posix.c | |
parent | 98b21dcdb331798709edafcd65b5b7a1e07302db (diff) | |
parent | f966f9ddd175bdf82f12650c3b7b5a93cc421d88 (diff) | |
download | qemu-6dedf0522c3fdeb10fe27d4aef35f4c57f3d0806.zip qemu-6dedf0522c3fdeb10fe27d4aef35f4c57f3d0806.tar.gz qemu-6dedf0522c3fdeb10fe27d4aef35f4c57f3d0806.tar.bz2 |
Merge remote-tracking branch 'remotes/bonzini/configure' into staging
* remotes/bonzini/configure:
build: softmmu targets do not have a "main.o" file
configure: Disable libtool if -fPIE does not work with it (bug #1257099)
block: convert block drivers linked with libs to modules
Makefile: introduce common-obj-m and block-obj-m for DSO
Makefile: install modules with "make install"
module: implement module loading
rules.mak: introduce DSO rules
darwin: do not use -mdynamic-no-pic
block: use per-object cflags and libs
rules.mak: allow per object cflags and libs
rules.mak: fix $(obj) to a real relative path
util: Split out exec_dir from os_find_datadir
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'os-posix.c')
-rw-r--r-- | os-posix.c | 42 |
1 files changed, 7 insertions, 35 deletions
@@ -84,46 +84,17 @@ void os_setup_signal_handling(void) running from the build tree this will be "$bindir/../pc-bios". */ #define SHARE_SUFFIX "/share/qemu" #define BUILD_SUFFIX "/pc-bios" -char *os_find_datadir(const char *argv0) +char *os_find_datadir(void) { - char *dir; - char *p = NULL; + char *dir, *exec_dir; char *res; - char buf[PATH_MAX]; size_t max_len; -#if defined(__linux__) - { - int len; - len = readlink("/proc/self/exe", buf, sizeof(buf) - 1); - if (len > 0) { - buf[len] = 0; - p = buf; - } - } -#elif defined(__FreeBSD__) - { - static int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1}; - size_t len = sizeof(buf) - 1; - - *buf = '\0'; - if (!sysctl(mib, ARRAY_SIZE(mib), buf, &len, NULL, 0) && - *buf) { - buf[sizeof(buf) - 1] = '\0'; - p = buf; - } - } -#endif - /* If we don't have any way of figuring out the actual executable - location then try argv[0]. */ - if (!p) { - p = realpath(argv0, buf); - if (!p) { - return NULL; - } + exec_dir = qemu_get_exec_dir(); + if (exec_dir == NULL) { + return NULL; } - dir = dirname(p); - dir = dirname(dir); + dir = dirname(exec_dir); max_len = strlen(dir) + MAX(strlen(SHARE_SUFFIX), strlen(BUILD_SUFFIX)) + 1; @@ -137,6 +108,7 @@ char *os_find_datadir(const char *argv0) } } + g_free(exec_dir); return res; } #undef SHARE_SUFFIX |