Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ece234f9 authored by Tom Cherry's avatar Tom Cherry Committed by Android (Google) Code Review
Browse files

Merge "init: fix variable scope issue with ExpandArgs()" into oc-mr1-dev

parents 43a7da2c 48db85c1
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -134,17 +134,21 @@ static void SetUpPidNamespace(const std::string& service_name) {
    }
}

static void ExpandArgs(const std::vector<std::string>& args, std::vector<char*>* strs) {
static bool ExpandArgsAndExecve(const std::vector<std::string>& args) {
    std::vector<std::string> expanded_args;
    std::vector<char*> c_strings;

    expanded_args.resize(args.size());
    strs->push_back(const_cast<char*>(args[0].c_str()));
    c_strings.push_back(const_cast<char*>(args[0].data()));
    for (std::size_t i = 1; i < args.size(); ++i) {
        if (!expand_props(args[i], &expanded_args[i])) {
            LOG(FATAL) << args[0] << ": cannot expand '" << args[i] << "'";
        }
        strs->push_back(const_cast<char*>(expanded_args[i].c_str()));
        c_strings.push_back(expanded_args[i].data());
    }
    strs->push_back(nullptr);
    c_strings.push_back(nullptr);

    return execve(c_strings[0], c_strings.data(), (char**)ENV) == 0;
}

ServiceEnvironmentInfo::ServiceEnvironmentInfo() {
@@ -799,10 +803,8 @@ bool Service::Start() {
        // priority. Aborts on failure.
        SetProcessAttributes();

        std::vector<char*> strs;
        ExpandArgs(args_, &strs);
        if (execve(strs[0], (char**) &strs[0], (char**) ENV) < 0) {
            PLOG(ERROR) << "cannot execve('" << strs[0] << "')";
        if (!ExpandArgsAndExecve(args_)) {
            PLOG(ERROR) << "cannot execve('" << args_[0] << "')";
        }

        _exit(127);