From owner-svn-src-projects@freebsd.org Fri Aug 3 01:46:47 2018 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 708591058927 for ; Fri, 3 Aug 2018 01:46:47 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 26A398A788; Fri, 3 Aug 2018 01:46:47 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0931719E66; Fri, 3 Aug 2018 01:46:47 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w731kkHG086347; Fri, 3 Aug 2018 01:46:46 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w731kkjW086346; Fri, 3 Aug 2018 01:46:46 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201808030146.w731kkjW086346@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Fri, 3 Aug 2018 01:46:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r337225 - projects/bectl/sbin/bectl X-SVN-Group: projects X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: projects/bectl/sbin/bectl X-SVN-Commit-Revision: 337225 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Aug 2018 01:46:47 -0000 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 -#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 }