From owner-svn-soc-all@freebsd.org Tue Jun 20 09:46:57 2017 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3BE74D93E98 for ; Tue, 20 Jun 2017 09:46:57 +0000 (UTC) (envelope-from kneitinger@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2EA417AD5E for ; Tue, 20 Jun 2017 09:46:57 +0000 (UTC) (envelope-from kneitinger@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id v5K9kvgM051667 for ; Tue, 20 Jun 2017 09:46:57 GMT (envelope-from kneitinger@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id v5K9ku0P051652 for svn-soc-all@FreeBSD.org; Tue, 20 Jun 2017 09:46:56 GMT (envelope-from kneitinger@FreeBSD.org) Date: Tue, 20 Jun 2017 09:46:56 GMT Message-Id: <201706200946.v5K9ku0P051652@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to kneitinger@FreeBSD.org using -f From: kneitinger@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r323740 - soc2017/kneitinger/libbe-head/usr.bin/be MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Jun 2017 09:46:57 -0000 Author: kneitinger Date: Tue Jun 20 09:46:55 2017 New Revision: 323740 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=323740 Log: Layout skeleton of be(1) command parser Modified: soc2017/kneitinger/libbe-head/usr.bin/be/Makefile soc2017/kneitinger/libbe-head/usr.bin/be/be.c Modified: soc2017/kneitinger/libbe-head/usr.bin/be/Makefile ============================================================================== --- soc2017/kneitinger/libbe-head/usr.bin/be/Makefile Tue Jun 20 08:44:03 2017 (r323739) +++ soc2017/kneitinger/libbe-head/usr.bin/be/Makefile Tue Jun 20 09:46:55 2017 (r323740) @@ -1,7 +1,13 @@ # @(#)Makefile 8.1 (Berkeley) 6/6/93 -PROG= be +PROG= be +WARNS?= 1 +MAN= be.1 -LIBADD= be +LIBADD= be +LIBADD= zfs +LIBADD= nvpair + +CFLAGS+= -DNEED_SOLARIS_BOOLEAN .include Modified: soc2017/kneitinger/libbe-head/usr.bin/be/be.c ============================================================================== --- soc2017/kneitinger/libbe-head/usr.bin/be/be.c Tue Jun 20 08:44:03 2017 (r323739) +++ soc2017/kneitinger/libbe-head/usr.bin/be/be.c Tue Jun 20 09:46:55 2017 (r323740) @@ -26,13 +26,141 @@ * SUCH DAMAGE. */ - -#include -#include +#include #include +#include +#include +#include + +static int be_activate( int argc, char *argv[]); +static int be_create( int argc, char *argv[]); +static int be_destroy( int argc, char *argv[]); +static int be_jail( int argc, char *argv[]); +static int be_list( int argc, char *argv[]); +static int be_mount( int argc, char *argv[]); +static int be_rename( int argc, char *argv[]); +static int be_unjail( int argc, char *argv[]); +static int be_unmount( int argc, char *argv[]); + + +static void +usage(bool explicit) +{ + FILE *fp = explicit ? stdout : stderr; + + fprintf(fp, "%s\n\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", + "usage: be ( -h | -? | subcommand [args...] )", + " be activate [-t] beName", + " be create [-r] [-e nonActiveBe | -e beName@snapshot] beName", + " be create [-r] beName@snapshot", + " be destroy [-F] ⟨beName | beName@snapshot⟩", + " be jail ⟨jailID | jailName⟩ bootenv", + " be list [-a] [-D] [-H] [-s]", + " be mount beName [mountpoint]", + " be rename origBeName newBeName", + " be { ujail | unjail } ⟨jailID | jailName⟩ bootenv", + " be { umount | unmount } [-f] beName"); + + return; +} + +/* + * Represents a relationship between the command name and the parser action + * that handles it. + */ +struct cmd_map_entry { + const char *command; + int (*fn)(int argc, char *argv[]); +}; + +static struct cmd_map_entry command_map[] = { + { "activate", be_activate }, + { "create", be_create }, + { "destroy", be_destroy }, + { "jail", be_jail }, + { "list", be_list }, + { "mount", be_mount }, + { "rename", be_rename }, + { "unjail", be_unjail }, + { "unmount", be_unmount }, +}; + + +static int +be_activate( int argc, char *argv[]) +{ + return(EX_USAGE); +} + +static int +be_create( int argc, char *argv[]) +{ + return(EX_USAGE); +} + +static int +be_destroy( int argc, char *argv[]) +{ + return(EX_USAGE); +} + +static int +be_jail( int argc, char *argv[]) +{ + return(EX_USAGE); +} + +static int +be_list( int argc, char *argv[]) +{ + return(EX_USAGE); +} + +static int +be_mount( int argc, char *argv[]) +{ + return(EX_USAGE); +} + +static int +be_rename( int argc, char *argv[]) +{ + return(EX_USAGE); +} + +static int +be_unjail( int argc, char *argv[]) +{ + return(EX_USAGE); +} + +static int +be_unmount( int argc, char *argv[]) +{ + return(EX_USAGE); +} int -main(int argc, char **argv) +main(int argc, char *argv[]) { + char *command; + + if (argc < 2) { + fprintf(stderr, "missing command\n"); + usage(false); + exit(EX_USAGE); + } + + command = argv[1]; + + /* Handle command aliases */ + if (strcmp(command, "umount") == 0) + command = "unmount"; + + if (strcmp(command, "ujail") == 0) + command = "unjail"; + + if (strcmp(command, "-?") == 0 || strcmp(command, "-h") == 0) + usage(true); return 0; }