summaryrefslogtreecommitdiffstats
path: root/UsersTable.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--UsersTable.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/UsersTable.c b/UsersTable.c
new file mode 100644
index 0000000..6586a4b
--- /dev/null
+++ b/UsersTable.c
@@ -0,0 +1,46 @@
+/*
+htop - UsersTable.c
+(C) 2004-2011 Hisham H. Muhammad
+Released under the GNU GPLv2+, see the COPYING file
+in the source distribution for its full text.
+*/
+
+#include "config.h" // IWYU pragma: keep
+
+#include "UsersTable.h"
+
+#include <pwd.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "XUtils.h"
+
+
+UsersTable* UsersTable_new(void) {
+ UsersTable* this;
+ this = xMalloc(sizeof(UsersTable));
+ this->users = Hashtable_new(10, true);
+ return this;
+}
+
+void UsersTable_delete(UsersTable* this) {
+ Hashtable_delete(this->users);
+ free(this);
+}
+
+char* UsersTable_getRef(UsersTable* this, unsigned int uid) {
+ char* name = Hashtable_get(this->users, uid);
+ if (name == NULL) {
+ const struct passwd* userData = getpwuid(uid);
+ if (userData != NULL) {
+ name = xStrdup(userData->pw_name);
+ Hashtable_put(this->users, uid, name);
+ }
+ }
+ return name;
+}
+
+inline void UsersTable_foreach(UsersTable* this, Hashtable_PairFunction f, void* userData) {
+ Hashtable_foreach(this->users, f, userData);
+}