blob: 6cd84b98b333c74ee9fea180746a16818730d9ae [file] [log] [blame]
// Copyright 2015 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// A simple utility to remove and add partitions to an MTD device.
#define PROGRAM_NAME "nand_partition"
#include <base/command_line.h>
#include <base/macros.h>
#include <base/strings/string_number_conversions.h>
#include "installer/nand_partition.h"
using std::string;
namespace {
const char kHelpMessage[] = (PROGRAM_NAME
":\n"
" add <dev> <part_no> <start> <length>\n"
" del <dev> <part_no>\n"
"\n"
" both start and length are in bytes.\n");
const char kCommandAdd[] = "add";
const char kCommandDel[] = "del";
int ShowHelp() {
printf("%s\n", kHelpMessage);
return 1;
}
} // namespace
int main(int argc, char** argv) {
base::CommandLine::Init(argc, argv);
base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess();
base::CommandLine::StringVector args = cmdline->GetArgs();
if (args.size() > 2) {
int optind = 0;
string command = args[optind++];
string dev = args[optind++];
string s_part_no = args[optind++];
int part_no = 0;
if (!base::StringToInt(s_part_no, &part_no)) {
return ShowHelp();
}
if (command == kCommandDel && args.size() == 3) {
return (brillo::installer::RemoveNandPartition(dev, part_no)
? EXIT_SUCCESS
: EXIT_FAILURE);
} else if (command == kCommandAdd && args.size() == 5) {
string s_offset = args[optind++];
string s_length = args[optind++];
uint64_t offset, length;
if (!base::StringToUint64(s_offset, &offset) ||
!base::StringToUint64(s_length, &length)) {
return ShowHelp();
}
return brillo::installer::AddNandPartition(dev, part_no, offset, length)
? EXIT_SUCCESS
: EXIT_FAILURE;
}
}
return ShowHelp();
}