diff options
Diffstat (limited to '')
-rw-r--r-- | lib/xfuncs.c | 49 |
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; +} |