svn commit: r337225 - projects/bectl/sbin/bectl
Kyle Evans
kevans at FreeBSD.org
Fri Aug 3 01:46:47 UTC 2018
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
}
More information about the svn-src-projects
mailing list