Extract display literals

This commit is contained in:
наб 2020-10-31 03:59:14 +01:00
parent 18df30d93b
commit 4a561d6e13
No known key found for this signature in database
GPG Key ID: BCFD0B018D2658F1

View File

@ -13,6 +13,10 @@
/// zfs(8) uses struct zprop_get_cbdata_t, which is powerful, but inscrutable; we have a fixed format, which makes this easier
struct output_line {
static const char * const key_available_display[2];
static const char * const coherent_display[2];
char name[ZFS_MAX_DATASET_NAME_LEN + 1];
char backend[TZPFMS_BACKEND_MAX_LEN + 1];
bool key_available : 1;
@ -21,8 +25,13 @@ struct output_line {
bool included(bool print_nontzpfms, const char * backend_restrixion) const {
return (print_nontzpfms || this->backend[0] != '\0') && (!backend_restrixion || !strcmp(backend_restrixion, this->backend));
}
const char * backend_display() const { return (this->backend[0] != '\0') ? this->backend : "-"; }
};
const char * const output_line::key_available_display[2]{"unavailable", key_available_display[0] + 2};
const char * const output_line::coherent_display[2]{"no", "yes"};
int main(int argc, char ** argv) {
bool human = true;
@ -98,8 +107,8 @@ int main(int argc, char ** argv) {
for(auto cur = lines; cur != lines + lines_len; ++cur)
if(cur->included(print_nontzpfms, backend_restrixion)) {
max_name_len = std::max(max_name_len, strlen(cur->name));
max_backend_len = std::max(max_backend_len, (cur->backend[0] != '\0') ? strlen(cur->backend) : strlen("-"));
max_key_available_len = std::max(max_key_available_len, cur->key_available ? strlen("available") : strlen("unavailable"));
max_backend_len = std::max(max_backend_len, strlen(cur->backend_display()));
max_key_available_len = std::max(max_key_available_len, strlen(output_line::key_available_display[cur->key_available]));
}
}
@ -114,7 +123,7 @@ int main(int argc, char ** argv) {
println("NAME", "BACK-END", "KEYSTATUS", "COHERENT");
for(auto cur = lines; cur != lines + lines_len; ++cur)
if(cur->included(print_nontzpfms, backend_restrixion))
println(cur->name, (cur->backend[0] != '\0') ? cur->backend : "-", cur->key_available ? "available" : "unavailable", cur->coherent ? "yes" : "no");
println(cur->name, cur->backend_display(), output_line::key_available_display[cur->key_available], output_line::coherent_display[cur->coherent]);
return 0;
});