changeset 13337:d584565e3743

706 beadm should accept 'umount' as well as 'unmount' Reviewed by: Garrett D'Amore <garrett@nexenta.com> Reviewed by: Dan McDonald <danmcd@nexenta.com> Reviewed by: Richard Lowe <richlowe@richlowe.net> Approved by: Gordon Ross <gwr@nexenta.com>
author Alexander Stetsenko <ams@nexenta.com>
date Wed, 13 Apr 2011 13:20:10 +0400
parents 194dde734096
children 5c9c658b0bee
files usr/src/cmd/beadm/beadm.c
diffstat 1 files changed, 25 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/beadm/beadm.c	Mon Apr 11 12:15:48 2011 -0700
+++ b/usr/src/cmd/beadm/beadm.c	Wed Apr 13 13:20:10 2011 +0400
@@ -24,7 +24,7 @@
  */
 
 /*
- * Copyright 2010 Nexenta Systems, Inc. All rights reserved.
+ * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
  */
 
 /*
@@ -95,24 +95,6 @@
 };
 
 /*
- * command id
- */
-enum be_cmd {
-	BE_CMD_ACTIVATE,
-	BE_CMD_CREATE,
-	BE_CMD_CREATE_SNAP,
-	BE_CMD_DESTROY,
-	BE_CMD_DESTROY_SNAP,
-	BE_CMD_LIST,
-	BE_CMD_MOUNT,
-	BE_CMD_UNMOUNT,
-	BE_CMD_RENAME,
-	BE_CMD_ROLLBACK,
-
-	BE_NUM_COMMANDS
-};
-
-/*
  * command handler description
  */
 typedef struct be_command {
@@ -123,7 +105,7 @@
 /*
  * sorted list of be commands
  */
-static const be_command_t be_command_tbl[BE_NUM_COMMANDS] = {
+static const be_command_t be_command_tbl[] = {
 	{ "activate",		be_do_activate },
 	{ "create",		be_do_create },
 	{ "create_snap",	be_do_create_snapshot },
@@ -132,8 +114,10 @@
 	{ "list",		be_do_list },
 	{ "mount",		be_do_mount },
 	{ "unmount",		be_do_unmount },
+	{ "umount",		be_do_unmount }, /* unmount alias */
 	{ "rename",		be_do_rename },
 	{ "rollback",		be_do_rollback },
+	{ NULL,			NULL },
 };
 
 static struct hdr_info hdrs[BE_NUM_FMTS] = { 0 };
@@ -158,6 +142,7 @@
 	    "\tbeadm list [[-a] | [-d] [-s]] [-H] [beName]\n"
 	    "\tbeadm mount [-s ro|rw] beName [mountpoint]\n"
 	    "\tbeadm unmount [-f] beName\n"
+	    "\tbeadm umount [-f] beName\n"
 	    "\tbeadm rename origBeName newBeName\n"
 	    "\tbeadm rollback beName snapshot\n"
 	    "\tbeadm rollback beName@snapshot\n"));
@@ -166,12 +151,11 @@
 static int
 run_be_cmd(const char *cmdname, int argc, char **argv)
 {
-	int cmd;
-	for (cmd = 0; cmd < BE_NUM_COMMANDS; cmd++) {
-		const be_command_t *command = &be_command_tbl[cmd];
+	const be_command_t *command;
+
+	for (command = &be_command_tbl[0]; command->name != NULL; command++)
 		if (strcmp(command->name, cmdname) == 0)
 			return (command->func(argc, argv));
-	}
 
 	(void) fprintf(stderr, _("Invalid command: %s\n"), cmdname);
 	usage();
@@ -258,8 +242,15 @@
 			wchar_t wname[128];
 			size_t sz = mbstowcs(wname, name, sizeof (wname) /
 			    sizeof (wchar_t));
-			if (sz > 0)
-				col[i].width = wcswidth(wname, sz);
+			if (sz > 0) {
+				int wcsw = wcswidth(wname, sz);
+				if (wcsw > 0)
+					col[i].width = wcsw;
+				else
+					col[i].width = sz;
+			} else {
+				col[i].width = strlen(name);
+			}
 		}
 	}
 }
@@ -308,14 +299,18 @@
 		char *pos;
 		size_t node_name_len = strlen(cur_be->be_node_name);
 		size_t root_ds_len = strlen(cur_be->be_root_ds);
-		size_t mntpt_len = strlen(cur_be->be_mntpt);
-		size_t policy_len = strlen(cur_be->be_policy_type);
+		size_t mntpt_len = 0;
+		size_t policy_len = 0;
 		size_t used_len;
-
 		uint64_t used = cur_be->be_space_used;
 		be_snapshot_list_t *snap = NULL;
 
-		(void) strncpy(name, root_ds, sizeof (name));
+		if (cur_be->be_mntpt != NULL)
+			mntpt_len = strlen(cur_be->be_mntpt);
+		if (cur_be->be_policy_type != NULL)
+			policy_len = strlen(cur_be->be_policy_type);
+
+		(void) strlcpy(name, root_ds, sizeof (name));
 		pos = strstr(name, be_name);
 
 		if (be_fmt == BE_FMT_DEFAULT) {