From: "Daniel P. Berrangé" <berrange@redhat.com>
To: marcandre.lureau@redhat.com
Cc: Kevin Wolf <kwolf@redhat.com>,
Laurent Vivier <lvivier@redhat.com>,
Thomas Huth <thuth@redhat.com>,
"open list:Block layer core" <qemu-block@nongnu.org>,
Alexander Bulekov <alxndr@bu.edu>, Stefan Weil <sw@weilnetz.de>,
qemu-devel@nongnu.org, Qiuhao Li <Qiuhao.Li@outlook.com>,
Darren Kenny <darren.kenny@oracle.com>,
Bandan Das <bsd@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Hanna Reitz <hreitz@redhat.com>
Subject: Re: [PATCH 22/41] include: move qemu_*_exec_dir() to cutils
Date: Wed, 20 Apr 2022 16:36:41 +0100 [thread overview]
Message-ID: <YmAoieI9aqZocPiI@redhat.com> (raw)
In-Reply-To: <20220420132624.2439741-23-marcandre.lureau@redhat.com>
On Wed, Apr 20, 2022 at 05:26:05PM +0400, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> The function is required by get_relocated_path(), which is used by
> qemu-ga and may be generally useful.
In patch 06 I suggested we have a qemu-cli.h, and perhaps this
qemu_*_exec_dir functionality is also relevant for qemu-cli.{c,h}
since it is specific to command line tool initialization.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> include/qemu/cutils.h | 7 ++
> include/qemu/osdep.h | 8 --
> qemu-io.c | 1 +
> storage-daemon/qemu-storage-daemon.c | 1 +
> tests/qtest/fuzz/fuzz.c | 1 +
> util/cutils.c | 109 +++++++++++++++++++++++++++
> util/oslib-posix.c | 81 --------------------
> util/oslib-win32.c | 36 ---------
> 8 files changed, 119 insertions(+), 125 deletions(-)
>
> diff --git a/include/qemu/cutils.h b/include/qemu/cutils.h
> index 5c6572d44422..40e10e19a7ed 100644
> --- a/include/qemu/cutils.h
> +++ b/include/qemu/cutils.h
> @@ -193,6 +193,13 @@ int uleb128_decode_small(const uint8_t *in, uint32_t *n);
> */
> int qemu_pstrcmp0(const char **str1, const char **str2);
>
> +/* Find program directory, and save it for later usage with
> + * qemu_get_exec_dir().
> + * Try OS specific API first, if not working, parse from argv0. */
> +void qemu_init_exec_dir(const char *argv0);
> +
> +/* Get the saved exec dir. */
> +const char *qemu_get_exec_dir(void);
>
> /**
> * get_relocated_path:
> diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
> index a87f1b7f32e6..9fd52d6a33a7 100644
> --- a/include/qemu/osdep.h
> +++ b/include/qemu/osdep.h
> @@ -567,14 +567,6 @@ bool fips_get_state(void);
> */
> char *qemu_get_local_state_pathname(const char *relative_pathname);
>
> -/* Find program directory, and save it for later usage with
> - * qemu_get_exec_dir().
> - * Try OS specific API first, if not working, parse from argv0. */
> -void qemu_init_exec_dir(const char *argv0);
> -
> -/* Get the saved exec dir. */
> -const char *qemu_get_exec_dir(void);
> -
> /**
> * qemu_getauxval:
> * @type: the auxiliary vector key to lookup
> diff --git a/qemu-io.c b/qemu-io.c
> index 952a36643b0c..458fadd99a92 100644
> --- a/qemu-io.c
> +++ b/qemu-io.c
> @@ -16,6 +16,7 @@
> #endif
>
> #include "qemu/copyright.h"
> +#include "qemu/cutils.h"
> #include "qapi/error.h"
> #include "qemu-io.h"
> #include "qemu/error-report.h"
> diff --git a/storage-daemon/qemu-storage-daemon.c b/storage-daemon/qemu-storage-daemon.c
> index a4415e8c995b..63b155013ed7 100644
> --- a/storage-daemon/qemu-storage-daemon.c
> +++ b/storage-daemon/qemu-storage-daemon.c
> @@ -44,6 +44,7 @@
>
> #include "qemu/copyright.h"
> #include "qemu-version.h"
> +#include "qemu/cutils.h"
> #include "qemu/config-file.h"
> #include "qemu/error-report.h"
> #include "qemu/help_option.h"
> diff --git a/tests/qtest/fuzz/fuzz.c b/tests/qtest/fuzz/fuzz.c
> index 5f77c849837f..d3afd294db24 100644
> --- a/tests/qtest/fuzz/fuzz.c
> +++ b/tests/qtest/fuzz/fuzz.c
> @@ -15,6 +15,7 @@
>
> #include <wordexp.h>
>
> +#include "qemu/cutils.h"
> #include "qemu/datadir.h"
> #include "sysemu/sysemu.h"
> #include "sysemu/qtest.h"
> diff --git a/util/cutils.c b/util/cutils.c
> index b2777210e7da..443927275fdb 100644
> --- a/util/cutils.c
> +++ b/util/cutils.c
> @@ -931,6 +931,115 @@ static inline const char *next_component(const char *dir, int *p_len)
> return dir;
> }
>
> +static const char *exec_dir;
> +
> +void qemu_init_exec_dir(const char *argv0)
> +{
> +#ifdef G_OS_WIN32
> + char *p;
> + char buf[MAX_PATH];
> + DWORD len;
> +
> + if (exec_dir) {
> + return;
> + }
> +
> + len = GetModuleFileName(NULL, buf, sizeof(buf) - 1);
> + if (len == 0) {
> + return;
> + }
> +
> + buf[len] = 0;
> + p = buf + len - 1;
> + while (p != buf && *p != '\\') {
> + p--;
> + }
> + *p = 0;
> + if (access(buf, R_OK) == 0) {
> + exec_dir = g_strdup(buf);
> + } else {
> + exec_dir = CONFIG_BINDIR;
> + }
> +#else
> + 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;
> + }
> +#endif
> +}
> +
> +const char *qemu_get_exec_dir(void)
> +{
> + return exec_dir;
> +}
> +
> +
> char *get_relocated_path(const char *dir)
> {
> size_t prefix_len = strlen(CONFIG_PREFIX);
> diff --git a/util/oslib-posix.c b/util/oslib-posix.c
> index 161f1123259f..4f18cc612850 100644
> --- a/util/oslib-posix.c
> +++ b/util/oslib-posix.c
> @@ -321,87 +321,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 */
> diff --git a/util/oslib-win32.c b/util/oslib-win32.c
> index 1e05c316b311..0371082d23b3 100644
> --- a/util/oslib-win32.c
> +++ b/util/oslib-win32.c
> @@ -270,42 +270,6 @@ void qemu_set_tty_echo(int fd, bool echo)
> }
> }
>
> -static const char *exec_dir;
> -
> -void qemu_init_exec_dir(const char *argv0)
> -{
> -
> - char *p;
> - char buf[MAX_PATH];
> - DWORD len;
> -
> - if (exec_dir) {
> - return;
> - }
> -
> - len = GetModuleFileName(NULL, buf, sizeof(buf) - 1);
> - if (len == 0) {
> - return;
> - }
> -
> - buf[len] = 0;
> - p = buf + len - 1;
> - while (p != buf && *p != '\\') {
> - p--;
> - }
> - *p = 0;
> - if (access(buf, R_OK) == 0) {
> - exec_dir = g_strdup(buf);
> - } else {
> - exec_dir = CONFIG_BINDIR;
> - }
> -}
> -
> -const char *qemu_get_exec_dir(void)
> -{
> - return exec_dir;
> -}
> -
> int getpagesize(void)
> {
> SYSTEM_INFO system_info;
> --
> 2.35.1.693.g805e0a68082a
>
>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2022-04-20 15:56 UTC|newest]
Thread overview: 124+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-20 13:25 [PATCH 00/41] Misc cleanups marcandre.lureau
2022-04-20 13:25 ` [PATCH 01/41] qga: use fixed-length for usecs formatting marcandre.lureau
2022-04-20 14:26 ` Daniel P. Berrangé
2022-04-20 13:25 ` [PATCH 02/41] glib-compat: isolate g_date_time_format_iso8601 version-bypass marcandre.lureau
2022-04-20 14:32 ` Daniel P. Berrangé
2022-04-20 13:25 ` [PATCH 03/41] scripts/analyze-inclusions: drop qemu-common.h from analysis marcandre.lureau
2022-04-20 14:32 ` Daniel P. Berrangé
2022-04-20 13:25 ` [PATCH 04/41] Simplify softmmu/main.c marcandre.lureau
2022-04-20 14:55 ` Daniel P. Berrangé
2022-04-20 13:25 ` [PATCH 05/41] hw/hyperv: remove needless qemu-common.h include marcandre.lureau
2022-04-20 15:01 ` Daniel P. Berrangé
2022-04-20 13:25 ` [Virtio-fs] [PATCH 06/41] include: rename qemu-common.h qemu/copyright.h marcandre.lureau
2022-04-20 13:25 ` marcandre.lureau
2022-04-20 14:23 ` [Virtio-fs] " Warner Losh
2022-04-20 14:23 ` Warner Losh
2022-04-20 15:04 ` [Virtio-fs] " Daniel P. Berrangé
2022-04-20 15:04 ` Daniel P. Berrangé
2022-04-20 15:21 ` [Virtio-fs] " Marc-André Lureau
2022-04-20 15:21 ` Marc-André Lureau
2022-04-20 16:10 ` [Virtio-fs] " Peter Maydell
2022-04-20 16:10 ` Peter Maydell
2022-04-20 16:13 ` [Virtio-fs] " Daniel P. Berrangé
2022-04-20 16:13 ` Daniel P. Berrangé
2022-04-20 13:25 ` [PATCH 07/41] build-sys: remove MSI's QEMU_GA_MSI_MINGW_DLL_PATH marcandre.lureau
2022-04-20 15:00 ` Konstantin Kostiuk
2022-04-20 15:10 ` Daniel P. Berrangé
2022-04-20 15:12 ` Paolo Bonzini
2022-04-20 13:25 ` [PATCH 08/41] build-sys: simplify MSI's QEMU_GA_MANUFACTURER marcandre.lureau
2022-04-20 13:48 ` Konstantin Kostiuk
2022-04-20 15:14 ` Daniel P. Berrangé
2022-04-20 16:36 ` Paolo Bonzini
2022-04-20 13:25 ` [PATCH 09/41] build-sys: simplify MSI's QEMU_GA_VERSION marcandre.lureau
2022-04-20 13:25 ` [PATCH 10/41] build-sys: drop MSI's QEMU_GA_DISTRO marcandre.lureau
2022-04-20 13:25 ` [PATCH 11/41] qga: replace usleep() with g_usleep() marcandre.lureau
2022-04-20 15:16 ` Daniel P. Berrangé
2022-04-20 13:25 ` [PATCH 12/41] docs: trace-events-all is installed without renaming marcandre.lureau
2022-04-20 15:16 ` Daniel P. Berrangé
2022-04-20 13:25 ` [PATCH 13/41] arm/digic: replace snprintf() with g_strdup_printf() marcandre.lureau
2022-04-20 15:17 ` Daniel P. Berrangé
2022-04-20 13:25 ` [PATCH 14/41] arm/allwinner-a10: " marcandre.lureau
2022-04-20 15:17 ` Daniel P. Berrangé
2022-04-20 13:25 ` [PATCH 15/41] intc/exynos4210_gic: " marcandre.lureau
2022-04-20 15:19 ` Daniel P. Berrangé
2022-04-20 13:25 ` [PATCH 16/41] doc/style: CLang -> Clang marcandre.lureau
2022-04-20 15:20 ` Daniel P. Berrangé
2022-04-20 13:26 ` [PATCH 17/41] doc/build-platforms: document supported compilers marcandre.lureau
2022-04-20 14:10 ` Daniel P. Berrangé
2022-04-20 14:32 ` Marc-André Lureau
2022-04-20 14:36 ` Thomas Huth
2022-04-20 14:46 ` Marc-André Lureau
2022-04-20 14:50 ` Marc-André Lureau
2022-04-20 15:24 ` Daniel P. Berrangé
2022-04-20 15:32 ` Marc-André Lureau
2022-04-20 15:55 ` Daniel P. Berrangé
2022-04-20 16:47 ` Marc-André Lureau
2022-04-20 18:53 ` Daniel P. Berrangé
2022-04-20 16:11 ` Thomas Huth
2022-04-20 16:52 ` Marc-André Lureau
2022-04-20 14:53 ` Thomas Huth
2022-04-20 14:57 ` Marc-André Lureau
2022-04-20 13:26 ` [PATCH 18/41] osdep.h: move qemu_build_not_reached() marcandre.lureau
2022-04-20 15:27 ` Daniel P. Berrangé
2022-04-20 13:26 ` [PATCH 19/41] compiler.h: replace QEMU_NORETURN with G_NORETURN marcandre.lureau
2022-04-20 13:26 ` marcandre.lureau
2022-04-20 14:24 ` Warner Losh
2022-04-20 14:24 ` Warner Losh
2022-04-20 15:29 ` Daniel P. Berrangé
2022-04-20 15:29 ` Daniel P. Berrangé
2023-04-07 17:01 ` Stefan Weil via
2023-04-07 17:15 ` Stefan Weil via
2022-04-20 13:26 ` [PATCH 20/41] include: move qemu_msync() to osdep marcandre.lureau
2022-04-20 15:33 ` Daniel P. Berrangé
2022-04-20 15:39 ` Marc-André Lureau
2022-04-20 13:26 ` [PATCH 21/41] include: move qemu_fdatasync() " marcandre.lureau
2022-04-20 15:34 ` Daniel P. Berrangé
2022-04-20 13:26 ` [PATCH 22/41] include: move qemu_*_exec_dir() to cutils marcandre.lureau
2022-04-20 15:36 ` Daniel P. Berrangé [this message]
2022-04-20 13:26 ` [PATCH 23/41] include: add qemu/keyval.h marcandre.lureau
2022-04-20 15:38 ` Daniel P. Berrangé
2022-04-20 13:26 ` [PATCH 24/41] include: move qdict_{crumple,flatten} declarations marcandre.lureau
2022-04-20 15:39 ` Daniel P. Berrangé
2022-04-20 13:26 ` [PATCH 25/41] tests: remove block/qdict checks from check-qobject.c marcandre.lureau
2022-04-20 15:39 ` Daniel P. Berrangé
2022-04-20 13:26 ` [PATCH 26/41] compiler.h: add QEMU_SANITIZE_{ADDRESS,THREAD} marcandre.lureau
2022-04-21 13:34 ` Daniel P. Berrangé
2022-04-20 13:26 ` [PATCH 27/41] Use QEMU_SANITIZE_THREAD marcandre.lureau
2022-04-21 13:43 ` Daniel P. Berrangé
2022-04-20 13:26 ` [PATCH 28/41] Use QEMU_SANITIZE_ADDRESS marcandre.lureau
2022-04-20 14:20 ` Thomas Huth
2022-04-20 14:35 ` Marc-André Lureau
2022-04-20 13:26 ` [PATCH 29/41] tests: run-time skip test-qga if TSAN is enabled marcandre.lureau
2022-04-20 15:41 ` Daniel P. Berrangé
2022-04-21 13:02 ` Marc-André Lureau
2022-04-20 13:26 ` [PATCH 30/41] Move error_printf_unless_qmp() with monitor unit marcandre.lureau
2022-04-20 15:42 ` Daniel P. Berrangé
2022-04-20 13:26 ` [PATCH 31/41] qga: move qga_get_host_name() marcandre.lureau
2022-04-20 13:51 ` Konstantin Kostiuk
2022-04-20 15:44 ` Daniel P. Berrangé
2022-04-20 13:26 ` [PATCH 32/41] qtest: simplify socket_send() marcandre.lureau
2022-04-20 14:24 ` Thomas Huth
2022-04-20 15:45 ` Daniel P. Berrangé
2022-04-21 13:07 ` Marc-André Lureau
2022-04-20 13:26 ` [PATCH 33/41] tests: move libqtest.c under libqos/ marcandre.lureau
2022-04-20 14:16 ` Thomas Huth
2022-04-20 15:48 ` Daniel P. Berrangé
2022-04-20 13:26 ` [PATCH 34/41] libqtest: split QMP part in libqmp marcandre.lureau
2022-04-20 14:29 ` Thomas Huth
2022-04-20 13:26 ` [PATCH 35/41] util: simplify write in signal handler marcandre.lureau
2022-04-20 15:49 ` Daniel P. Berrangé
2022-04-20 13:26 ` [PATCH 36/41] util: use qemu_write_full() in qemu_write_pidfile() marcandre.lureau
2022-04-20 15:49 ` Daniel P. Berrangé
2022-04-20 13:26 ` [PATCH 37/41] util: use qemu_create() " marcandre.lureau
2022-04-20 15:50 ` Daniel P. Berrangé
2022-04-20 13:26 ` [Virtio-fs] [PATCH 38/41] util: replace qemu_get_local_state_pathname() marcandre.lureau
2022-04-20 13:26 ` marcandre.lureau
2022-04-20 15:51 ` [Virtio-fs] " Daniel P. Berrangé
2022-04-20 15:51 ` Daniel P. Berrangé
2022-04-20 13:26 ` [PATCH 39/41] qga: remove need for QEMU atomic.h marcandre.lureau
2022-04-20 15:51 ` Daniel P. Berrangé
2022-04-20 13:26 ` [PATCH 40/41] migration/ram: fix clang warning marcandre.lureau
2022-04-20 14:10 ` Dr. David Alan Gilbert
2022-04-20 13:26 ` [PATCH 41/41] tests/fuzz: fix warning marcandre.lureau
2022-04-20 14:30 ` Thomas Huth
2022-04-20 14:40 ` [PATCH 00/41] Misc cleanups Thomas Huth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YmAoieI9aqZocPiI@redhat.com \
--to=berrange@redhat.com \
--cc=Qiuhao.Li@outlook.com \
--cc=alxndr@bu.edu \
--cc=bsd@redhat.com \
--cc=darren.kenny@oracle.com \
--cc=hreitz@redhat.com \
--cc=kwolf@redhat.com \
--cc=lvivier@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=sw@weilnetz.de \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.