blob: 1e0e9276af114b28f650c1552db973452729d0e0 [file] [log] [blame] [edit]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "brillo/blkdev_utils/emmc.h"
#include <base/files/file_path.h>
#include <base/files/file_util.h>
#include <base/logging.h>
#include <brillo/brillo_export.h>
#include <brillo/process/process.h>
namespace brillo {
namespace {
constexpr const char kMmcTool[] = "mmc";
} // namespace
bool Emmc::SupportPhysicalErasure() const {
return true;
}
LogicalErasureIoctl Emmc::GetLogicalErasureIoctlType() const {
return LogicalErasureIoctl::blksecdiscard;
}
bool Emmc::PhysicalErasure(const base::FilePath& device_path,
const uint64_t device_length) const {
brillo::ProcessImpl mmc;
mmc.SetSearchPath(true);
mmc.AddArg(kMmcTool);
mmc.AddStringOption("sanitize", device_path.value().c_str());
mmc.RedirectUsingMemory(STDOUT_FILENO);
mmc.RedirectUsingMemory(STDERR_FILENO);
LOG(INFO) << "Running `mmc sanitize` ...";
int mmc_ret = mmc.Run();
if (mmc_ret) {
LOG(ERROR) << "Failed to run `mmc sanitize` (Error Code: " << mmc_ret
<< "):\n"
<< mmc.GetOutputString(STDERR_FILENO);
} else {
LOG(INFO) << mmc.GetOutputString(STDOUT_FILENO);
}
return mmc_ret == 0;
}
} // namespace brillo