From 7d16a9fb37b8a6204d76f187444330b8faae4e4e Mon Sep 17 00:00:00 2001 From: Joseph Richey Date: Thu, 5 Oct 2017 04:55:01 -0700 Subject: ext4: Build working, args parsing --- ext4/ext4.go | 83 +++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 68 insertions(+), 15 deletions(-) (limited to 'ext4') diff --git a/ext4/ext4.go b/ext4/ext4.go index cbe87da..401d208 100644 --- a/ext4/ext4.go +++ b/ext4/ext4.go @@ -1,37 +1,90 @@ package main import ( + "flag" "fmt" "io" + "io/ioutil" "os" ) -func printUsage(w io.Writer, name string) { - fmt.Fprintf(w, "Usage: %s [enable|disable] [--force]\n\n", name) - fmt.Fprintln(w, "Enable or disable encryption on an ext4 filesystem.") - fmt.Fprintln(w, " - Path to the filesystem device") - fmt.Fprintln(w, " --force - Automatically proceed with the operation") +var ( + // Setup command parsing + cmdName = os.Args[0] + set = flag.NewFlagSet(cmdName, flag.ContinueOnError) + // Flags for our command + forceFlag = set.Bool("force", false, "Suppress all warnings and do not prompt") + versionFlag = set.Bool("version", false, "Print the fscrypt version.") + helpFlag = set.Bool("help", false, "Print this help text.") + // fscrypt's version (set by Makefile) + version string +) + +const ( + manPage = "fscrypt-ext4(8)" + manBrief = "enable or disable encryption on an ext4 filesystem" + usageFmt = ` +Usage: + %[1]s [enable | disable] [--force] + %[1]s --help + %[1]s --version + +Arguments: + - path to an ext4 filesystem +` +) + +func printUsageAndExit(err error) { + var w io.Writer + var rc int + if err == nil { + w = os.Stdout + rc = 0 + fmt.Fprintf(w, "%s - %s\n", cmdName, manBrief) + } else { + w = os.Stderr + rc = 1 + fmt.Fprintf(w, "%s: %v\n", cmdName, err) + } + + fmt.Fprintf(w, usageFmt, cmdName) + fmt.Fprintln(w, "\nOptions:") + set.VisitAll(func(f *flag.Flag) { + fmt.Fprintf(w, "\t--%s\n\t\t%s\n", f.Name, f.Usage) + }) + fmt.Fprintf(w, "\nSee the %s man page for more info.\n", manPage) + os.Exit(rc) } func main() { - if len(os.Args) != 3 { - printUsage(os.Stderr, os.Args[0]) - os.Exit(1) + set.SetOutput(ioutil.Discard) + if err := set.Parse(os.Args[1:]); err != nil { + printUsageAndExit(err) + } + if *helpFlag { + printUsageAndExit(nil) } - switch os.Args[1] { + if *versionFlag { + fmt.Println(version) + return + } + if set.NArg() != 2 { + printUsageAndExit(fmt.Errorf("expected 2 arguments, got %d", set.NArg())) + } + + command, mountpoint := set.Arg(0), set.Arg(1) + switch command { case "enable": fmt.Println("Enabling encryption!!") case "disable": fmt.Println("Disabling encryption!!") default: - fmt.Fprintf(os.Stderr, "%s: invalid command %q\n", os.Args[0], os.Args[1]) - printUsage(os.Stderr, os.Args[0]) - os.Exit(1) + printUsageAndExit(fmt.Errorf("invalid command %q", command)) } - if isExt4EncryptionEnabled(os.Args[2]) { - fmt.Printf("%q has encryption\n", os.Args[2]) + if isExt4EncryptionEnabled(mountpoint) { + fmt.Printf("%q has encryption\n", mountpoint) } else { - fmt.Printf("%q doesn't have encryption\n", os.Args[2]) + fmt.Printf("%q doesn't have encryption\n", mountpoint) } } -- cgit v1.2.3