@@ -891,6 +891,54 @@ be_create_from_existing(libbe_handle_t *lbh, const char *bename, const char *old
891891 return (set_error (lbh , err ));
892892}
893893
894+ /*
895+ * Create a zfs dataset and map the return to libbe error.
896+ */
897+ static int
898+ be_zfs_create (libzfs_handle_t * lzh , const char * buf , zfs_type_t t ,
899+ nvlist_t * props )
900+ {
901+ int err ;
902+
903+ if ((err = zfs_create (lzh , buf , t , props )) != 0 ) {
904+ switch (err ) {
905+ case EZFS_EXISTS :
906+ return (BE_ERR_EXISTS );
907+ case EZFS_NOENT :
908+ return (BE_ERR_NOENT );
909+ case EZFS_BADTYPE :
910+ case EZFS_BADVERSION :
911+ return (BE_ERR_NOPOOL );
912+ case EZFS_BADPROP :
913+ default :
914+ /* We set something up wrong, probably... */
915+ return (BE_ERR_UNKNOWN );
916+ }
917+ }
918+
919+ return (BE_ERR_SUCCESS );
920+ }
921+
922+
923+ /*
924+ * Create an empty boot environment.
925+ */
926+ int
927+ be_create_empty (libbe_handle_t * lbh , const char * bename )
928+ {
929+ char buf [BE_MAXPATHLEN ];
930+ int err ;
931+
932+ if ((err = be_validate_name (lbh , bename )) != 0 )
933+ return (set_error (lbh , err ));
934+
935+ if ((err = be_root_concat (lbh , bename , buf )) != 0 )
936+ return (set_error (lbh , err ));
937+
938+ err = be_zfs_create (lbh -> lzh , buf , ZFS_TYPE_FILESYSTEM , NULL );
939+ return (set_error (lbh , err ));
940+ }
941+
894942
895943/*
896944 * Verifies that a snapshot has a valid name, exists, and has a mountpoint of
@@ -1118,21 +1166,9 @@ be_create_child_noent(libbe_handle_t *lbh, const char *active,
11181166 nvlist_add_string (props , "mountpoint" , child_path );
11191167
11201168 /* Create */
1121- if ((err = zfs_create (lbh -> lzh , active , ZFS_TYPE_DATASET ,
1169+ if ((err = be_zfs_create (lbh -> lzh , active , ZFS_TYPE_DATASET ,
11221170 props )) != 0 ) {
1123- switch (err ) {
1124- case EZFS_EXISTS :
1125- return (set_error (lbh , BE_ERR_EXISTS ));
1126- case EZFS_NOENT :
1127- return (set_error (lbh , BE_ERR_NOENT ));
1128- case EZFS_BADTYPE :
1129- case EZFS_BADVERSION :
1130- return (set_error (lbh , BE_ERR_NOPOOL ));
1131- case EZFS_BADPROP :
1132- default :
1133- /* We set something up wrong, probably... */
1134- return (set_error (lbh , BE_ERR_UNKNOWN ));
1135- }
1171+ return (set_error (lbh , err ));
11361172 }
11371173 nvlist_free (props );
11381174
0 commit comments