Date: Wed, 21 Jun 2017 07:14:11 GMT From: kneitinger@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r323785 - soc2017/kneitinger/libbe-head/usr.bin/be Message-ID: <201706210714.v5L7EBhQ087015@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kneitinger Date: Wed Jun 21 07:14:10 2017 New Revision: 323785 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=323785 Log: Add parser for be activate command Modified: soc2017/kneitinger/libbe-head/usr.bin/be/be.c Modified: soc2017/kneitinger/libbe-head/usr.bin/be/be.c ============================================================================== --- soc2017/kneitinger/libbe-head/usr.bin/be/be.c Wed Jun 21 06:44:56 2017 (r323784) +++ soc2017/kneitinger/libbe-head/usr.bin/be/be.c Wed Jun 21 07:14:10 2017 (r323785) @@ -31,6 +31,7 @@ #include <stdlib.h> #include <string.h> #include <sysexits.h> +#include <unistd.h> static int be_activate( int argc, char *argv[]); static int be_create( int argc, char *argv[]); @@ -68,12 +69,12 @@ * Represents a relationship between the command name and the parser action * that handles it. */ -struct cmd_map_entry { +struct command_map_entry { const char *command; int (*fn)(int argc, char *argv[]); }; -static struct cmd_map_entry command_map[] = { +static struct command_map_entry command_map[] = { { "activate", be_activate }, { "create", be_create }, { "destroy", be_destroy }, @@ -85,11 +86,56 @@ { "unmount", be_unmount }, }; +static int +get_cmd_index(char *cmd, int *index) +{ + int map_size = sizeof(command_map) / sizeof (struct command_map_entry); + + for (int i=0; i < map_size; ++i) { + if (strcmp(cmd, command_map[i].command) == 0) { + *index = i; + return 0; + } + } + + return 1; +} + static int be_activate( int argc, char *argv[]) { - return(EX_USAGE); + int opt; + bool temp; + char *bootenv; + + temp = false; + while((opt = getopt(argc, argv, "t")) != -1) { + switch(opt) { + case 't': + temp = true; + break; + default: + fprintf(stderr, "be activate: unknown option '-%c'\n", + optopt); + usage(false); + return(EX_USAGE); + } + } + + argc -= optind; + argv += optind; + + if(argc != 1) { + fprintf(stderr, "be activate: wrong number of arguments\n"); + usage(false); + } + + bootenv = argv[0]; + + /* activate logic goes here */ + + return 0; } static int @@ -143,7 +189,8 @@ int main(int argc, char *argv[]) { - char *command; + char *command; + int command_index; if (argc < 2) { fprintf(stderr, "missing command\n"); @@ -162,5 +209,13 @@ if (strcmp(command, "-?") == 0 || strcmp(command, "-h") == 0) usage(true); - return 0; + + if (get_cmd_index(command, &command_index)) { + fprintf(stderr, "unknown command: %s\n", command); + usage(false); + exit(EX_USAGE); + } + + + return command_map[command_index].fn(argc-1,argv+1); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201706210714.v5L7EBhQ087015>
