#include <errno.h>
#include <fcntl.h>
#include <sched.h>
+#include <grp.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/mount.h>
+#include <sys/ioctl.h>
#define WRAPPER_DECL UNUSED ALWAYSINLINE
static UNUSED void
FatalErrnoError(bool condition, char const msg[]) /*@*/
{
+ extern int wrapper_exit_code;
+
if (!condition) return;
perror(msg);
- extern int wrapper_exit_code;
exit(wrapper_exit_code);
}
FatalErrnoError(unlink(pathname)==-1, "unlink()");
}
+inline static WRAPPER_DECL void
+Egetrlimit(int resource, struct rlimit *rlim)
+{
+ FatalErrnoError(getrlimit(resource, rlim)==-1, "getrlimit()");
+}
+
+inline static WRAPPER_DECL void
+Esetrlimit(int resource, struct rlimit const *rlim)
+{
+ FatalErrnoError(setrlimit(resource, rlim)==-1, "setrlimit()");
+}
+
+inline static void
+Esetuid(uid_t uid)
+{
+ FatalErrnoError(setuid(uid)==-1, "setuid()");
+}
+
+inline static void
+Esetgid(gid_t gid)
+{
+ FatalErrnoError(setgid(gid)==-1, "setgid()");
+}
+
+inline static void
+Esetgroups(size_t size, const gid_t *list)
+{
+ FatalErrnoError(setgroups(size, list)==-1, "setgroups()");
+}
+
+inline static WRAPPER_DECL int
+Edup2(int oldfd, int newfd)
+{
+ register int res = dup2(oldfd, newfd);
+ FatalErrnoError(res==-1, "dup2()");
+
+ return res;
+}
+
+inline static WRAPPER_DECL void *
+Emalloc(size_t size)
+{
+ register void *res = malloc(size);
+ FatalErrnoError(res==0 && size!=0, "malloc()");
+ return res;
+}
+
+/*@unused@*/
+inline static WRAPPER_DECL /*@null@*//*@only@*/ void *
+Erealloc(/*@only@*//*@out@*//*@null@*/ void *ptr,
+ size_t new_size)
+ /*@ensures maxSet(result) == new_size@*/
+ /*@modifies *ptr@*/
+{
+ register void *res = realloc(ptr, new_size);
+ FatalErrnoError(res==0 && new_size!=0, "realloc()");
+
+ return res;
+}
+
+inline static WRAPPER_DECL off_t
+Elseek(int fildes, off_t offset, int whence)
+{
+ off_t res = lseek(fildes, offset, whence);
+ FatalErrnoError(res==(off_t)-1, "lseek()");
+ return res;
+}
+
+inline static WRAPPER_DECL int
+Emkstemp(char *template)
+{
+ int res = mkstemp(template);
+ FatalErrnoError(res==-1, "mkstemp()");
+ return res;
+}
+
+inline static WRAPPER_DECL void
+Eioctl(int fd, int request, void *p)
+{
+ int res = ioctl(fd, request, p);
+ FatalErrnoError(res<0, "ioctl()");
+}
+
+inline static WRAPPER_DECL pid_t
+Esetsid()
+{
+ register pid_t const res = setsid();
+ FatalErrnoError(res==-1, "setsid()");
+
+ return res;
+}
+
#undef WRAPPER_DECL
#endif // H_UTIL_VSERVER_SRC_WRAPPERS_H