summaryrefslogtreecommitdiff
path: root/lib/xfuncs.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--lib/xfuncs.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/xfuncs.c b/lib/xfuncs.c
new file mode 100644
index 0000000..43242de
--- /dev/null
+++ b/lib/xfuncs.c
@@ -0,0 +1,49 @@
+#include "lslib.h"
+
+#include <pwd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+void* xalloc(size_t size) {
+ void *ptr = malloc(size);
+ if (ptr == NULL && size != 0) die();
+ return ptr;
+}
+
+void* xrealloc(void* ptr, size_t size) {
+ ptr = realloc(ptr, size);
+ if (ptr == NULL && size != 0) die();
+ return ptr;
+}
+
+void* xzalloc(size_t size) {
+ void* ptr = xalloc(size);
+ memset(ptr, 0, size);
+ return ptr;
+}
+
+void xsetenv(const char *name, const char *value) {
+ if (setenv(name, value, 1))
+ error("cannot set env");
+}
+
+void xsetuid(uid_t uid) {
+ if (setuid(uid))
+ error("cannot set uid");
+}
+
+void xsetgid(gid_t gid) {
+ if (setgid(gid))
+ error("cannot set gid");
+}
+
+struct passwd* xgetpwnam(char* name) {
+ struct passwd* pw;
+ pw = getpwnam(name);
+
+ if (!pw)
+ error("cannot get user: '%s'", name);
+
+ return pw;
+}