diff options
author | Hisham Muhammad <hisham@gobolinux.org> | 2006-03-04 18:16:49 +0000 |
---|---|---|
committer | Hisham Muhammad <hisham@gobolinux.org> | 2006-03-04 18:16:49 +0000 |
commit | d6231bab89d634da5564491196b7c478db038505 (patch) | |
tree | bfc0bf00b138763eb41132fd27a8f389a78bf3a4 /UsersTable.c |
Initial import.
Diffstat (limited to 'UsersTable.c')
-rw-r--r-- | UsersTable.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/UsersTable.c b/UsersTable.c new file mode 100644 index 00000000..d3b84e9a --- /dev/null +++ b/UsersTable.c @@ -0,0 +1,56 @@ +/* +htop - UsersTable.c +(C) 2004,2005 Hisham H. Muhammad +Released under the GNU GPL, see the COPYING file +in the source distribution for its full text. +*/ + +#include "UsersTable.h" +#include "Hashtable.h" +#include "String.h" + +#include <stdio.h> +#include <strings.h> +#include <pwd.h> +#include <sys/types.h> + +#include "debug.h" +#include <assert.h> + +/*{ +typedef struct UsersTable_ { + Hashtable* users; +} UsersTable; +}*/ + +UsersTable* UsersTable_new() { + UsersTable* this; + this = malloc(sizeof(UsersTable)); + this->users = Hashtable_new(20, true); + return this; +} + +void UsersTable_delete(UsersTable* this) { + Hashtable_delete(this->users); + free(this); +} + +char* UsersTable_getRef(UsersTable* this, int uid) { + char* name = (char*) (Hashtable_get(this->users, uid)); + if (name == NULL) { + struct passwd* userData = getpwuid(uid); + if (userData != NULL) { + name = String_copy(userData->pw_name); + Hashtable_put(this->users, uid, name); + } + } + return name; +} + +inline int UsersTable_size(UsersTable* this) { + return (Hashtable_size(this->users)); +} + +inline void UsersTable_foreach(UsersTable* this, Hashtable_PairFunction f, void* userData) { + Hashtable_foreach(this->users, f, userData); +} |