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>