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.
This commit is contained in:
Nathan Scott
2021-07-12 16:51:19 +10:00
parent a476490282
commit bf853addc3
4 changed files with 38 additions and 28 deletions

View File

@ -48,16 +48,16 @@ static void DynamicMeter_compare(ht_key_t key, void* value, void* data) {
}
}
bool DynamicMeter_search(const ProcessList* pl, const char* name, unsigned int* key) {
bool DynamicMeter_search(Hashtable* dynamics, const char* name, unsigned int* key) {
DynamicIterator iter = { .key = 0, .name = name, .found = false };
if (pl->dynamicMeters)
Hashtable_foreach(pl->dynamicMeters, DynamicMeter_compare, &iter);
if (dynamics)
Hashtable_foreach(dynamics, DynamicMeter_compare, &iter);
*key = iter.key;
return iter.found;
}
const char* DynamicMeter_lookup(const ProcessList* pl, unsigned int key) {
const DynamicMeter* meter = Hashtable_get(pl->dynamicMeters, key);
const char* DynamicMeter_lookup(Hashtable* dynamics, unsigned int key) {
const DynamicMeter* meter = Hashtable_get(dynamics, key);
return meter ? meter->name : NULL;
}