socsvn commit: r323821 - soc2017/kneitinger/libbe-head/usr.bin/be

kneitinger at FreeBSD.org kneitinger at FreeBSD.org
Thu Jun 22 05:16:02 UTC 2017


Author: kneitinger
Date: Thu Jun 22 05:16:00 2017
New Revision: 323821
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=323821

Log:
  Add parser for be create and jail commands
  

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	Thu Jun 22 04:40:11 2017	(r323820)
+++ soc2017/kneitinger/libbe-head/usr.bin/be/be.c	Thu Jun 22 05:16:00 2017	(r323821)
@@ -143,7 +143,56 @@
 static int
 be_create(int argc, char *argv[])
 {
-	return (EX_USAGE);
+	int opt;
+	bool recursive;
+	char *existing;
+	char *bootenv;
+	char *snapshot;
+
+    	existing = NULL;
+	recursive = false;
+	while ((opt = getopt(argc, argv, "re:")) != -1) {
+		switch (opt) {
+		case 'e':
+            existing = optarg;
+			break;
+		case 'r':
+			recursive = true;
+			break;
+		default:
+			fprintf(stderr, "be create: unknown option '-%c'\n",
+			    optopt);
+			return (usage(false));
+		}
+	}
+
+	argc -= optind;
+	argv += optind;
+
+	if (argc != 1) {
+		fprintf(stderr, "be create: wrong number of arguments\n");
+		return (usage(false));
+	}
+
+	/* Determine bootenv name, and snapshot if provided */
+	char *buffer = malloc((strlen(argv[0])+1) * sizeof(char));
+	strcpy(buffer, argv[0]);
+	char *delimiter;
+	if ((delimiter = strchr(buffer, '@')) != NULL) {
+		*delimiter = '\0';
+		snapshot = delimiter + sizeof(char);
+		if (strchr(snapshot, '@') != NULL) {
+			fprintf(stderr, "be destroy: invalid snapshot name\n");
+			free(buffer);
+			return (usage(false));
+		}
+	}
+	bootenv = buffer;
+
+	/* create logic goes here */
+
+	free(buffer);
+	return (0);
 }
 
 
@@ -201,7 +250,21 @@
 static int
 be_jail(int argc, char *argv[])
 {
-	return (EX_USAGE);
+	char *bootenv, *jail;
+
+	if (argc < 3) {
+		fprintf(stderr, "be jail: not enough arguments\n");
+		return (usage(false));
+	}
+	if (argc > 3) {
+		fprintf(stderr, "be jail: too many arguments\n");
+		return (usage(false));
+	}
+
+	jail = argv[1];
+	bootenv = argv[2];
+
+	return (0);
 }
 
 
@@ -322,6 +385,5 @@
 		exit(usage(false));
 	}
 
-
 	return (command_map[command_index].fn(argc-1, argv+1));
 }


More information about the svn-soc-all mailing list