diff --git a/CHANGES b/CHANGES index a68fa3b..7b888f4 100644 --- a/CHANGES +++ b/CHANGES @@ -101,6 +101,9 @@ Features: Procan uses getresuid() and getresgid() when available, to determine the saved set-user-ID. + Procan prints more C-defines, esp.O_*, AI_*, EAI_*; __GLIBC__; + added option -V + Building: Disabling certain features during configure could break build process. diff --git a/procan-cdefs.c b/procan-cdefs.c index d9587f8..ae98a09 100644 --- a/procan-cdefs.c +++ b/procan-cdefs.c @@ -15,30 +15,91 @@ #include "procan.h" int procan_cdefs(FILE *outfile) { - /* basic C/system constants */ + /* System constants */ +#ifdef __KERNEL__ + fprintf(outfile, "__KERNEL__ = \"%s\"\n", __KERNEL__); +#endif +#ifdef __GLIBC__ + fprintf(outfile, "__GLIBC__ = %d\n", __GLIBC__); +#endif + /* Basic C/system constants */ #ifdef FD_SETSIZE - fprintf(outfile, "#define FD_SETSIZE %u\n", FD_SETSIZE); + fprintf(outfile, "#define FD_SETSIZE %u\n", FD_SETSIZE); #endif #ifdef NFDBITS - fprintf(outfile, "#define NFDBITS %d\n", (int)NFDBITS); + fprintf(outfile, "#define NFDBITS %d\n", (int)NFDBITS); #endif #ifdef O_RDONLY - fprintf(outfile, "#define O_RDONLY %u\n", O_RDONLY); + fprintf(outfile, "#define O_RDONLY %u\n", O_RDONLY); #endif #ifdef O_WRONLY - fprintf(outfile, "#define O_WRONLY %u\n", O_WRONLY); + fprintf(outfile, "#define O_WRONLY %u\n", O_WRONLY); #endif #ifdef O_RDWR - fprintf(outfile, "#define O_RDWR %u\n", O_RDWR); + fprintf(outfile, "#define O_RDWR %u\n", O_RDWR); +#endif +#ifdef O_CREAT + fprintf(outfile, "#define O_CREAT 0x%06x\n", O_CREAT); +#endif +#ifdef O_EXCL + fprintf(outfile, "#define O_EXCL 0x%06x\n", O_EXCL); +#endif +#ifdef O_NOCTTY + fprintf(outfile, "#define O_NOCTTY 0x%06x\n", O_NOCTTY); +#endif +#ifdef O_TRUNC + fprintf(outfile, "#define O_TRUNC 0x%06x\n", O_TRUNC); +#endif +#ifdef O_APPEND + fprintf(outfile, "#define O_APPEND 0x%06x\n", O_APPEND); +#endif +#ifdef O_NONBLOCK + fprintf(outfile, "#define O_NONBLOCK 0x%06x\n", O_NONBLOCK); +#endif +#ifdef O_NDELAY + fprintf(outfile, "#define O_NDELAY 0x%06x\n", O_NDELAY); +#endif +#ifdef O_SYNC + fprintf(outfile, "#define O_SYNC 0x%06x\n", O_SYNC); +#endif +#ifdef O_FSYNC + fprintf(outfile, "#define O_FSYNC 0x%06x\n", O_FSYNC); +#endif +#ifdef O_LARGEFILE + fprintf(outfile, "#define O_LARGEFILE 0x%06x\n", O_LARGEFILE); +#endif +#ifdef O_DIRECTORY + fprintf(outfile, "#define O_DIRECTORY 0x%06x\n", O_DIRECTORY); +#endif +#ifdef O_NOFOLLOW + fprintf(outfile, "#define O_NOFOLLOW 0x%06x\n", O_NOFOLLOW); +#endif +#ifdef O_CLOEXEC + fprintf(outfile, "#define O_CLOEXEC 0x%06x\n", O_CLOEXEC); +#endif +#ifdef O_DIRECT + fprintf(outfile, "#define O_DIRECT 0x%06x\n", O_DIRECT); +#endif +#ifdef O_NOATIME + fprintf(outfile, "#define O_NOATIME 0x%06x\n", O_NOATIME); +#endif +#ifdef O_PATH + fprintf(outfile, "#define O_PATH 0x%06x\n", O_PATH); +#endif +#ifdef O_DSYNC + fprintf(outfile, "#define O_DSYNC 0x%06x\n", O_SYNC); +#endif +#ifdef O_TMPFILE + fprintf(outfile, "#define O_TMPFILE 0x%06x\n", O_TMPFILE); #endif #ifdef SHUT_RD - fprintf(outfile, "#define SHUT_RD %u\n", SHUT_RD); + fprintf(outfile, "#define SHUT_RD %u\n", SHUT_RD); #endif #ifdef SHUT_WR - fprintf(outfile, "#define SHUT_WR %u\n", SHUT_WR); + fprintf(outfile, "#define SHUT_WR %u\n", SHUT_WR); #endif #ifdef SHUT_RDWR - fprintf(outfile, "#define SHUT_RDWR %u\n", SHUT_RDWR); + fprintf(outfile, "#define SHUT_RDWR %u\n", SHUT_RDWR); #endif /* Compile time controls */ @@ -188,5 +249,78 @@ int procan_cdefs(FILE *outfile) { #ifdef TCP_MAXSEG fprintf(outfile, "#define TCP_MAXSEG %d\n", TCP_MAXSEG); #endif +#ifdef AI_PASSIVE + fprintf(outfile, "#define AI_PASSIVE 0x%02x\n", AI_PASSIVE); +#endif +#ifdef AI_CANONNAME + fprintf(outfile, "#define AI_CANONNAME 0x%02x\n", AI_CANONNAME); +#endif +#ifdef AI_NUMERICHOST + fprintf(outfile, "#define AI_NUMERICHOST 0x%02x\n", AI_NUMERICHOST); +#endif +#ifdef AI_V4MAPPED + fprintf(outfile, "#define AI_V4MAPPED 0x%02x\n", AI_V4MAPPED); +#endif +#ifdef AI_ALL + fprintf(outfile, "#define AI_ALL 0x%02x\n", AI_ALL); +#endif +#ifdef AI_ADDRCONFIG + fprintf(outfile, "#define AI_ADDRCONFIG 0x%02x\n", AI_ADDRCONFIG); +#endif +#ifdef EAI_BADFLAGS + fprintf(outfile, "#define EAI_BADFLAGS %d\n", EAI_BADFLAGS); +#endif +#ifdef EAI_NONAME + fprintf(outfile, "#define EAI_NONAME %d\n", EAI_NONAME); +#endif +#ifdef EAI_AGAIN + fprintf(outfile, "#define EAI_AGAIN %d\n", EAI_AGAIN); +#endif +#ifdef EAI_FAIL + fprintf(outfile, "#define EAI_FAIL %d\n", EAI_FAIL); +#endif +#ifdef EAI_FAMILY + fprintf(outfile, "#define EAI_FAMILY %d\n", EAI_FAMILY); +#endif +#ifdef EAI_SOCKTYPE + fprintf(outfile, "#define EAI_SOCKTYPE %d\n", EAI_SOCKTYPE); +#endif +#ifdef EAI_SERVICE + fprintf(outfile, "#define EAI_SERVICE %d\n", EAI_SERVICE); +#endif +#ifdef EAI_MEMORY + fprintf(outfile, "#define EAI_MEMORY %d\n", EAI_MEMORY); +#endif +#ifdef EAI_SYSTEM + fprintf(outfile, "#define EAI_SYSTEM %d\n", EAI_SYSTEM); +#endif +#ifdef EAI_OVERFLOW + fprintf(outfile, "#define EAI_OVERFLOW %d\n", EAI_OVERFLOW); +#endif +#ifdef EAI_NODATA + fprintf(outfile, "#define EAI_NODATA %d\n", EAI_NODATA); +#endif +#ifdef EAI_ADDRFAMILY + fprintf(outfile, "#define EAI_ADDRFAMILY %d\n", EAI_ADDRFAMILY); +#endif +#ifdef EAI_INPROGRESS + fprintf(outfile, "#define EAI_INPROGRESS %d\n", EAI_INPROGRESS); +#endif +#ifdef EAI_CANCELED + fprintf(outfile, "#define EAI_CANCELED %d\n", EAI_CANCELED); +#endif +#ifdef EAI_NOTCANCELED + fprintf(outfile, "#define EAI_NOTCANCELED %d\n", EAI_NOTCANCELED); +#endif +#ifdef EAI_ALLDONE + fprintf(outfile, "#define EAI_ALLDONE %d\n", EAI_ALLDONE); +#endif +#ifdef EAI_INTR + fprintf(outfile, "#define EAI_INTR %d\n", EAI_INTR); +#endif +#ifdef EAI_IDN_ENCODE + fprintf(outfile, "#define EAI_IDN_ENCODE %d\n", EAI_IDN_ENCODE); +#endif + return 0; } diff --git a/procan_main.c b/procan_main.c index 7f70402..18b33de 100644 --- a/procan_main.c +++ b/procan_main.c @@ -13,6 +13,9 @@ const char copyright[] = "procan by Gerhard Rieger and contributors - send bug r #if HAVE_SYS_SELECT_H #include <sys/select.h> /* select(), fdset on FreeBSD */ #endif +#if HAVE_SYS_UTSNAME_H +#include <sys/utsname.h> /* uname(), struct utsname */ +#endif #include "mytypes.h" #include "error.h" #include "procan.h" @@ -22,6 +25,13 @@ const char copyright[] = "procan by Gerhard Rieger and contributors - send bug r #define WITH_HELP 1 static void procan_usage(FILE *fd); +static void procan_version(FILE *fd); + +const char copyright_procan[] = "procan by Gerhard Rieger and contributors - see www.dest-unreach.org"; +static const char procanversion[] = +#include "./VERSION" + ; +static const char timestamp[] = BUILD_DATE; int main(int argc, const char *argv[]) { @@ -39,8 +49,8 @@ int main(int argc, const char *argv[]) { case '?': case 'h': procan_usage(stdout); exit(0); #endif /* WITH_HELP */ case 'c': procan_cdefs(stdout); exit(0); -#if LATER case 'V': procan_version(stdout); exit(0); +#if LATER case 'l': diag_set(arg1[0][2], &arg1[0][3]); break; case 'd': diag_set('d', NULL); break; #endif @@ -80,9 +90,7 @@ static void procan_usage(FILE *fd) { fputs("Usage:\n", fd); fputs("procan [options]\n", fd); fputs(" options:\n", fd); -#if LATER fputs(" -V print version information to stdout, and exit\n", fd); -#endif #if WITH_HELP fputs(" -?|-h print a help text describing command line options\n", fd); #endif @@ -100,3 +108,17 @@ static void procan_usage(FILE *fd) { #endif } #endif /* WITH_HELP */ + + +void procan_version( + FILE *fd) +{ + struct utsname ubuf; + + fputs(copyright_procan, fd); fputc('\n', fd); + fprintf(fd, "procan version %s on %s\n", procanversion, timestamp); + uname(&ubuf); + fprintf(fd, " running on %s version %s, release %s, machine %s\n", + ubuf.sysname, ubuf.version, ubuf.release, ubuf.machine); + return; +}