All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Andreas Färber" <afaerber@suse.de>
To: Paolo Bonzini <pbonzini@redhat.com>,
	qemu-devel@nongnu.org, famz@redhat.com
Cc: peter.maydell@linaro.org, aliguori@amazon.com
Subject: Re: [Qemu-devel] [PULL 01/12] util: Split out exec_dir from os_find_datadir
Date: Thu, 13 Mar 2014 14:08:46 +0100	[thread overview]
Message-ID: <5321ADDE.4030703@suse.de> (raw)
In-Reply-To: <1392899343-5226-2-git-send-email-pbonzini@redhat.com>

Am 20.02.2014 13:28, schrieb Paolo Bonzini:
> From: Fam Zheng <famz@redhat.com>
> 
> With this change, main() calls qemu_init_exec_dir and uses argv[0] to
> init exec_dir. The saved value can be retrieved with
> qemu_get_exec_dir later. It will be reused by module loading.
> 
> Signed-off-by: Fam Zheng <famz@redhat.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
[...]
> diff --git a/os-posix.c b/os-posix.c
> index d39261d..6187301 100644
> --- a/os-posix.c
> +++ b/os-posix.c
> @@ -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
[...]
> diff --git a/util/oslib-posix.c b/util/oslib-posix.c
> index d5dca47..c2eeb4f 100644
> --- a/util/oslib-posix.c
> +++ b/util/oslib-posix.c
> @@ -57,6 +57,7 @@ extern int daemon(int, int);
>  #include "trace.h"
>  #include "qemu/sockets.h"
>  #include <sys/mman.h>
> +#include <libgen.h>
>  
>  #ifdef CONFIG_LINUX
>  #include <sys/syscall.h>
> @@ -274,3 +275,56 @@ void qemu_set_tty_echo(int fd, bool echo)
>  
>      tcsetattr(fd, TCSANOW, &tty);
>  }
> +
> +static char exec_dir[PATH_MAX];
> +
> +void qemu_init_exec_dir(const char *argv0)
> +{
> +    char *dir;
> +    char *p = NULL;
> +    char buf[PATH_MAX];
> +
> +    assert(!exec_dir[0]);
> +
> +#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};

This code movement broke the build on FreeBSD, CTL_KERN undeclared. :(
Probably some #include missing?

Regards,
Andreas

> +        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) {
> +        if (!argv0) {
> +            return;
> +        }
> +        p = realpath(argv0, buf);
> +        if (!p) {
> +            return;
> +        }
> +    }
> +    dir = dirname(p);
> +
> +    pstrcpy(exec_dir, sizeof(exec_dir), dir);
> +}
> +
> +char *qemu_get_exec_dir(void)
> +{
> +    return g_strdup(exec_dir);
> +}
[snip]

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

  reply	other threads:[~2014-03-13 13:09 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-20 12:28 [Qemu-devel] [PULL respin 00/12] Build system changes for 2014-02-20 Paolo Bonzini
2014-02-20 12:28 ` [Qemu-devel] [PULL 01/12] util: Split out exec_dir from os_find_datadir Paolo Bonzini
2014-03-13 13:08   ` Andreas Färber [this message]
2014-02-20 12:28 ` [Qemu-devel] [PULL 02/12] rules.mak: fix $(obj) to a real relative path Paolo Bonzini
2014-02-20 12:28 ` [Qemu-devel] [PULL 03/12] rules.mak: allow per object cflags and libs Paolo Bonzini
2014-02-20 12:28 ` [Qemu-devel] [PULL 04/12] block: use per-object " Paolo Bonzini
2014-02-20 12:28 ` [Qemu-devel] [PULL 05/12] darwin: do not use -mdynamic-no-pic Paolo Bonzini
2014-02-20 12:28 ` [Qemu-devel] [PULL 06/12] rules.mak: introduce DSO rules Paolo Bonzini
2014-02-20 12:28 ` [Qemu-devel] [PULL 07/12] module: implement module loading Paolo Bonzini
2014-02-25 16:13   ` Peter Maydell
2014-02-20 12:28 ` [Qemu-devel] [PULL 08/12] Makefile: install modules with "make install" Paolo Bonzini
2014-02-20 12:29 ` [Qemu-devel] [PULL 09/12] Makefile: introduce common-obj-m and block-obj-m for DSO Paolo Bonzini
2014-02-20 12:29 ` [Qemu-devel] [PULL 10/12] block: convert block drivers linked with libs to modules Paolo Bonzini
2014-02-20 12:29 ` [Qemu-devel] [PULL 11/12] configure: Disable libtool if -fPIE does not work with it (bug #1257099) Paolo Bonzini
2014-02-20 12:29 ` [Qemu-devel] [PULL 12/12] build: softmmu targets do not have a "main.o" file Paolo Bonzini
2014-02-24 16:11 ` [Qemu-devel] [PULL respin 00/12] Build system changes for 2014-02-20 Peter Maydell
  -- strict thread matches above, loose matches on Subject: below --
2014-02-17 17:35 [Qemu-devel] [PULL 00/12] Build system changes for 2014-02-17 Paolo Bonzini
2014-02-17 17:35 ` [Qemu-devel] [PULL 01/12] util: Split out exec_dir from os_find_datadir Paolo Bonzini

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=5321ADDE.4030703@suse.de \
    --to=afaerber@suse.de \
    --cc=aliguori@amazon.com \
    --cc=famz@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /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.