Ejemplo n.º 1
0
Archivo: dnx.cpp Proyecto: Alexei-/dnx
bool ExpandCommandLineArguments(int nArgc, dnx::char_t** ppszArgv, size_t& nExpandedArgc, dnx::char_t**& ppszExpandedArgv)
{
    // --appbase was found expansion not needed
    if (dnx::utils::find_bootstrapper_option_index(nArgc, ppszArgv, _X("--appbase")) >= 0)
    {
        return false;
    }

    // no non-bootstrapper option found expansion is not needed
    auto param_idx = dnx::utils::find_first_non_bootstrapper_param_index(nArgc, ppszArgv);
    if (param_idx < 0)
    {
        return false;
    }

    bool arg_expanded = false;
    std::vector<const dnx::char_t*> expanded_args_temp;
    for (int source_idx = 0; source_idx < nArgc; source_idx++)
    {
        if (!arg_expanded)
        {
            if (dnx::utils::strings_equal_ignore_case(_X("-p"), ppszArgv[source_idx]) ||
                dnx::utils::strings_equal_ignore_case(_X("--project"), ppszArgv[source_idx]))
            {
                // Note that ++source_idx is safe here since if we had a trailing -p/--project we would have exited
                // before entering the loop because we wouldn't have found any non host option
                ExpandProject(ppszArgv[++source_idx], expanded_args_temp);
                arg_expanded = true;
            }
            else if (source_idx == param_idx)
            {
                ExpandNonHostArgument(ppszArgv[source_idx], expanded_args_temp);
                arg_expanded = true;
            }
            else
            {
                expanded_args_temp.push_back(allocate_and_copy(ppszArgv[source_idx]));
            }
        }
        else
        {
            expanded_args_temp.push_back(allocate_and_copy(ppszArgv[source_idx]));
        }
    }

    nExpandedArgc = expanded_args_temp.size();
    ppszExpandedArgv = new dnx::char_t*[nExpandedArgc];

    for (size_t i = 0; i < nExpandedArgc; i++)
    {
        ppszExpandedArgv[i] = const_cast<dnx::char_t*>(expanded_args_temp[i]);
    }

    return true;
}
Ejemplo n.º 2
0
Archivo: dnx.cpp Proyecto: Alexei-/dnx
void AppendAppbaseFromFile(const dnx::char_t* path, std::vector<const dnx::char_t*>& expanded_args)
{
    auto split_idx = split_path(path);

    expanded_args.push_back(allocate_and_copy(_X("--appbase")));

    if (split_idx < 0)
    {
        expanded_args.push_back(allocate_and_copy(_X(".")));
    }
    else
    {
        expanded_args.push_back(allocate_and_copy(path, split_idx + 1));
    }
}
Ejemplo n.º 3
0
void SimpleString::range_initializer(const char *first, const char *last) {

	auto newStr = allocate_and_copy(first, last);
	_first_element = newStr.first;
	_first_free = _capacity = newStr.second;
	_last_element = _first_free - 1;
}
Ejemplo n.º 4
0
/**
 *  The copy assignment operator
 *
 *  @param rhs the reference to the StringVector to be copied
 *
 *  @return reference to "this"
 */
StringVector &StringVector::operator=(const StringVector &rhs){
    auto data = allocate_and_copy(rhs.begin(), rhs.end());
    free();
    elements = data.first;
    first_free_element = one_past_last_element = data.second;
    return *this;
}
Ejemplo n.º 5
0
Archivo: dnx.cpp Proyecto: Alexei-/dnx
void ExpandNonHostArgument(const dnx::char_t* value, std::vector<const dnx::char_t*>& expanded_args)
{
    if (string_ends_with_ignore_case(value, _X(".dll")) || string_ends_with_ignore_case(value, _X(".exe")))
    {
        // "dnx /path/App.dll arg1" --> "dnx --appbase /path/ /path/App.dll arg1"
        // "dnx /path/App.exe arg1" --> "dnx --appbase /path/ /path/App.exe arg1"
        // "dnx App.exe arg1" --> "dnx --appbase . App.exe arg1"
        AppendAppbaseFromFile(value, expanded_args);
        expanded_args.push_back(allocate_and_copy(value));
        return;
    }

    // "dnx run" --> "dnx --appbase . Microsoft.Dnx.ApplicationHost run"
    expanded_args.push_back(allocate_and_copy(_X("--appbase")));
    expanded_args.push_back(allocate_and_copy(_X(".")));
    expanded_args.push_back(allocate_and_copy(_X("Microsoft.Dnx.ApplicationHost")));
    expanded_args.push_back(allocate_and_copy(value));
}
Ejemplo n.º 6
0
Archivo: dnx.cpp Proyecto: Alexei-/dnx
void ExpandProject(const dnx::char_t* project_path, std::vector<const dnx::char_t*>& expanded_args)
{
    auto split_idx = split_path(project_path);

    // note that we split the path first and check the file name to handle paths like c:\MyApp\my_project.json
    // (`split_idx + 1` works fine since `split_path` returns -1 if it does not find `\` or '/')
    if (dnx::utils::strings_equal_ignore_case(project_path + split_idx + 1, _X("project.json")))
    {
        // "dnx /path/project.json run" --> "dnx --appbase /path/ Microsoft.Dnx.ApplicationHost run"
        AppendAppbaseFromFile(project_path, expanded_args);
        expanded_args.push_back(allocate_and_copy(_X("Microsoft.Dnx.ApplicationHost")));
        return;
    }

    expanded_args.push_back(allocate_and_copy(_X("--appbase")));
    expanded_args.push_back(allocate_and_copy(project_path));
    expanded_args.push_back(allocate_and_copy(_X("Microsoft.Dnx.ApplicationHost")));
}
Ejemplo n.º 7
0
SimpleString &SimpleString::operator=(const SimpleString &rhs) {

	// copy assignment

	auto newstr = allocate_and_copy(rhs._first_element, rhs._first_free);
	free();
	_first_element = newstr.first;
	_first_free = _capacity = newstr.second;
	_last_element = _first_free - 1;

	std::cout << "copy assignment" << std::endl;

	return *this;
}
Ejemplo n.º 8
0
StringVector::StringVector(const StringVector &s){
    auto newdata = allocate_and_copy(s.begin(), s.end());
    elements = newdata.first;
    first_free_element = newdata.second;
}
Ejemplo n.º 9
0
Archivo: dnx.cpp Proyecto: Alexei-/dnx
const dnx::char_t* allocate_and_copy(const dnx::char_t* value)
{
    return allocate_and_copy(value, x_strlen(value));
}