X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fsrc%2Fwrappers.h;h=a0b4e220eafd55a0f7bbe45473e9482ff968e7fd;hb=4fc0d7c31dd9fb6bae2e77ba37d8a08ab26dd65c;hp=62f9481fd3f4740ad32c89c80c0a6229d1d68ea0;hpb=1c8efa7e28be3b7c8dec5d9ed816f512f3a96fcf;p=util-vserver.git diff --git a/util-vserver/src/wrappers.h b/util-vserver/src/wrappers.h index 62f9481..a0b4e22 100644 --- a/util-vserver/src/wrappers.h +++ b/util-vserver/src/wrappers.h @@ -29,20 +29,23 @@ #include #include #include +#include #include #include #include #include +#include #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); } @@ -187,6 +190,98 @@ Eunlink(char const *pathname) 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