Fixes to use platform-specific compare routines.

This commit is contained in:
Hisham Muhammad 2015-04-09 15:40:27 -03:00
parent dc4576d327
commit b291fba02b
5 changed files with 22 additions and 12 deletions

View File

@ -74,15 +74,15 @@ void ProcessList_goThroughEntries(ProcessList* pl);
}*/ }*/
ProcessList* ProcessList_init(ProcessList* this, UsersTable* usersTable, Hashtable* pidWhiteList, uid_t userId) { ProcessList* ProcessList_init(ProcessList* this, ObjectClass* klass, UsersTable* usersTable, Hashtable* pidWhiteList, uid_t userId) {
this->processes = Vector_new(Class(Process), true, DEFAULT_SIZE); this->processes = Vector_new(klass, true, DEFAULT_SIZE);
this->processTable = Hashtable_new(140, false); this->processTable = Hashtable_new(140, false);
this->usersTable = usersTable; this->usersTable = usersTable;
this->pidWhiteList = pidWhiteList; this->pidWhiteList = pidWhiteList;
this->userId = userId; this->userId = userId;
// tree-view auxiliary buffers // tree-view auxiliary buffer
this->processes2 = Vector_new(Class(Process), true, DEFAULT_SIZE); this->processes2 = Vector_new(klass, true, DEFAULT_SIZE);
// set later by platform-specific code // set later by platform-specific code
this->cpuCount = 0; this->cpuCount = 0;

View File

@ -67,7 +67,7 @@ void ProcessList_delete(ProcessList* pl);
void ProcessList_goThroughEntries(ProcessList* pl); void ProcessList_goThroughEntries(ProcessList* pl);
ProcessList* ProcessList_init(ProcessList* this, UsersTable* usersTable, Hashtable* pidWhiteList, uid_t userId); ProcessList* ProcessList_init(ProcessList* this, ObjectClass* klass, UsersTable* usersTable, Hashtable* pidWhiteList, uid_t userId);
void ProcessList_done(ProcessList* this); void ProcessList_done(ProcessList* this);

View File

@ -36,6 +36,16 @@ typedef struct FreeBSDProcess_ {
}*/ }*/
ProcessClass FreeBSDProcess_class = {
.super = {
.extends = Class(Process),
.display = Process_display,
.delete = Process_delete,
.compare = FreeBSDProcess_compare
},
.writeField = (Process_WriteField) FreeBSDProcess_writeField,
};
ProcessFieldData Process_fields[] = { ProcessFieldData Process_fields[] = {
[0] = { .name = "", .title = NULL, .description = NULL, .flags = 0, }, [0] = { .name = "", .title = NULL, .description = NULL, .flags = 0, },
[PID] = { .name = "PID", .title = " PID ", .description = "Process/thread ID", .flags = 0, }, [PID] = { .name = "PID", .title = " PID ", .description = "Process/thread ID", .flags = 0, },
@ -94,7 +104,7 @@ void Process_setupColumnWidths() {
FreeBSDProcess* FreeBSDProcess_new(Settings* settings) { FreeBSDProcess* FreeBSDProcess_new(Settings* settings) {
FreeBSDProcess* this = calloc(sizeof(FreeBSDProcess), 1); FreeBSDProcess* this = calloc(sizeof(FreeBSDProcess), 1);
Object_setClass(this, Class(Process)); Object_setClass(this, Class(FreeBSDProcess));
Process_init(&this->super, settings); Process_init(&this->super, settings);
return this; return this;
} }
@ -105,7 +115,7 @@ void Process_delete(Object* cast) {
free(this); free(this);
} }
void Process_writeField(Process* this, RichString* str, ProcessField field) { void FreeBSDProcess_writeField(Process* this, RichString* str, ProcessField field) {
//FreeBSDProcess* fp = (FreeBSDProcess*) this; //FreeBSDProcess* fp = (FreeBSDProcess*) this;
char buffer[256]; buffer[255] = '\0'; char buffer[256]; buffer[255] = '\0';
int attr = CRT_colors[DEFAULT_COLOR]; int attr = CRT_colors[DEFAULT_COLOR];
@ -113,13 +123,13 @@ void Process_writeField(Process* this, RichString* str, ProcessField field) {
switch (field) { switch (field) {
// add FreeBSD-specific fields here // add FreeBSD-specific fields here
default: default:
Process_writeDefaultField(this, str, field); Process_writeField(this, str, field);
return; return;
} }
RichString_append(str, attr, buffer); RichString_append(str, attr, buffer);
} }
long Process_compare(const void* v1, const void* v2) { long FreeBSDProcess_compare(const void* v1, const void* v2) {
FreeBSDProcess *p1, *p2; FreeBSDProcess *p1, *p2;
Settings *settings = ((Process*)v1)->settings; Settings *settings = ((Process*)v1)->settings;
if (settings->direction == 1) { if (settings->direction == 1) {
@ -132,7 +142,7 @@ long Process_compare(const void* v1, const void* v2) {
switch (settings->sortKey) { switch (settings->sortKey) {
// add FreeBSD-specific fields here // add FreeBSD-specific fields here
default: default:
return Process_defaultCompare(v1, v2); return Process_compare(v1, v2);
} }
} }

View File

@ -45,7 +45,7 @@ static int pageSizeKb;
ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList, uid_t userId) { ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList, uid_t userId) {
FreeBSDProcessList* fpl = calloc(1, sizeof(FreeBSDProcessList)); FreeBSDProcessList* fpl = calloc(1, sizeof(FreeBSDProcessList));
ProcessList* pl = (ProcessList*) fpl; ProcessList* pl = (ProcessList*) fpl;
ProcessList_init(pl, usersTable, pidWhiteList, userId); ProcessList_init(pl, Class(FreeBSDProcess), usersTable, pidWhiteList, userId);
int cpus = 1; int cpus = 1;
size_t sizeof_cpus = sizeof(cpus); size_t sizeof_cpus = sizeof(cpus);

View File

@ -83,7 +83,7 @@ typedef struct LinuxProcessList_ {
ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList, uid_t userId) { ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList, uid_t userId) {
LinuxProcessList* this = calloc(1, sizeof(LinuxProcessList)); LinuxProcessList* this = calloc(1, sizeof(LinuxProcessList));
ProcessList* pl = &(this->super); ProcessList* pl = &(this->super);
ProcessList_init(pl, usersTable, pidWhiteList, userId); ProcessList_init(pl, Class(LinuxProcess), usersTable, pidWhiteList, userId);
// Update CPU count: // Update CPU count:
FILE* file = fopen(PROCSTATFILE, "r"); FILE* file = fopen(PROCSTATFILE, "r");