aboutsummaryrefslogtreecommitdiff
path: root/ext4
diff options
context:
space:
mode:
authorJoseph Richey <joerichey94@gmail.com>2017-10-05 04:55:01 -0700
committerJoseph Richey <joerichey94@gmail.com>2017-10-19 02:22:23 -0700
commit7d16a9fb37b8a6204d76f187444330b8faae4e4e (patch)
tree5fe74c7ba686715f1cf754896db639f2d6a4df38 /ext4
parentef2407fd0ae0ccc31cd894f0e2f84e0a871547a4 (diff)
ext4: Build working, args parsing
Diffstat (limited to 'ext4')
-rw-r--r--ext4/ext4.go83
1 files changed, 68 insertions, 15 deletions
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] <device> [--force]\n\n", name)
- fmt.Fprintln(w, "Enable or disable encryption on an ext4 filesystem.")
- fmt.Fprintln(w, " <device> - 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] <mountpoint> [--force]
+ %[1]s --help
+ %[1]s --version
+
+Arguments:
+ <mountpoint> - 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)
}
}