diff --git a/flag/flag.go b/flag/flag.go new file mode 100644 index 0000000..71e76c1 --- /dev/null +++ b/flag/flag.go @@ -0,0 +1,18 @@ +package flag + +import ( + "flag" +) + +func ParseArgs(args []string) (string, string, error) { + kernel := flag.String("k", "./bzImage", "kernel image path") + initrd := flag.String("i", "./initrd", "initrd path") + + flag.Parse() + + if err := flag.CommandLine.Parse(args[1:]); err != nil { + return "", "", err + } + + return *kernel, *initrd, nil +} diff --git a/flag/flag_test.go b/flag/flag_test.go new file mode 100644 index 0000000..8f131d1 --- /dev/null +++ b/flag/flag_test.go @@ -0,0 +1,32 @@ +package flag_test + +import ( + "testing" + + "github.com/nmi/gokvm/flag" +) + +func TestParseArg(t *testing.T) { + t.Parallel() + + args := []string{ + "gokvm", + "-i", + "initrd_path", + "-k", + "kernel_path", + } + + kernel, initrd, err := flag.ParseArgs(args) + if err != nil { + t.Fatal(err) + } + + if kernel != "kernel_path" { + t.Fatal("invalid kernel image path") + } + + if initrd != "initrd_path" { + t.Fatal("invalid initrd path") + } +} diff --git a/main.go b/main.go index a862831..44dfccf 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,7 @@ import ( "log" "os" + "github.com/nmi/gokvm/flag" "github.com/nmi/gokvm/machine" // change to own library. @@ -12,12 +13,17 @@ import ( ) func main() { + kernelPath, initrdPath, err := flag.ParseArgs(os.Args) + if err != nil { + panic(err) + } + m, err := machine.New() if err != nil { panic(err) } - if err := m.LoadLinux("./bzImage", "./initrd"); err != nil { + if err := m.LoadLinux(kernelPath, initrdPath); err != nil { panic(err) }