diff --git a/examples/platform/tizen/OptionsProxy.cpp b/examples/platform/tizen/OptionsProxy.cpp index 8d4bfb029f922e..590580d48a50ba 100644 --- a/examples/platform/tizen/OptionsProxy.cpp +++ b/examples/platform/tizen/OptionsProxy.cpp @@ -20,6 +20,8 @@ #include +#include + #include namespace { @@ -65,35 +67,50 @@ static constexpr Option sOptions[] = { #endif }; -}; // namespace - -void OptionsProxy::Parse(const char * argv0, app_control_h app_control) +bool ParseAppExtraData(app_control_h app_control, const char * key, void * userData) { - // Insert argv[0] commonly used as a process name - if (argv0 != nullptr) - { - mArgs.push_back(argv0); - } + auto * args = static_cast *>(userData); for (const auto & option : sOptions) { + if (strcmp(key, option.name) != 0) + { + continue; + } + char * value = nullptr; if (app_control_get_extra_data(app_control, option.name, &value) == APP_CONTROL_ERROR_NONE && value != nullptr) { if (!option.isBoolean) { - mArgs.push_back(std::string("--") + option.name); - mArgs.push_back(value); + args->push_back(std::string("--") + option.name); + args->push_back(value); } else if (strcmp(value, "true") == 0) { - mArgs.push_back(std::string("--") + option.name); + args->push_back(std::string("--") + option.name); } // Release memory allocated by app_control_get_extra_data() free(value); } } + // Continue iterating over all extra data + return true; +} + +}; // namespace + +void OptionsProxy::Parse(const char * argv0, app_control_h app_control) +{ + // Insert argv[0] commonly used as a process name + if (argv0 != nullptr) + { + mArgs.push_back(argv0); + } + + app_control_foreach_extra_data(app_control, ParseAppExtraData, &mArgs); + // Convert vector of strings into NULL-terminated vector of char pointers mArgv.reserve(mArgs.size() + 1); for (auto & arg : mArgs)