From 4eaa1f35e5e05b8f3b17cceaf32db6b68f85c28f Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sat, 24 Aug 2019 15:52:17 +0200 Subject: [PATCH] BRoster: preserve symlink as "app" if given one Symlink name or attributes may be relevant to the launched app, so it's important that we pass the unresolved symlink as argv[0] when running it. Change-Id: Ie1d73bc4e9d5c3d0476f205ce635aafd9203e553 Reviewed-on: https://review.haiku-os.org/c/haiku/+/1739 Reviewed-by: waddlesplash --- src/kits/app/Roster.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/kits/app/Roster.cpp b/src/kits/app/Roster.cpp index 3935057ee8..1c1d2381cd 100644 --- a/src/kits/app/Roster.cpp +++ b/src/kits/app/Roster.cpp @@ -2194,6 +2194,8 @@ BRoster::_TranslateRef(entry_ref* ref, BMimeType* appMeta, if (ref == NULL || appMeta == NULL || appRef == NULL || appFile == NULL) return B_BAD_VALUE; + entry_ref originalRef = *ref; + // resolve ref, if necessary BEntry entry; status_t error = entry.SetTo(ref, false); @@ -2254,7 +2256,9 @@ BRoster::_TranslateRef(entry_ref* ref, BMimeType* appMeta, // we're done. char preferredApp[B_MIME_TYPE_LENGTH]; if (!isDocument || appFileInfo.GetPreferredApp(preferredApp) != B_OK) { - *appRef = *ref; + // If we were given a symlink, point appRef to it in case its name + // or attributes are relevant. + *appRef = originalRef; if (_wasDocument != NULL) *_wasDocument = isDocument;