Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Jun 2017 09:46:56 GMT
From:      kneitinger@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r323740 - soc2017/kneitinger/libbe-head/usr.bin/be
Message-ID:  <201706200946.v5K9ku0P051652@socsvn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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 <bsd.prog.mk>

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 <be.h>
-#include <err.h>
+#include <stdbool.h>
 #include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sysexits.h>
+
+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;
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201706200946.v5K9ku0P051652>