blob: 2bc36ace06d83e3c26ec31a396d6292451da875a [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <ctype.h>
#include "argv.h"
namespace debugger_utils {
Argv BuildArgv(const fxl::StringView& args) {
Argv result;
// TODO: quoting, escapes, etc.
// TODO: tweaks for gdb-like command simplification?
// (e.g., p/x foo -> p /x foo)
size_t n = args.size();
for (size_t i = 0; i < n; ++i) {
while (i < n && isspace(args[i]))
++i;
if (i == n)
break;
size_t start = i;
++i;
while (i < n && !isspace(args[i]))
++i;
result.push_back(args.substr(start, i - start).ToString());
}
return result;
}
Argv BuildArgv(const char* const argv[], size_t count) {
Argv result;
for (size_t i = 0; i < count; ++i) {
result.push_back(argv[i]);
}
return result;
}
std::string ArgvToString(const Argv& argv) {
if (argv.size() == 0)
return "";
std::string result(argv[0]);
for (auto a = argv.begin() + 1; a != argv.end(); ++a)
result += " " + *a;
return result;
}
} // namespace inferior_control