diff options
author | Daniel Lange <DLange@git.local> | 2016-04-11 13:00:15 +0200 |
---|---|---|
committer | Daniel Lange <DLange@git.local> | 2016-04-11 13:00:15 +0200 |
commit | d3c9975943df58e293359b87905d19ff1fd52061 (patch) | |
tree | e416378879f60e8d538b1b25963904f767d30ff4 /UsersTable.c | |
download | debian_htop-d3c9975943df58e293359b87905d19ff1fd52061.tar.gz debian_htop-d3c9975943df58e293359b87905d19ff1fd52061.tar.bz2 debian_htop-d3c9975943df58e293359b87905d19ff1fd52061.zip |
Imported Upstream version 0.5upstream/0.5
Diffstat (limited to 'UsersTable.c')
-rw-r--r-- | UsersTable.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/UsersTable.c b/UsersTable.c new file mode 100644 index 0000000..381a741 --- /dev/null +++ b/UsersTable.c @@ -0,0 +1,58 @@ +/* +htop +(C) 2004 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> + +/*{ +#ifndef SYSCONFDIR +#define SYSCONFDIR "/etc" +#endif +}*/ + +/*{ +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; +} + +int UsersTable_size(UsersTable* this) { + return (Hashtable_size(this->users)); +} |