Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 3 Aug 2018 01:46:46 +0000 (UTC)
From:      Kyle Evans <kevans@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r337225 - projects/bectl/sbin/bectl
Message-ID:  <201808030146.w731kkjW086346@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kevans
Date: Fri Aug  3 01:46:46 2018
New Revision: 337225
URL: https://svnweb.freebsd.org/changeset/base/337225

Log:
  bectl(8): Move dataset printing out into its own function
  
  This may later get reused for printing snapshot and/or origin snapshot
  information.

Modified:
  projects/bectl/sbin/bectl/bectl.c

Modified: projects/bectl/sbin/bectl/bectl.c
==============================================================================
--- projects/bectl/sbin/bectl/bectl.c	Fri Aug  3 01:43:51 2018	(r337224)
+++ projects/bectl/sbin/bectl/bectl.c	Fri Aug  3 01:46:46 2018	(r337225)
@@ -43,12 +43,19 @@
 
 #include <be.h>
 
-#define	HEADER_BE		"BE"
+#define	HEADER_BE	"BE"
 #define	HEADER_ACTIVE	"Active"
 #define	HEADER_MOUNT	"Mountpoint"
 #define	HEADER_SPACE	"Space"
 #define	HEADER_CREATED	"Created"
 
+struct printc {
+	int be_colsz;
+	int active_colsz_def;
+	int mount_colsz;
+	int space_colsz;
+};
+
 static int bectl_cmd_activate(int argc, char *argv[]);
 static int bectl_cmd_create(int argc, char *argv[]);
 static int bectl_cmd_destroy(int argc, char *argv[]);
@@ -56,6 +63,7 @@ static int bectl_cmd_export(int argc, char *argv[]);
 static int bectl_cmd_import(int argc, char *argv[]);
 static int bectl_cmd_add(int argc, char *argv[]);
 static int bectl_cmd_jail(int argc, char *argv[]);
+static void print_dataset(nvpair_t *cur, struct printc *pc);
 static int bectl_cmd_list(int argc, char *argv[]);
 static int bectl_cmd_mount(int argc, char *argv[]);
 static int bectl_cmd_rename(int argc, char *argv[]);
@@ -410,18 +418,74 @@ bectl_cmd_jail(int argc, char *argv[])
 	return (0);
 }
 
+static void
+print_dataset(nvpair_t *cur, struct printc *pc)
+{
+#define	BUFSZ	64
+	char buf[BUFSZ];
+	unsigned long long ctimenum, space;
+	nvlist_t *dsprops;
+	char *creation, *mnt, *name, *spacestr;
+	int active_colsz;
+	boolean_t active_now, active_reboot;
 
+	name = nvpair_name(cur);
+	/* XXX TODO: Some views show snapshots */
+	if (strchr(name, '@') != NULL)
+		return;
+	printf("%*s ", pc->be_colsz, name);
+
+	active_colsz = pc->active_colsz_def;
+	nvpair_value_nvlist(cur, &dsprops);
+	if (nvlist_lookup_boolean_value(dsprops, "active",
+	    &active_now) == 0 && active_now) {
+		printf("N");
+		active_colsz--;
+	}
+	if (nvlist_lookup_boolean_value(dsprops, "nextboot",
+	    &active_reboot) == 0 && active_reboot) {
+		printf("R");
+		active_colsz--;
+	}
+	if (active_colsz == pc->active_colsz_def) {
+		printf("-");
+		active_colsz--;
+	}
+	printf("%*s ", -active_colsz, " ");
+	if (nvlist_lookup_string(dsprops, "mountpoint", &mnt) == 0)
+		printf("%*s ", pc->mount_colsz, mnt);
+	else
+		printf("%*s ", pc->mount_colsz, "-");
+
+	if (nvlist_lookup_string(dsprops, "used", &spacestr) == 0) {
+		space = strtoull(spacestr, NULL, 10);
+
+		/* Alas, there's more to it,. */
+		humanize_number(buf, 6, space, "", HN_AUTOSCALE,
+			HN_DECIMAL | HN_NOSPACE | HN_B);
+		printf("%*s ", pc->space_colsz, buf);
+	} else
+		printf("%*s ", pc->space_colsz, "-");
+
+	if (nvlist_lookup_string(dsprops, "creation", &creation) == 0) {
+		ctimenum = strtoull(creation, NULL, 10);
+		strftime(buf, BUFSZ, "%Y-%m-%d %H:%M",
+		    localtime((time_t *)&ctimenum));
+		printf("%s", buf);
+	}
+
+	printf("\n");
+#undef BUFSZ
+}
+
 static int
 bectl_cmd_list(int argc, char *argv[])
 {
-#define	BUFSZ	64
+	struct printc pc;
 	nvpair_t *cur;
-	nvlist_t *props, *dsprops;
-	unsigned long long ctimenum, space;
+	nvlist_t *props;
 	size_t be_maxcol;
-	int active_colsz, active_colsz_def, be_colsz, mount_colsz, opt, space_colsz;
-	char buf[BUFSZ], *creation, *mnt, *spacestr;
-	boolean_t active_now, active_reboot;
+	int opt;
 	bool show_all_datasets, show_space, hide_headers, show_snaps;
 
 	props = NULL;
@@ -470,62 +534,20 @@ bectl_cmd_list(int argc, char *argv[])
 		be_maxcol = MAX(be_maxcol, strlen(nvpair_name(cur)));
 	}
 
-	be_colsz = -be_maxcol;
+	pc.be_colsz = -be_maxcol;
 	/* To be made negative after calculating final col sz */
-	active_colsz_def = strlen(HEADER_ACTIVE);
-	mount_colsz = -(int)strlen(HEADER_MOUNT);
-	space_colsz = -(int)strlen(HEADER_SPACE);
-	printf("%*s %s %s %s %s\n", be_colsz, HEADER_BE, HEADER_ACTIVE,
+	pc.active_colsz_def = strlen(HEADER_ACTIVE);
+	pc.mount_colsz = -(int)strlen(HEADER_MOUNT);
+	pc.space_colsz = -(int)strlen(HEADER_SPACE);
+	printf("%*s %s %s %s %s\n", pc.be_colsz, HEADER_BE, HEADER_ACTIVE,
 	    HEADER_MOUNT, HEADER_SPACE, HEADER_CREATED);
-	buf[5] = '\0';
-	cur = NULL;
 	for (cur = nvlist_next_nvpair(props, NULL); cur != NULL;
 	    cur = nvlist_next_nvpair(props, cur)) {
-		printf("%*s ", be_colsz, nvpair_name(cur));
-		// NR
-		active_colsz = active_colsz_def;
-		nvpair_value_nvlist(cur, &dsprops);
-		if (nvlist_lookup_boolean_value(dsprops, "active",
-		    &active_now) == 0 && active_now) {
-			printf("N");
-			active_colsz--;
-		}
-		if (nvlist_lookup_boolean_value(dsprops, "nextboot",
-		    &active_reboot) == 0 && active_reboot) {
-			printf("R");
-			active_colsz--;
-		}
-		if (active_colsz == active_colsz_def) {
-			printf("-");
-			active_colsz--;
-		}
-		printf("%*s ", -active_colsz, " ");
-		if (nvlist_lookup_string(dsprops, "mountpoint", &mnt) == 0)
-			printf("%*s ", mount_colsz, mnt);
-		else
-			printf("%*s ", mount_colsz, "-");
-		// used
-		if (nvlist_lookup_string(dsprops, "used", &spacestr) == 0) {
-			space = strtoull(spacestr, NULL, 10);
-			humanize_number(buf, 6, space, "", HN_AUTOSCALE,
-				HN_DECIMAL | HN_NOSPACE | HN_B);
-			printf("%*s ", space_colsz, buf);
-		} else
-			printf("%*s ", space_colsz, "-");
-
-		if (nvlist_lookup_string(dsprops, "creation", &creation) == 0) {
-			ctimenum = strtoull(creation, NULL, 10);
-			strftime(buf, BUFSZ, "%Y-%m-%d %H:%M",
-			    localtime((time_t *)&ctimenum));
-			printf("%s", buf);
-		}
-
-		printf("\n");
+		print_dataset(cur, &pc);
 	}
 	be_prop_list_free(props);
 
 	return (0);
-#undef BUFSZ
 }
 
 



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