180 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
| #include <stdio.h>
 | |
| #include <sys/event.h>
 | |
| 
 | |
| #if defined(__FreeBSD__)
 | |
| 	#define BSD
 | |
| 	#define FREEBSD
 | |
| 	#define UNIX
 | |
| #endif
 | |
| 
 | |
| #if defined(__NetBSD__)
 | |
| 	#define BSD
 | |
| 	#define NETBSD
 | |
| 	#define UNIX
 | |
| #endif
 | |
| 
 | |
| #if defined(__OpenBSD__)
 | |
| 	#define BSD
 | |
| 	#define OPENBSD
 | |
| 	#define UNIX
 | |
| #endif
 | |
| 
 | |
| #if defined(__APPLE__)
 | |
| 	#define BSD
 | |
| 	#define MACOSX
 | |
| 	#define UNIX
 | |
| #endif
 | |
| 
 | |
| #if defined(linux)
 | |
| 	#define LINUX
 | |
| 	#define UNIX
 | |
| #endif
 | |
| 
 | |
| #if defined(__amd64__) || defined(__x86_64__)
 | |
| 	#define BIT64
 | |
| #else
 | |
| 	#define BIT32
 | |
| #endif
 | |
| 
 | |
| #if defined(UNIX)
 | |
| 	#include <sys/types.h>
 | |
| 	#include <sys/stat.h>
 | |
| 	#include <sys/socket.h>
 | |
| 	#include <sys/errno.h>
 | |
|     #include <sys/mman.h>
 | |
|     #include <sys/syslimits.h>
 | |
| 	#include <fcntl.h>
 | |
| 	#include <unistd.h>
 | |
| #endif
 | |
| 
 | |
| #define BL printf(" ");
 | |
| #define QUOT printf("\"");
 | |
| #define NL printf("\n");
 | |
| #define LB printf("{"); BL
 | |
| #define RB BL printf("}");
 | |
| #define SEMI printf(";");
 | |
| #define grovel(t) printf("TYPEDEF: "); printf("%d", sizeof(t)); BL printf(#t); NL
 | |
| #define grovel2impl(t,n) BL BL BL BL LB QUOT printf(#t); QUOT BL QUOT printf((n)); QUOT RB
 | |
| #define grovel2(t,n) grovel2impl(t,n) NL
 | |
| #define grovel2end(t,n) grovel2impl(t,n) BL SEMI NL
 | |
| #define header(os) printf("vvv %s vvv", (os)); NL
 | |
| #define footer(os) printf("^^^ %s ^^^", (os)); NL
 | |
| #define header2(os,struct) printf("vvv %s %s vvv", (os), (struct)); NL
 | |
| #define footer2(os,struct) printf("^^^ %s %s ^^^", (os), (struct)); NL
 | |
| #define struct(n) printf("C-STRUCT: %s\n", (n));
 | |
| #define constant(n) printf("#define "); printf(#n); printf(" %d (HEX: %04x)", (n), (n)); NL
 | |
| 
 | |
| void openbsd_types()
 | |
| {
 | |
| 	header2("openbsd", "types");
 | |
| 	grovel(dev_t);
 | |
| 	grovel(gid_t);
 | |
| 	grovel(ino_t);
 | |
| 	grovel(int32_t);
 | |
| 	grovel(int64_t);
 | |
| 	grovel(mode_t);
 | |
| 	grovel(nlink_t);
 | |
| 	grovel(off_t);
 | |
| 	grovel(struct timespec);
 | |
| 	grovel(uid_t);
 | |
| 	footer2("openbsd", "types");
 | |
| }
 | |
| 
 | |
| void openbsd_stat()
 | |
| {
 | |
| 	header2("openbsd", "stat");
 | |
| 	struct("stat");
 | |
| 	grovel2(dev_t, "st_dev");
 | |
| 	grovel2(ino_t, "st_ino");
 | |
| 	grovel2(mode_t, "st_mode");
 | |
| 	grovel2(nlink_t, "st_nlink");
 | |
| 	grovel2(uid_t, "st_uid");
 | |
| 	grovel2(gid_t, "st_gid");
 | |
| 	grovel2(dev_t, "st_rdev");
 | |
| 	grovel2(int32_t, "st_lspare0");
 | |
| 	grovel2(struct timespec, "st_atim");
 | |
| 	grovel2(struct timespec, "st_mtim");
 | |
| 	grovel2(struct timespec, "st_ctim");
 | |
| 	grovel2(off_t, "st_size");
 | |
| 	grovel2(int64_t, "st_blocks");
 | |
| 	grovel2(u_int32_t, "st_blksize");
 | |
| 	grovel2(u_int32_t, "st_flags");
 | |
| 	grovel2(u_int32_t, "st_gen");
 | |
| 	grovel2(int32_t, "st_lspare1");
 | |
| 	grovel2(struct timespec, "st_birthtimespec");
 | |
| 	grovel2(int64_t, "st_qspare1");
 | |
| 	grovel2end(int64_t, "st_qspare2");
 | |
| 	footer2("openbsd", "stat");
 | |
| }
 | |
| 
 | |
| void unix_types()
 | |
| {
 | |
| 	grovel(dev_t);
 | |
| 	grovel(gid_t);
 | |
| 	grovel(ino_t);
 | |
| 	grovel(int32_t);
 | |
| 	grovel(int64_t);
 | |
| 	grovel(mode_t);
 | |
| 	grovel(nlink_t);
 | |
| 	grovel(off_t);
 | |
| 	grovel(struct timespec);
 | |
| 	grovel(struct stat);
 | |
| 	grovel(time_t);
 | |
| 	grovel(uid_t);
 | |
| }
 | |
| 
 | |
| void unix_constants()
 | |
| {
 | |
| 	constant(O_RDONLY);
 | |
| 	constant(O_WRONLY);
 | |
| 	constant(O_RDWR);
 | |
| 	constant(O_APPEND);
 | |
| 	constant(O_CREAT);
 | |
| 	constant(O_TRUNC);
 | |
| 	constant(O_EXCL);
 | |
| 	constant(FD_SETSIZE);
 | |
| 	constant(SOL_SOCKET);
 | |
| 	constant(SO_REUSEADDR);
 | |
| 	constant(SO_OOBINLINE);
 | |
| 	constant(SO_SNDTIMEO);
 | |
| 	constant(SO_RCVTIMEO);
 | |
| 	constant(F_SETFL);
 | |
| 	constant(O_NONBLOCK);
 | |
| 	constant(EINTR);
 | |
| 	constant(EAGAIN);
 | |
| 	constant(EINPROGRESS);
 | |
|     	constant(PROT_READ);
 | |
| 	constant(PROT_WRITE);
 | |
| 	constant(MAP_FILE);
 | |
| 	constant(MAP_SHARED);
 | |
| 	constant(PATH_MAX);
 | |
| 	grovel(pid_t);
 | |
| 
 | |
| }
 | |
| 	
 | |
| int main() {
 | |
| #ifdef FREEBSD
 | |
| 	grovel(blkcnt_t);
 | |
| 	grovel(blksize_t);
 | |
| 	grovel(fflags_t);
 | |
| #endif
 | |
| 
 | |
| #ifdef OPENBSD
 | |
| 	openbsd_stat();
 | |
| 	openbsd_types();
 | |
| #endif
 | |
| 	grovel(blkcnt_t);
 | |
|         grovel(blksize_t);
 | |
|         //grovel(fflags_t);
 | |
|         grovel(ssize_t);
 | |
| 
 | |
| 	grovel(size_t);
 | |
| 	grovel(struct kevent);
 | |
| #ifdef UNIX
 | |
| 	unix_types();
 | |
| 	unix_constants();
 | |
| #endif
 | |
| 
 | |
| 	return 0;
 | |
| }
 |