blob: d2802f894868aab21b2fc05bc945bb3151634c89 [file] [log] [blame]
// Copyright 2021 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 <lib/async-loop/cpp/loop.h>
#include <lib/async-loop/default.h>
#include <lib/sys/cpp/component_context.h>
#include <lib/sys/inspect/cpp/component.h>
#include <lib/syslog/cpp/macros.h>
#include <lib/syslog/cpp/log_settings.h>
#include <lib/fdio/directory.h>
#include <lib/fdio/fd.h>
#include <lib/fdio/fdio.h>
#include <lib/fdio/limits.h>
#include <lib/fdio/vfs.h>
#include <lib/zx/channel.h>
#include <block-client/cpp/block-device.h>
#include <block-client/cpp/remote-block-device.h>
//#include "third_party/f2fs-tools/f2fs_tools.h"
#include <iostream>
#include <string>
#include "third_party/f2fs/f2fs.h"
int main(int argc, const char** argv) {
f2fs::MountOptions options;
f2fs::MkfsOptions mkfs_options;
std::cout << "f2fs arg= ";
for (int i=0; i < argc; i++) {
std::cout<< argv[i] << " ";
}
std::cout << std::endl;
if (argc <= 1) {
std::cout << "Hello F2FS!!!" << std::endl;
fprintf(stderr, "usage: mkfs [ <options>*] devicepath f2fs\n");
fprintf(stderr, "usage: fsck [ <options>*] devicepath f2fs\n");
fprintf(stderr, "usage: mount [ <options>*] devicepath f2fs\n");
return 0;
}
// Block device passed by handle
zx::channel device_channel = zx::channel(zx_take_startup_handle(FS_HANDLE_BLOCK_DEVICE_ID));
std::unique_ptr<block_client::RemoteBlockDevice> device;
zx_status_t status = block_client::RemoteBlockDevice::Create(std::move(device_channel), &device);
if (status != ZX_OK) {
FX_LOGS(ERROR) << "Could not access block device";
return -1;
}
std::unique_ptr<f2fs::Bcache> bc;
bool readonly_device = false;
if (f2fs::CreateBcache(std::move(device), &readonly_device, &bc) != ZX_OK) {
fprintf(stderr, "f2fs: error: cannot create block cache\n");
return -1;
}
//TODO: implement the fsck logic
if (!strcmp(argv[1], "mkfs")) {
f2fs::Mkfs(mkfs_options, std::move(bc));
} else if (!strcmp(argv[1], "fsck")) {
f2fs::Fsck(options, std::move(bc));
} else if (!strcmp(argv[1], "mount")) {
f2fs::Mount(options, std::move(bc));
} else {
std::cout << "F2FS: unknown operation:" << argv[1] << std::endl;
}
return 0;
}