blob: b0a2475659bd000f0b83b68b7eb4b036a28dd2a0 [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 "baz.h"
#include <stdlib.h>
#include "src/lib/fxl/strings/split_string.h"
namespace examples {
namespace fuzzing {
int Baz::Execute(const std::string &commands) {
auto lines = fxl::SplitStringCopy(commands, "\n", fxl::kTrimWhitespace, fxl::kSplitWantNonEmpty);
for (auto line : lines) {
auto tokens = fxl::SplitStringCopy(line, " ", fxl::kTrimWhitespace, fxl::kSplitWantNonEmpty);
auto len = tokens.size();
if (tokens[0].compare("set") != 0) {
continue;
}
if (len < 3) {
return -1;
}
int bar = atoi(tokens[2].c_str());
if (bar == 0) {
return -1;
}
if (tokens[1].compare("foo") == 0) {
std::unique_ptr<Foo> foo(new Foo(bar));
SetFoo(std::move(foo));
} else if (tokens[1].compare("foo") == 0) {
SetBar(bar);
} else {
return -1;
}
}
return 0;
}
void Baz::SetFoo(std::unique_ptr<Foo> foo) {
foo_.reset(foo.get());
if (bar_ == nullptr) {
bar_ = &foo_->bar_;
}
}
void Baz::SetBar(int bar) {
if (bar_ != nullptr) {
*bar_ = bar;
}
}
} // namespace fuzzing
} // namespace examples