#define _GNU_SOURCE #include #include #include #include enum frobork_kode { FK_RETURN, FK_EXECVE, FK_DUP2, FK_CLOSE, FK_FCHDIR, FK_SETUID, FK_SETGID, FK_SIGNAL, FK_SETSID, FK_SETPGID, FK_TCSETPGRP }; /* * frobork.c */ #define XX (*kode++) #define T(type) ((type)XX) #define X T(int) #define TRY2(x,y) if((x)==(y)) { goto on_error; } ; break; #define TRY(x) TRY2(x,-1) #define OBJLEN(x) (x),sizeof(x) #define GETX {x=X;} #if 0 /* support for any of the types we use being larger than an int */ #define MAXUINTP1 (1ULL+(unsigned long long)((unsigned int)-1)) #define SIZUI (sizeof(unsigned int)) #define SIZULL (sizeof(unsigned int)) unsigned long long read_and_increment_pointer (unsigned int**p, unsigned int size) { unsigned long long r; unsigned int *q = *p; unsigned int i = 0; unsigned long long factor = 1; if (size <= SIZUI) { r = *q; q++; } else if (size > SIZULL) { write(2,OBJLEN("frobork: bad int size\n")); exit(43); } else { r = 0; while (i