=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d: Try to guess application name.

Alexandre Julliard julliard at winehq.org
Tue Jun 18 17:21:29 CDT 2019


Module: vkd3d
Branch: master
Commit: 3d681737c9b1a2e1eeaab19bdc0e75c8de48dd08
URL:    https://source.winehq.org/git/vkd3d.git/?a=commit;h=3d681737c9b1a2e1eeaab19bdc0e75c8de48dd08

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Mon Jun 17 15:43:28 2019 +0200

vkd3d: Try to guess application name.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 libs/vkd3d/device.c        |  7 +++++++
 libs/vkd3d/utils.c         | 44 ++++++++++++++++++++++++++++++++++++++++++++
 libs/vkd3d/vkd3d_private.h |  2 ++
 3 files changed, 53 insertions(+)

diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
index 37bfc40..1092cff 100644
--- a/libs/vkd3d/device.c
+++ b/libs/vkd3d/device.c
@@ -467,6 +467,7 @@ static HRESULT vkd3d_instance_init(struct vkd3d_instance *instance,
     bool *user_extension_supported = NULL;
     VkApplicationInfo application_info;
     VkInstanceCreateInfo instance_info;
+    char application_name[PATH_MAX];
     uint32_t extension_count;
     const char **extensions;
     VkInstance vk_instance;
@@ -530,6 +531,12 @@ static HRESULT vkd3d_instance_init(struct vkd3d_instance *instance,
             application_info.engineVersion = vkd3d_application_info->engine_version;
         }
     }
+    else if (vkd3d_get_program_name(application_name))
+    {
+        application_info.pApplicationName = application_name;
+    }
+
+    TRACE("Application: %s.\n", debugstr_a(application_info.pApplicationName));
 
     if (!(extensions = vkd3d_calloc(extension_count, sizeof(*extensions))))
     {
diff --git a/libs/vkd3d/utils.c b/libs/vkd3d/utils.c
index 4483a8d..245f297 100644
--- a/libs/vkd3d/utils.c
+++ b/libs/vkd3d/utils.c
@@ -602,6 +602,50 @@ HRESULT vkd3d_load_vk_device_procs(struct vkd3d_vk_device_procs *procs,
     return S_OK;
 }
 
+#ifdef _GNU_SOURCE
+
+bool vkd3d_get_program_name(char program_name[PATH_MAX])
+{
+    char *name, *p, *real_path = NULL;
+
+    if ((name = strrchr(program_invocation_name, '/')))
+    {
+        real_path = realpath("/proc/self/exe", NULL);
+
+        /* Try to strip command line arguments. */
+        if (real_path && (p = strrchr(real_path, '/'))
+                && !strncmp(real_path, program_invocation_name, strlen(real_path)))
+        {
+            name = p;
+        }
+
+        ++name;
+    }
+    else if ((name = strrchr(program_invocation_name, '\\')))
+    {
+        ++name;
+    }
+    else
+    {
+        name = program_invocation_name;
+    }
+
+    strncpy(program_name, name, PATH_MAX);
+    program_name[PATH_MAX - 1] = '\0';
+    free(real_path);
+    return true;
+}
+
+#else
+
+bool vkd3d_get_program_name(char program_name[PATH_MAX])
+{
+    *program_name = '\0';
+    return false;
+}
+
+#endif  /* _GNU_SOURCE */
+
 static struct vkd3d_private_data *vkd3d_private_store_get_private_data(
         const struct vkd3d_private_store *store, const GUID *tag)
 {
diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h
index e0d563f..97b5de5 100644
--- a/libs/vkd3d/vkd3d_private.h
+++ b/libs/vkd3d/vkd3d_private.h
@@ -1203,6 +1203,8 @@ HRESULT vkd3d_load_vk_device_procs(struct vkd3d_vk_device_procs *procs,
 
 extern const char vkd3d_build[];
 
+bool vkd3d_get_program_name(char program_name[PATH_MAX]) DECLSPEC_HIDDEN;
+
 static inline void vkd3d_set_thread_name(const char *name)
 {
 #if defined(HAVE_PTHREAD_SETNAME_NP_2)




More information about the wine-cvs mailing list