NeKernel dev
Loading...
Searching...
No Matches
mkfs.h
Go to the documentation of this file.
1/* -------------------------------------------
2
3 Copyright (C) 2025, Amlal El Mahrouss, all rights reserved.
4
5------------------------------------------- */
6
7#pragma once
8
9#include <tooling/rang.h>
10#include <sstream>
11#include <iostream>
12#include <string>
13
14#define kMkFsSectorSz (512U)
15#define kMkFsMaxBadSectors (128U)
16
18namespace mkfs {
19
20namespace detail {
23 inline constexpr size_t gib_cast(uint32_t gb) {
24 return static_cast<size_t>(gb) * 1024ULL * 1024ULL * 1024ULL;
25 }
26
27 inline bool parse_decimal(const std::string& opt, unsigned long long& out) {
28 if (opt.empty()) return false;
29 char* endptr = nullptr;
30 unsigned long long val = std::strtoull(opt.c_str(), &endptr, 10);
31 if (endptr == opt.c_str() || *endptr != '\0') return false;
32 out = val;
33 return true;
34 }
35
36 inline bool parse_signed(const std::string& opt, long& out, int base = 10) {
37 if (opt.empty()) return false;
38 char* endptr = nullptr;
39 long val = std::strtol(opt.c_str(), &endptr, base);
40 if (endptr == opt.c_str() || *endptr != '\0' || val < 0) return false;
41 out = val;
42 return true;
43 }
44
45 inline std::string build_args(int argc, char** argv) {
46 std::string combined;
47 for (int i = 1; i < argc; ++i) {
48 combined += argv[i];
49 combined += ' ';
50 }
51 return combined;
52 }
53} // namespace detail
54
56template <typename CharType>
57inline std::basic_string<CharType> get_option(const std::basic_string<CharType>& args,
58 const std::basic_string<CharType>& option) {
59 size_t pos = args.find(option + CharType('='));
60
61 if (pos != std::string::npos) {
62 size_t start = pos + option.length() + 1;
63 size_t end = args.find(' ', start);
64 return args.substr(start, end - start);
65 }
66
67 return std::basic_string<CharType>{};
68}
69
70inline auto console_out() -> std::ostream& {
71 std::ostream& conout = std::cout;
72 conout << rang::fg::red << "mkfs: " << rang::style::reset;
73
74 return conout;
75}
76} // namespace mkfs
#define gib_cast(X)
Definition mkfs.h:20
std::string build_args(int argc, char **argv)
Definition mkfs.h:45
bool parse_signed(const std::string &opt, long &out, int base=10)
Definition mkfs.h:36
bool parse_decimal(const std::string &opt, unsigned long long &out)
Definition mkfs.h:27
Definition hefs.h:21
auto console_out() -> std::ostream &
Definition mkfs.h:70
std::basic_string< CharType > get_option(const std::basic_string< CharType > &args, const std::basic_string< CharType > &option)
Helper function to get the option value from command line arguments.
Definition mkfs.h:57
@ red
Definition rang.h:66
@ reset
Definition rang.h:52