socsvn commit: r329240 - soc2017/kneitinger/libbe-head/lib/libbe
allanjude at FreeBSD.org
allanjude at FreeBSD.org
Thu Nov 9 16:03:24 UTC 2017
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));
}
More information about the svn-soc-all
mailing list