All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jes.Sorensen@redhat.com
To: anthony@codemonkey.ws
Cc: Jes Sorensen <Jes.Sorensen@redhat.com>, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 09/17] Move find_datadir to OS specific files.
Date: Thu, 10 Jun 2010 11:42:23 +0200	[thread overview]
Message-ID: <1276162951-842-10-git-send-email-Jes.Sorensen@redhat.com> (raw)
In-Reply-To: <1276162951-842-1-git-send-email-Jes.Sorensen@redhat.com>

From: Jes Sorensen <Jes.Sorensen@redhat.com>

This moves the win32 and POSIX versions of find_datadir() to OS
specific files, and removes some #ifdef clutter from vl.c

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Acked-by: Juan Quintela <quintela@redhat.com>
Acked-by: Richard Henderson <rth@redhat.com>
---
 os-posix.c |   64 ++++++++++++++++++++++++++++++++++++++++++
 os-win32.c |   23 +++++++++++++++
 sysemu.h   |    2 +
 vl.c       |   91 +-----------------------------------------------------------
 4 files changed, 90 insertions(+), 90 deletions(-)

diff --git a/os-posix.c b/os-posix.c
index 01dbec2..621ad06 100644
--- a/os-posix.c
+++ b/os-posix.c
@@ -28,6 +28,7 @@
 #include <signal.h>
 #include <sys/types.h>
 #include <sys/wait.h>
+#include <libgen.h>
 
 /* Needed early for CONFIG_BSD etc. */
 #include "config-host.h"
@@ -66,3 +67,66 @@ void os_setup_signal_handling(void)
     act.sa_flags = SA_NOCLDSTOP;
     sigaction(SIGCHLD, &act, NULL);
 }
+
+/* Find a likely location for support files using the location of the binary.
+   For installed binaries this will be "$bindir/../share/qemu".  When
+   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 *dir;
+    char *p = NULL;
+    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, sizeof(mib)/sizeof(*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;
+        }
+    }
+    dir = dirname(p);
+    dir = dirname(dir);
+
+    max_len = strlen(dir) +
+        MAX(strlen(SHARE_SUFFIX), strlen(BUILD_SUFFIX)) + 1;
+    res = qemu_mallocz(max_len);
+    snprintf(res, max_len, "%s%s", dir, SHARE_SUFFIX);
+    if (access(res, R_OK)) {
+        snprintf(res, max_len, "%s%s", dir, BUILD_SUFFIX);
+        if (access(res, R_OK)) {
+            qemu_free(res);
+            res = NULL;
+        }
+    }
+
+    return res;
+}
+#undef SHARE_SUFFIX
+#undef BUILD_SUFFIX
diff --git a/os-win32.c b/os-win32.c
index a936f7a..1758538 100644
--- a/os-win32.c
+++ b/os-win32.c
@@ -181,3 +181,26 @@ void os_setup_early_signal_handling(void)
         }
     }
 }
+
+/* Look for support files in the same directory as the executable.  */
+char *os_find_datadir(const char *argv0)
+{
+    char *p;
+    char buf[MAX_PATH];
+    DWORD len;
+
+    len = GetModuleFileName(NULL, buf, sizeof(buf) - 1);
+    if (len == 0) {
+        return NULL;
+    }
+
+    buf[len] = 0;
+    p = buf + len - 1;
+    while (p != buf && *p != '\\')
+        p--;
+    *p = 0;
+    if (access(buf, R_OK) == 0) {
+        return qemu_strdup(buf);
+    }
+    return NULL;
+}
diff --git a/sysemu.h b/sysemu.h
index bb05cf4..72f3734 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -79,7 +79,9 @@ int qemu_loadvm_state(QEMUFile *f);
 /* SLIRP */
 void do_info_slirp(Monitor *mon);
 
+/* OS specific functions */
 void os_setup_early_signal_handling(void);
+char *os_find_datadir(const char *argv0);
 
 typedef enum DisplayType
 {
diff --git a/vl.c b/vl.c
index 1fd839d..3e56121 100644
--- a/vl.c
+++ b/vl.c
@@ -1986,95 +1986,6 @@ static int balloon_parse(const char *arg)
     return -1;
 }
 
-#ifdef _WIN32
-/* Look for support files in the same directory as the executable.  */
-static char *find_datadir(const char *argv0)
-{
-    char *p;
-    char buf[MAX_PATH];
-    DWORD len;
-
-    len = GetModuleFileName(NULL, buf, sizeof(buf) - 1);
-    if (len == 0) {
-        return NULL;
-    }
-
-    buf[len] = 0;
-    p = buf + len - 1;
-    while (p != buf && *p != '\\')
-        p--;
-    *p = 0;
-    if (access(buf, R_OK) == 0) {
-        return qemu_strdup(buf);
-    }
-    return NULL;
-}
-#else /* !_WIN32 */
-
-/* Find a likely location for support files using the location of the binary.
-   For installed binaries this will be "$bindir/../share/qemu".  When
-   running from the build tree this will be "$bindir/../pc-bios".  */
-#define SHARE_SUFFIX "/share/qemu"
-#define BUILD_SUFFIX "/pc-bios"
-static char *find_datadir(const char *argv0)
-{
-    char *dir;
-    char *p = NULL;
-    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, sizeof(mib)/sizeof(*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;
-        }
-    }
-    dir = dirname(p);
-    dir = dirname(dir);
-
-    max_len = strlen(dir) +
-        MAX(strlen(SHARE_SUFFIX), strlen(BUILD_SUFFIX)) + 1;
-    res = qemu_mallocz(max_len);
-    snprintf(res, max_len, "%s%s", dir, SHARE_SUFFIX);
-    if (access(res, R_OK)) {
-        snprintf(res, max_len, "%s%s", dir, BUILD_SUFFIX);
-        if (access(res, R_OK)) {
-            qemu_free(res);
-            res = NULL;
-        }
-    }
-
-    return res;
-}
-#undef SHARE_SUFFIX
-#undef BUILD_SUFFIX
-#endif
-
 char *qemu_find_file(int type, const char *name)
 {
     int len;
@@ -3223,7 +3134,7 @@ int main(int argc, char **argv, char **envp)
     /* If no data_dir is specified then try to find it relative to the
        executable path.  */
     if (!data_dir) {
-        data_dir = find_datadir(argv[0]);
+        data_dir = os_find_datadir(argv[0]);
     }
     /* If all else fails use the install patch specified when building.  */
     if (!data_dir) {
-- 
1.6.5.2

  parent reply	other threads:[~2010-06-10  9:43 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-10  9:42 [Qemu-devel] [PATCH v4 00/17] clean up vl.c code Jes.Sorensen
2010-06-10  9:42 ` [Qemu-devel] [PATCH 01/17] vl.c: Remove double include of netinet/in.h for Solaris Jes.Sorensen
2010-06-10  9:42 ` [Qemu-devel] [PATCH 02/17] Create qemu-os-win32.h and move WIN32 specific declarations there Jes.Sorensen
2010-06-10  9:42 ` [Qemu-devel] [PATCH 03/17] Introduce os-win32.c and move polling functions from vl.c Jes.Sorensen
2010-06-10  9:42 ` [Qemu-devel] [PATCH 04/17] vl.c: Move host_main_loop_wait() to OS specific files Jes.Sorensen
2010-06-10  9:42 ` [Qemu-devel] [PATCH 05/17] Introduce os-posix.c and create os_setup_signal_handling() Jes.Sorensen
2010-06-10  9:42 ` [Qemu-devel] [PATCH 06/17] Move win32 early signal handling setup to os_setup_signal_handling() Jes.Sorensen
2010-06-10  9:42 ` [Qemu-devel] [PATCH 07/17] Rename os_setup_signal_handling() to os_setup_early_signal_handling() Jes.Sorensen
2010-06-10  9:42 ` [Qemu-devel] [PATCH 08/17] Move main signal handler setup to os specificfiles Jes.Sorensen
2010-06-10  9:42 ` Jes.Sorensen [this message]
2010-06-10  9:42 ` [Qemu-devel] [PATCH 10/17] Rename qemu-options.h to qemu-options.def Jes.Sorensen
2010-06-10  9:42 ` [Qemu-devel] [PATCH 11/17] Introduce OS specific cmdline argument handling and move SMB arg to os-posix.c Jes.Sorensen
2010-06-10  9:42 ` [Qemu-devel] [PATCH 12/17] Move runas handling from vl.c to OS specific files Jes.Sorensen
2010-06-10  9:42 ` [Qemu-devel] [PATCH 13/17] Move chroot handling " Jes.Sorensen
2010-06-10  9:42 ` [Qemu-devel] [PATCH 14/17] Move daemonize " Jes.Sorensen
2010-06-25 16:41   ` Frank Arnold
2010-06-25 17:02     ` Jes Sorensen
2010-06-25 17:34       ` Frank Arnold
2010-06-25 17:45         ` Frank Arnold
2010-06-28  9:30         ` Jes Sorensen
2010-06-28 14:50         ` Jes Sorensen
2010-06-28 15:42           ` Blue Swirl
2010-06-28 16:03             ` Jes Sorensen
2010-06-28 16:20               ` Blue Swirl
2010-06-28 16:30                 ` Jes Sorensen
2010-06-28 16:46               ` [Qemu-devel] " Paolo Bonzini
2010-06-10  9:42 ` [Qemu-devel] [PATCH 15/17] Make os_change_process_uid and os_change_root os-posix.c local Jes.Sorensen
2010-06-10  9:42 ` [Qemu-devel] [PATCH 16/17] Move line-buffering setup to OS specific files Jes.Sorensen
2010-06-10  9:42 ` [Qemu-devel] [PATCH 17/17] Move set_proc_name() " Jes.Sorensen
2010-06-12  6:33 ` [Qemu-devel] [PATCH v4 00/17] clean up vl.c code Blue Swirl
  -- strict thread matches above, loose matches on Subject: below --
2010-06-04 16:08 [Qemu-devel] [PATCH v3 " Jes.Sorensen
2010-06-04 16:09 ` [Qemu-devel] [PATCH 09/17] Move find_datadir to OS specific files Jes.Sorensen
2010-06-04 13:24 [Qemu-devel] [PATCH v2 00/17] clean up vl.c code Jes.Sorensen
2010-06-04 13:24 ` [Qemu-devel] [PATCH 09/17] Move find_datadir to OS specific files Jes.Sorensen

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=1276162951-842-10-git-send-email-Jes.Sorensen@redhat.com \
    --to=jes.sorensen@redhat.com \
    --cc=anthony@codemonkey.ws \
    --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.