forked from pool/bcache-tools
Jan Engelhardt
3dff4d17f4
- Remove dependence of smartcols bcache-tools.spec, bcache-tools code doesn't need it now. (jsc#SLE-9807) - Remove 1001-udev-do-not-rely-on-DRIVER-variable.patch because we have 0013-bcache-tools-Export-CACHED_UUID-and-CACHED_LABEL.patch to provide static UUIDs. (jsc#SLE-9807) - bcache-tools: add man page bcache-status.8 (jsc#SLE-9807) 0017-bcache-tools-add-man-page-bcache-status.8.patch - bcache-tools: add bcache-status (jsc#SLE-9807) 0016-bcache-tools-add-bcache-status.patch - bcache-tools: make: permit only one cache device to be specified (jsc#SLE-9807) 0015-bcache-tools-make-permit-only-one-cache-device-to-be.patch - bcache-tools: Remove the dependency on libsmartcols (jsc#SLE-9807) 0014-bcache-tools-Remove-the-dependency-on-libsmartcols.patch - bcache-tools: Export CACHED_UUID and CACHED_LABEL (jsc#SLE-9807) 0013-bcache-tools-Export-CACHED_UUID-and-CACHED_LABEL.patch - bcache-tools: Fix potential coredump issues (jsc#SLE-9807) 0012-bcache-tools-Fix-potential-coredump-issues.patch - bcache-tools: add print_cache_set_supported_feature_sets() in lib.c (jsc#SLE-9807) 0011-bcache-tools-add-print_cache_set_supported_feature_s.patch - bcache-tools: add large_bucket incompat feature (jsc#SLE-9807) 0010-bcache-tools-add-large_bucket-incompat-feature.patch - bcache-tools: upgrade super block versions for feature sets (jsc#SLE-9807) 0009-bcache-tools-upgrade-super-block-versions-for-featur.patch - bcache-tools: define separated super block for in-memory and on-disk format (jsc#SLE-9807) OBS-URL: https://build.opensuse.org/request/show/841483 OBS-URL: https://build.opensuse.org/package/show/filesystems/bcache-tools?expand=0&rev=27
151 lines
4.3 KiB
Diff
151 lines
4.3 KiB
Diff
From 38726cd652e3a3b75f2ae26f8b73e05dff7ed662 Mon Sep 17 00:00:00 2001
|
|
From: Shaoxiong Li <dahefanteng@gmail.com>
|
|
Date: Wed, 19 Aug 2020 18:51:28 +0800
|
|
Subject: [PATCH 14/17] bcache-tools: Remove the dependency on libsmartcols
|
|
Git-commit: 38726cd652e3a3b75f2ae26f8b73e05dff7ed662
|
|
Patch-mainline: bcache-tools-1.1
|
|
References: jsc#SLE-9807
|
|
|
|
The bcache tree function relies on the libsmartcols library to
|
|
display the relationship between the cache device and the bdev
|
|
device in a tree shape. However, it is difficult for many old
|
|
operating systems (such as Ubuntu 12) to install this library.
|
|
|
|
For better compatibility, a simpler implementation is used to
|
|
achieve the same purpose, while removing the dependency on
|
|
libsmartcols.
|
|
|
|
Signed-off-by: Shaoxiong Li <dahefanteng@gmail.com>
|
|
Signed-off-by: Coly Li <colyli@suse.de>
|
|
---
|
|
Makefile | 8 ++++----
|
|
bcache.c | 53 +++++++++++++++++++++++++++++++++++------------------
|
|
2 files changed, 39 insertions(+), 22 deletions(-)
|
|
|
|
diff --git a/Makefile b/Makefile
|
|
index 90db951..df44085 100644
|
|
--- a/Makefile
|
|
+++ b/Makefile
|
|
@@ -22,8 +22,8 @@ clean:
|
|
|
|
bcache-test: LDLIBS += `pkg-config --libs openssl` -lm
|
|
|
|
-make-bcache: LDLIBS += `pkg-config --libs uuid blkid smartcols`
|
|
-make-bcache: CFLAGS += `pkg-config --cflags uuid blkid smartcols`
|
|
+make-bcache: LDLIBS += `pkg-config --libs uuid blkid`
|
|
+make-bcache: CFLAGS += `pkg-config --cflags uuid blkid`
|
|
make-bcache: make.o crc64.o lib.o zoned.o
|
|
|
|
probe-bcache: LDLIBS += `pkg-config --libs uuid blkid`
|
|
@@ -35,7 +35,7 @@ bcache-super-show: crc64.o lib.o
|
|
|
|
bcache-register: bcache-register.o
|
|
|
|
-bcache: CFLAGS += `pkg-config --cflags blkid uuid smartcols`
|
|
-bcache: LDLIBS += `pkg-config --libs blkid uuid smartcols`
|
|
+bcache: CFLAGS += `pkg-config --cflags blkid uuid`
|
|
+bcache: LDLIBS += `pkg-config --libs blkid uuid`
|
|
bcache: CFLAGS += -std=gnu99
|
|
bcache: crc64.o lib.o make.o zoned.o features.o
|
|
diff --git a/bcache.c b/bcache.c
|
|
index 3b963e4..a0c5a67 100644
|
|
--- a/bcache.c
|
|
+++ b/bcache.c
|
|
@@ -10,13 +10,13 @@
|
|
#include <unistd.h>
|
|
#include <getopt.h>
|
|
#include <regex.h>
|
|
-#include <libsmartcols/libsmartcols.h>
|
|
#include "bcache.h"
|
|
#include "lib.h"
|
|
#include "make.h"
|
|
#include <locale.h>
|
|
#include "list.h"
|
|
#include <limits.h>
|
|
+#include <assert.h>
|
|
|
|
#include "features.h"
|
|
|
|
@@ -425,8 +425,34 @@ int detail_single(char *devname)
|
|
return 0;
|
|
}
|
|
|
|
+void replace_line(char **dest, const char *from, const char *to)
|
|
+{
|
|
+ assert(strlen(from) == strlen(to));
|
|
+ char sub[4096] = "";
|
|
+ char new[4096] = "";
|
|
+
|
|
+ strcpy(sub, *dest);
|
|
+ while (1) {
|
|
+ char *tmp = strpbrk(sub, from);
|
|
+
|
|
+ if (tmp != NULL) {
|
|
+ strcpy(new, tmp);
|
|
+ strcpy(sub, tmp + strlen(from));
|
|
+ } else
|
|
+ break;
|
|
+ }
|
|
+ if (strlen(new) > 0) {
|
|
+ strncpy(new, to, strlen(to));
|
|
+ sprintf(*dest + strlen(*dest) - strlen(new), new, strlen(new));
|
|
+ }
|
|
+}
|
|
+
|
|
int tree(void)
|
|
{
|
|
+ char *out = (char *)malloc(4096);
|
|
+ const char *begin = ".\n";
|
|
+ const char *middle = "├─";
|
|
+ const char *tail = "└─";
|
|
struct list_head head;
|
|
struct dev *devs, *tmp, *n, *m;
|
|
|
|
@@ -438,35 +464,26 @@ int tree(void)
|
|
fprintf(stderr, "Failed to list devices\n");
|
|
return ret;
|
|
}
|
|
- struct libscols_table *tb;
|
|
- struct libscols_line *dad, *son;
|
|
- enum { COL_CSET, COL_BNAME };
|
|
- setlocale(LC_ALL, "");
|
|
- tb = scols_new_table();
|
|
- scols_table_new_column(tb, ".", 0.1, SCOLS_FL_TREE);
|
|
- scols_table_new_column(tb, "", 2, SCOLS_FL_TRUNC);
|
|
+ sprintf(out, "%s", begin);
|
|
list_for_each_entry_safe(devs, n, &head, dev_list) {
|
|
if ((devs->version == BCACHE_SB_VERSION_CDEV
|
|
|| devs->version == BCACHE_SB_VERSION_CDEV_WITH_UUID)
|
|
&& strcmp(devs->state, BCACHE_BASIC_STATE_ACTIVE) == 0) {
|
|
- dad = scols_table_new_line(tb, NULL);
|
|
- scols_line_set_data(dad, COL_CSET, devs->name);
|
|
+ sprintf(out + strlen(out), "%s\n", devs->name);
|
|
list_for_each_entry_safe(tmp, m, &head, dev_list) {
|
|
if (strcmp(devs->cset, tmp->attachuuid) ==
|
|
0) {
|
|
- son =
|
|
- scols_table_new_line(tb, dad);
|
|
- scols_line_set_data(son, COL_CSET,
|
|
- tmp->name);
|
|
- scols_line_set_data(son, COL_BNAME,
|
|
- tmp->bname);
|
|
+ replace_line(&out, tail, middle);
|
|
+ sprintf(out + strlen(out), "%s%s %s\n",
|
|
+ tail, tmp->name, tmp->bname);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- scols_print_table(tb);
|
|
- scols_unref_table(tb);
|
|
+ if (strlen(out) > strlen(begin))
|
|
+ printf("%s", out);
|
|
free_dev(&head);
|
|
+ free(out);
|
|
return 0;
|
|
}
|
|
|
|
--
|
|
2.26.2
|
|
|