summaryrefslogtreecommitdiff
path: root/cmd/create/create.ha
diff options
context:
space:
mode:
authorAlejandro Sior <aho@sior.be>2022-06-21 15:38:48 +0200
committerAlejandro Sior <aho@sior.be>2022-06-21 15:38:48 +0200
commitf42a480cbe487fc5fb9b3772990e80926201f6e4 (patch)
treed6af05ea6942732fafa721c97895b66cd42298b3 /cmd/create/create.ha
parentd000a6edf4ad9fcc2302a80080fdbebb23fb7378 (diff)
gptman: reorganize commands in a cmd module
Diffstat (limited to 'cmd/create/create.ha')
-rw-r--r--cmd/create/create.ha41
1 files changed, 41 insertions, 0 deletions
diff --git a/cmd/create/create.ha b/cmd/create/create.ha
new file mode 100644
index 0000000..124d86e
--- /dev/null
+++ b/cmd/create/create.ha
@@ -0,0 +1,41 @@
+use fmt;
+use fs;
+use getopt;
+use io;
+use os;
+use strconv;
+
+use gpt;
+use cmd;
+
+export fn create(vol: str, args: []str) void = {
+ // XXX this is a stub
+
+ const c = getopt::parse(args,
+ "create a volume",
+ ('f', "file", "specify another partition file to fit"),
+ ('l', "length", "specify another length margin")
+ );
+ defer getopt::finish(&c);
+
+ let length = 0z;
+
+ for (let i = 0z; i < len(c.opts); i += 1) {
+ const opt = c.opts[i];
+ switch (opt.0) {
+ case 'l' =>
+ length += (strconv::stoi(opt.1)! / 512 + 1): size;
+ case 'f' =>
+ const stat = os::stat(opt.1)!;
+ length += stat.sz / 512 + 1;
+ };
+ };
+
+ const vol = cmd::mkvol(vol);
+ const vol = gpt::create(vol, length);
+ defer {
+ gpt::chksums(vol);
+ gpt::commit(vol)!;
+ gpt::finish(vol);
+ };
+};