diff options
author | Hisham Muhammad <hisham@gobolinux.org> | 2020-12-17 20:09:55 -0300 |
---|---|---|
committer | BenBE <BenBE@geshi.org> | 2020-12-19 16:02:34 +0100 |
commit | 3d1703f16faf5bd3c73976909e1b6e03061a7f72 (patch) | |
tree | 45dbb3c0be0817b833b9d4a64376d9033b5ef2fe /dragonflybsd | |
parent | 52fa4e7ee4816209ad82ba92ece8a3dc5b25ddd0 (diff) |
Invert Process_compare resolution so that superclass matches run first
* This removes duplicated code that adjusts the sort direction from every
OS-specific folder.
* Most fields in a regular htop screen are OS-independent, so trying
Process_compare first and only falling back to the OS-specific
compareByKey function if it's an OS-specific field makes sense.
* This will allow us to override the sortKey in a global way without having
to edit each OS-specific file.
Diffstat (limited to 'dragonflybsd')
-rw-r--r-- | dragonflybsd/DragonFlyBSDProcess.c | 21 | ||||
-rw-r--r-- | dragonflybsd/DragonFlyBSDProcess.h | 2 |
2 files changed, 8 insertions, 15 deletions
diff --git a/dragonflybsd/DragonFlyBSDProcess.c b/dragonflybsd/DragonFlyBSDProcess.c index 4ea66870..1f08530f 100644 --- a/dragonflybsd/DragonFlyBSDProcess.c +++ b/dragonflybsd/DragonFlyBSDProcess.c @@ -23,9 +23,10 @@ const ProcessClass DragonFlyBSDProcess_class = { .extends = Class(Process), .display = Process_display, .delete = Process_delete, - .compare = DragonFlyBSDProcess_compare + .compare = Process_compare }, .writeField = DragonFlyBSDProcess_writeField, + .compareByKey = DragonFlyBSDProcess_compareByKey }; ProcessFieldData Process_fields[] = { @@ -108,26 +109,18 @@ void DragonFlyBSDProcess_writeField(const Process* this, RichString* str, Proces RichString_appendWide(str, attr, buffer); } -long DragonFlyBSDProcess_compare(const void* v1, const void* v2) { - const DragonFlyBSDProcess *p1, *p2; - const Settings *settings = ((const Process*)v1)->settings; +long DragonFlyBSDProcess_compareByKey(const Process* v1, const Process* v2, ProcessField key) { + const DragonFlyBSDProcess* p1 = (const DragonFlyBSDProcess*)v1; + const DragonFlyBSDProcess* p2 = (const DragonFlyBSDProcess*)v2; - if (settings->direction == 1) { - p1 = (const DragonFlyBSDProcess*)v1; - p2 = (const DragonFlyBSDProcess*)v2; - } else { - p2 = (const DragonFlyBSDProcess*)v1; - p1 = (const DragonFlyBSDProcess*)v2; - } - - switch ((int) settings->sortKey) { + switch ((int) key) { // add Platform-specific fields here case JID: return SPACESHIP_NUMBER(p1->jid, p2->jid); case JAIL: return SPACESHIP_NULLSTR(p1->jname, p2->jname); default: - return Process_compare(v1, v2); + return SPACESHIP_NULLSTR(v1->pid, v2->pid); } } diff --git a/dragonflybsd/DragonFlyBSDProcess.h b/dragonflybsd/DragonFlyBSDProcess.h index 1befd946..0bb173ec 100644 --- a/dragonflybsd/DragonFlyBSDProcess.h +++ b/dragonflybsd/DragonFlyBSDProcess.h @@ -39,7 +39,7 @@ void Process_delete(Object* cast); void DragonFlyBSDProcess_writeField(const Process* this, RichString* str, ProcessField field); -long DragonFlyBSDProcess_compare(const void* v1, const void* v2); +long DragonFlyBSDProcess_compareByKey(const Process* v1, const Process* v2, ProcessField key); bool Process_isThread(const Process* this); |