From fb7dad2b496333a96cf82d51c7deb41857e22321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Sun, 7 Jun 2015 21:04:37 +0200 Subject: [PATCH] BRoster: Added ability to pass env on launch. * Added BRoster::Private::Launch() that adds an additional parameter to pass a pointer to the environment of the launched app. --- headers/os/app/Roster.h | 1 + headers/private/app/RosterPrivate.h | 6 ++++++ src/kits/app/Roster.cpp | 25 +++++++++++++++---------- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/headers/os/app/Roster.h b/headers/os/app/Roster.h index 595b8a070e..559544ebf7 100644 --- a/headers/os/app/Roster.h +++ b/headers/os/app/Roster.h @@ -182,6 +182,7 @@ private: const entry_ref* ref, const BList* messageList, int argc, const char* const* args, + const char** environment, team_id* appTeam) const; status_t _UpdateActiveApp(team_id team) const; diff --git a/headers/private/app/RosterPrivate.h b/headers/private/app/RosterPrivate.h index 415779351c..88006f1706 100644 --- a/headers/private/app/RosterPrivate.h +++ b/headers/private/app/RosterPrivate.h @@ -28,6 +28,12 @@ class BRoster::Private { status_t SendTo(BMessage *message, BMessage *reply, bool mime); bool IsMessengerValid(bool mime) const; + status_t Launch(const char* mimeType, const entry_ref* ref, + const BList* messageList, int argc, const char* const* args, + const char** environment, team_id* appTeam) + { return fRoster->_LaunchApp(mimeType, ref, messageList, argc, + args, environment, appTeam); } + status_t ShutDown(bool reboot, bool confirm, bool synchronous) { return fRoster->_ShutDown(reboot, confirm, synchronous); } diff --git a/src/kits/app/Roster.cpp b/src/kits/app/Roster.cpp index c017d4b621..dc6a914107 100644 --- a/src/kits/app/Roster.cpp +++ b/src/kits/app/Roster.cpp @@ -922,7 +922,8 @@ BRoster::Launch(const char* mimeType, BMessage* initialMessage, if (initialMessage != NULL) messageList.AddItem(initialMessage); - return _LaunchApp(mimeType, NULL, &messageList, 0, NULL, _appTeam); + return _LaunchApp(mimeType, NULL, &messageList, 0, NULL, + (const char**)environ, _appTeam); } @@ -933,7 +934,8 @@ BRoster::Launch(const char* mimeType, BList* messageList, if (mimeType == NULL) return B_BAD_VALUE; - return _LaunchApp(mimeType, NULL, messageList, 0, NULL, _appTeam); + return _LaunchApp(mimeType, NULL, messageList, 0, NULL, + (const char**)environ, _appTeam); } @@ -944,7 +946,8 @@ BRoster::Launch(const char* mimeType, int argc, const char* const* args, if (mimeType == NULL) return B_BAD_VALUE; - return _LaunchApp(mimeType, NULL, NULL, argc, args, _appTeam); + return _LaunchApp(mimeType, NULL, NULL, argc, args, (const char**)environ, + _appTeam); } @@ -959,7 +962,8 @@ BRoster::Launch(const entry_ref* ref, const BMessage* initialMessage, if (initialMessage != NULL) messageList.AddItem(const_cast(initialMessage)); - return _LaunchApp(NULL, ref, &messageList, 0, NULL, _appTeam); + return _LaunchApp(NULL, ref, &messageList, 0, NULL, (const char**)environ, + _appTeam); } @@ -970,7 +974,8 @@ BRoster::Launch(const entry_ref* ref, const BList* messageList, if (ref == NULL) return B_BAD_VALUE; - return _LaunchApp(NULL, ref, messageList, 0, NULL, appTeam); + return _LaunchApp(NULL, ref, messageList, 0, NULL, (const char**)environ, + appTeam); } @@ -981,7 +986,8 @@ BRoster::Launch(const entry_ref* ref, int argc, const char* const* args, if (ref == NULL) return B_BAD_VALUE; - return _LaunchApp(NULL, ref, NULL, argc, args, appTeam); + return _LaunchApp(NULL, ref, NULL, argc, args, (const char**)environ, + appTeam); } @@ -1821,8 +1827,8 @@ BRoster::_UpdateActiveApp(team_id team) const */ status_t BRoster::_LaunchApp(const char* mimeType, const entry_ref* ref, - const BList* messageList, int argc, - const char* const* args, team_id* _appTeam) const + const BList* messageList, int argc, const char* const* args, + const char** environment, team_id* _appTeam) const { DBG(OUT("BRoster::_LaunchApp()")); @@ -1895,8 +1901,7 @@ BRoster::_LaunchApp(const char* mimeType, const entry_ref* ref, DBG(OUT(" token: %lu\n", appToken)); // load the app image thread_id appThread = load_image(argVector.Count(), - const_cast(argVector.Args()), - const_cast(environ)); + const_cast(argVector.Args()), environment); // get the app team if (appThread >= 0) {