From bf853addc3e4b855cc8fb09a6558733d12548fbe Mon Sep 17 00:00:00 2001 From: Nathan Scott Date: Mon, 12 Jul 2021 16:51:19 +1000 Subject: Ensure PCP dynamic metric configuration definition uniqueness It can happen that pcp-htop is presented multiple definitions of the same dynamic meter, e.g. if /etc/pcp/htop/meters has a definition matching one in ~/.config/htop/meters - instead of exiting with a duplicate metric error provide more meaningful diagnostics (on close) and also just skip over such entries. System files override home directories which overrides those found below the current working directory. Also fix the derived metric error diagnostic; because this is using CRT_fatalError, which is like perror(3), we must give a meaningful prefix (like program name) at the string end. --- Header.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'Header.c') diff --git a/Header.c b/Header.c index 3b576a73..8903fc33 100644 --- a/Header.c +++ b/Header.c @@ -75,7 +75,7 @@ void Header_writeBackToSettings(const Header* this) { const Meter* meter = (Meter*) Vector_get(vec, i); char* name; if (meter->param && As_Meter(meter) == &DynamicMeter_class) { - const char* dynamic = DynamicMeter_lookup(this->pl, meter->param); + const char* dynamic = DynamicMeter_lookup(this->pl->dynamicMeters, meter->param); xAsprintf(&name, "%s(%s)", As_Meter(meter)->name, dynamic); } else if (meter->param && As_Meter(meter) == &CPUMeter_class) { xAsprintf(&name, "%s(%u)", As_Meter(meter)->name, meter->param); @@ -101,7 +101,7 @@ bool Header_addMeterByName(Header* this, const char* name, int column) { if ((end = strrchr(dynamic, ')')) == NULL) return false; // indicate htoprc parse failure *end = '\0'; - if (!DynamicMeter_search(this->pl, dynamic, ¶m)) + if (!DynamicMeter_search(this->pl->dynamicMeters, dynamic, ¶m)) return false; // indicates name lookup failure } } -- cgit v1.2.3