diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2022-05-25 16:41:26 +0200 |
---|---|---|
committer | Marc-André Lureau <marcandre.lureau@redhat.com> | 2022-05-28 11:42:56 +0200 |
commit | 06680b15b4ee3184b57c9c910886a9ff8a7e58c0 (patch) | |
tree | 627126d7b88d195950f785c3344f5d53cc0f1768 /util/oslib-posix.c | |
parent | 2417cbd5916d043e0c56408221fbe9935d0bc8da (diff) | |
download | qemu-06680b15b4ee3184b57c9c910886a9ff8a7e58c0.zip qemu-06680b15b4ee3184b57c9c910886a9ff8a7e58c0.tar.gz qemu-06680b15b4ee3184b57c9c910886a9ff8a7e58c0.tar.bz2 |
include: move qemu_*_exec_dir() to cutils
The function is required by get_relocated_path() (already in cutils),
and used by qemu-ga and may be generally useful.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20220525144140.591926-2-marcandre.lureau@redhat.com>
Diffstat (limited to 'util/oslib-posix.c')
-rw-r--r-- | util/oslib-posix.c | 86 |
1 files changed, 2 insertions, 84 deletions
diff --git a/util/oslib-posix.c b/util/oslib-posix.c index 477990f..7a34c16 100644 --- a/util/oslib-posix.c +++ b/util/oslib-posix.c @@ -48,14 +48,13 @@ #endif #ifdef __FreeBSD__ -#include <sys/sysctl.h> -#include <sys/user.h> #include <sys/thr.h> +#include <sys/types.h> +#include <sys/user.h> #include <libutil.h> #endif #ifdef __NetBSD__ -#include <sys/sysctl.h> #include <lwp.h> #endif @@ -283,87 +282,6 @@ void qemu_set_tty_echo(int fd, bool echo) tcsetattr(fd, TCSANOW, &tty); } -static const char *exec_dir; - -void qemu_init_exec_dir(const char *argv0) -{ - char *p = NULL; - char buf[PATH_MAX]; - - if (exec_dir) { - return; - } - -#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__) \ - || (defined(__NetBSD__) && defined(KERN_PROC_PATHNAME)) - { -#if defined(__FreeBSD__) - static int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1}; -#else - static int mib[4] = {CTL_KERN, KERN_PROC_ARGS, -1, KERN_PROC_PATHNAME}; -#endif - 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; - } - } -#elif defined(__APPLE__) - { - char fpath[PATH_MAX]; - uint32_t len = sizeof(fpath); - if (_NSGetExecutablePath(fpath, &len) == 0) { - p = realpath(fpath, buf); - if (!p) { - return; - } - } - } -#elif defined(__HAIKU__) - { - image_info ii; - int32_t c = 0; - - *buf = '\0'; - while (get_next_image_info(0, &c, &ii) == B_OK) { - if (ii.type == B_APP_IMAGE) { - strncpy(buf, ii.name, sizeof(buf)); - buf[sizeof(buf) - 1] = 0; - p = buf; - break; - } - } - } -#endif - /* If we don't have any way of figuring out the actual executable - location then try argv[0]. */ - if (!p && argv0) { - p = realpath(argv0, buf); - } - if (p) { - exec_dir = g_path_get_dirname(p); - } else { - exec_dir = CONFIG_BINDIR; - } -} - -const char *qemu_get_exec_dir(void) -{ - return exec_dir; -} - #ifdef CONFIG_LINUX static void sigbus_handler(int signal, siginfo_t *siginfo, void *ctx) #else /* CONFIG_LINUX */ |