Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 9 Nov 2017 16:03:18 GMT
From:      allanjude@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r329240 - soc2017/kneitinger/libbe-head/lib/libbe
Message-ID:  <201711091603.vA9G3IaA040756@socsvn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: allanjude
Date: Thu Nov  9 16:03:18 2017
New Revision: 329240
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=329240

Log:
  Make be_create() and be_create_from_existing() just wrappers around be_create_from_existing_snap()

Modified:
  soc2017/kneitinger/libbe-head/lib/libbe/be.c

Modified: soc2017/kneitinger/libbe-head/lib/libbe/be.c
==============================================================================
--- soc2017/kneitinger/libbe-head/lib/libbe/be.c	Thu Nov  9 15:43:15 2017	(r329239)
+++ soc2017/kneitinger/libbe-head/lib/libbe/be.c	Thu Nov  9 16:03:18 2017	(r329240)
@@ -231,79 +231,15 @@
 }
 
 
-// TODO: should be rewritten to just call be_create_from_existing() with
-// the current bootenv!
-
 /*
  * Create the boot environment specified by the name parameter
  */
 int
 be_create(libbe_handle_t *lbh, char *name)
 {
-	int err, pos;
-	char be_path[BE_MAXPATHLEN];
-	char snap_name[BE_MAXPATHLEN];
-	time_t rawtime;
-	zfs_handle_t *snap_hdl;
-	nvlist_t *props;
-
-	if (be_validate_name(lbh, name)) {
-		return (set_error(lbh, BE_ERR_INVALIDNAME));
-	}
-
-	if (err = be_root_concat(lbh, name, be_path)) {
-		return (set_error(lbh, err));
-	}
-
-	if (zfs_dataset_exists(lbh->lzh, be_path, ZFS_TYPE_DATASET)) {
-		err = set_error(lbh, BE_ERR_EXISTS);
-		return (err);
-	}
-
-
-	time(&rawtime);
-	// TODO: strcat!
-	pos = snprintf(snap_name, BE_MAXPATHLEN, "%s", be_active_path(lbh));
-	strftime(snap_name + pos, BE_MAXPATHLEN - pos,
-	    "@%F-%T", localtime(&rawtime));
-
-	if (err = zfs_snapshot(lbh->lzh, snap_name, false, NULL)) {
-		switch (err) {
-		case EZFS_SUCCESS:
-			break;
-		case EZFS_INVALIDNAME:
-			return (set_error(lbh, BE_ERR_INVALIDNAME));
-
-		default:
-			// TODO: elaborate return codes
-			return (set_error(lbh, BE_ERR_UNKNOWN));
-		}
-	}
-
-	if ((snap_hdl = zfs_open(lbh->lzh, snap_name, ZFS_TYPE_SNAPSHOT))
-	    == NULL) {
-		return (set_error(lbh, BE_ERR_ZFSOPEN));
-	}
-
-	nvlist_alloc(&props, NV_UNIQUE_NAME, KM_SLEEP);
-	nvlist_add_string(props, "canmount", "noauto");
-	nvlist_add_string(props, "mountpoint", "/");
-
-
-	if (err = zfs_clone(snap_hdl, be_path, NULL)) {
-		switch (err) {
-		case EZFS_SUCCESS:
-			err = BE_ERR_SUCCESS;
-			break;
-		default:
-			err = BE_ERR_ZFSCLONE;
-			break;
-		}
-	}
-
-	nvlist_free(props);
+	int err;
 
-	zfs_close(snap_hdl);
+	err = be_create_from_existing(lbh, name, (char *)be_active_path(lbh));
 
 	return (set_error(lbh, err));
 }
@@ -369,7 +305,7 @@
 
 
 /*
- * Create a copy of an existing boot environment
+ * Create a boot environment from an existing boot environment
  */
 int
 be_create_from_existing(libbe_handle_t *lbh, char *name, char *old)
@@ -377,24 +313,13 @@
 	int err;
 	char buf[BE_MAXPATHLEN];
 
-
-	long int snap_num = random();
-
-	be_root_concat(lbh, old, buf);
-	snprintf(buf + strlen(buf), BE_MAXPATHLEN, "@%ld", snap_num);
-
-	if (err = zfs_snapshot(lbh->lzh, buf, true, NULL)) {
-		// TODO correct error
-		return (-1);
+	if ((err = be_snapshot_recursive(lbh, old, NULL, true, (char *)&buf))) {
+		return (set_error(lbh, err));
 	}
 
-	snprintf(buf, BE_MAXPATHLEN, "%s@%ld", old, snap_num);
-
-	err = be_create_from_existing_snap(lbh, name, buf);
+	err = be_create_from_existing_snap(lbh, name, (char *)buf);
 
-	// TODO: delete snap
-
-	return (err);
+	return (set_error(lbh, err));
 }
 
 



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