コード例 #1
0
ファイル: BaseJob.cpp プロジェクト: garodimb/haiku
/*!	Gets the environment by evaluating the source files, and move that
	environment to the static environment.

	When this method returns, the source files list will be empty.
*/
void
BaseJob::ResolveSourceFiles()
{
	if (fSourceFiles.IsEmpty())
		return;

	GetSourceFilesEnvironment(fEnvironment);
	fSourceFiles.MakeEmpty();
}
コード例 #2
0
ファイル: Job.cpp プロジェクト: jessicah/haiku-private
status_t
Job::Launch()
{
    // Build environment

    std::vector<const char*> environment;
    for (const char** variable = (const char**)environ; variable[0] != NULL;
            variable++) {
        environment.push_back(variable[0]);
    }

    if (Target() != NULL)
        _AddStringList(environment, Target()->Environment());
    _AddStringList(environment, Environment());

    // Resolve source files
    BStringList sourceFilesEnvironment;
    GetSourceFilesEnvironment(sourceFilesEnvironment);
    _AddStringList(environment, sourceFilesEnvironment);

    environment.push_back(NULL);

    if (fArguments.IsEmpty()) {
        // Launch by signature
        BString signature("application/");
        signature << Name();

        return _Launch(signature.String(), NULL, 0, NULL, &environment[0]);
    }

    // Build argument vector

    entry_ref ref;
    status_t status = get_ref_for_path(
                          Utility::TranslatePath(fArguments.StringAt(0).String()), &ref);
    if (status != B_OK) {
        _SetLaunchStatus(status);
        return status;
    }

    std::vector<BString> strings;
    std::vector<const char*> args;

    size_t count = fArguments.CountStrings() - 1;
    if (count > 0) {
        for (int32 i = 1; i < fArguments.CountStrings(); i++) {
            strings.push_back(Utility::TranslatePath(fArguments.StringAt(i)));
            args.push_back(strings.back());
        }
        args.push_back(NULL);
    }

    // Launch via entry_ref
    return _Launch(NULL, &ref, count, &args[0], &environment[0]);
}