summaryrefslogtreecommitdiffstats
path: root/solaris
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2020-12-17 20:09:55 -0300
committerBenBE <BenBE@geshi.org>2020-12-19 16:02:34 +0100
commit3d1703f16faf5bd3c73976909e1b6e03061a7f72 (patch)
tree45dbb3c0be0817b833b9d4a64376d9033b5ef2fe /solaris
parent52fa4e7ee4816209ad82ba92ece8a3dc5b25ddd0 (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 'solaris')
-rw-r--r--solaris/SolarisProcess.c21
-rw-r--r--solaris/SolarisProcess.h2
2 files changed, 8 insertions, 15 deletions
diff --git a/solaris/SolarisProcess.c b/solaris/SolarisProcess.c
index e69809c2..e6c49936 100644
--- a/solaris/SolarisProcess.c
+++ b/solaris/SolarisProcess.c
@@ -23,9 +23,10 @@ const ProcessClass SolarisProcess_class = {
.extends = Class(Process),
.display = Process_display,
.delete = Process_delete,
- .compare = SolarisProcess_compare
+ .compare = Process_compare
},
.writeField = SolarisProcess_writeField,
+ .compareByKey = SolarisProcess_compareByKey
};
ProcessFieldData Process_fields[] = {
@@ -117,19 +118,11 @@ void SolarisProcess_writeField(const Process* this, RichString* str, ProcessFiel
RichString_appendWide(str, attr, buffer);
}
-long SolarisProcess_compare(const void* v1, const void* v2) {
- const SolarisProcess *p1, *p2;
- const Settings* settings = ((const Process*)v1)->settings;
+long SolarisProcess_compareByKey(const void* v1, const void* v2, ProcessField key) {
+ const SolarisProcess* p1 = (const SolarisProcess*)v1;
+ const SolarisProcess* p2 = (const SolarisProcess*)v2;
- if (settings->direction == 1) {
- p1 = (const SolarisProcess*)v1;
- p2 = (const SolarisProcess*)v2;
- } else {
- p2 = (const SolarisProcess*)v1;
- p1 = (const SolarisProcess*)v2;
- }
-
- switch ((int) settings->sortKey) {
+ switch ((int) key) {
case ZONEID:
return SPACESHIP_NUMBER(p1->zoneid, p2->zoneid);
case PROJID:
@@ -149,7 +142,7 @@ long SolarisProcess_compare(const void* v1, const void* v2) {
case LWPID:
return SPACESHIP_NUMBER(p1->lwpid, p2->lwpid);
default:
- return Process_compare(v1, v2);
+ return SPACESHIP_NUMBER(v1->pid, v2->pid);
}
}
diff --git a/solaris/SolarisProcess.h b/solaris/SolarisProcess.h
index 4756634d..12e6c99f 100644
--- a/solaris/SolarisProcess.h
+++ b/solaris/SolarisProcess.h
@@ -56,7 +56,7 @@ void Process_delete(Object* cast);
void SolarisProcess_writeField(const Process* this, RichString* str, ProcessField field);
-long SolarisProcess_compare(const void* v1, const void* v2);
+long SolarisProcess_compareByKey(const Process* v1, const Process* v2, ProcessField field);
bool Process_isThread(const Process* this);

© 2014-2024 Faster IT GmbH | imprint | privacy policy