/** * musl-alltypes: display for each of the types and structures from /include/bits/alltypes.h the following information: * --name * --size * --signed/unsigned * * this tool was created by Zvi Gilboa; * copyright (and left) deferred. * **/ #include "musl-alltypes.h" #include #include #include #define ISSIGNED(ntype) (((ntype)-1) < 0) ? "signed" : "unsigned" #define ISSIGNED_MEMBER(member) (member=-1 < 0) ? "signed" : "unsigned" #define DUMMY_STRUCT_SIZE "", sizeof(dummy), "" #define SIZE_AND_SIGNED(ntype) "", sizeof(ntype), ISSIGNED(ntype) #define MEMBER_SIZE_AND_SIGNED(member) sizeof(dummy.member), ISSIGNED_MEMBER(dummy.member) #define PTR_MEMBER_SIZE_AND_SIGNED(member) sizeof(dummy.member), ISSIGNED(dummy.member) void print_header(void) { printf("%24s%-12s\t%8s\t%12s\n","name","","size","signed"); printf("%24s%-12s\t%8s\t%12s\n","====","","====","======"); } void print_typedef_meta(const char * sz_name, const char * sz_member, size_t size, const char * sz_signed) { printf("%24s%-12s\t%8ld\t%12s\n",sz_name,sz_member,size,sz_signed); } void print_alltypes_meta(void) { print_typedef_meta("wchar_t", SIZE_AND_SIGNED(wchar_t)); #ifdef __NT__ print_typedef_meta("wchar_16t", SIZE_AND_SIGNED(wchar_16t)); print_typedef_meta("wchar_32t", SIZE_AND_SIGNED(wchar_32t)); #endif printf("\n"); print_typedef_meta("size_t", SIZE_AND_SIGNED(size_t)); print_typedef_meta("ssize_t", SIZE_AND_SIGNED(ssize_t)); print_typedef_meta("ptrdiff_t", SIZE_AND_SIGNED(ptrdiff_t)); printf("\n"); print_typedef_meta("wint_t", SIZE_AND_SIGNED(wint_t)); print_typedef_meta("wctrans_t", SIZE_AND_SIGNED(wctrans_t)); print_typedef_meta("wctype_t", SIZE_AND_SIGNED(wctype_t)); printf("\n"); print_typedef_meta("int8_t", SIZE_AND_SIGNED(int8_t)); print_typedef_meta("int16_t", SIZE_AND_SIGNED(int16_t)); print_typedef_meta("int32_t", SIZE_AND_SIGNED(int32_t)); print_typedef_meta("int64_t", SIZE_AND_SIGNED(int64_t)); printf("\n"); print_typedef_meta("uint8_t", SIZE_AND_SIGNED(uint8_t)); print_typedef_meta("uint16_t", SIZE_AND_SIGNED(uint16_t)); print_typedef_meta("uint32_t", SIZE_AND_SIGNED(uint32_t)); print_typedef_meta("uint64_t", SIZE_AND_SIGNED(uint64_t)); printf("\n"); print_typedef_meta("__uint16_t", SIZE_AND_SIGNED(__uint16_t)); print_typedef_meta("__uint32_t", SIZE_AND_SIGNED(__uint32_t)); print_typedef_meta("__uint64_t", SIZE_AND_SIGNED(__uint64_t)); printf("\n"); print_typedef_meta("int_fast8_t", SIZE_AND_SIGNED(int_fast8_t)); print_typedef_meta("int_fast16_t", SIZE_AND_SIGNED(int_fast16_t)); print_typedef_meta("int_fast32_t", SIZE_AND_SIGNED(int_fast32_t)); print_typedef_meta("int_fast64_t", SIZE_AND_SIGNED(int_fast64_t)); printf("\n"); print_typedef_meta("uint_fast8_t", SIZE_AND_SIGNED(uint_fast8_t)); print_typedef_meta("uint_fast16_t", SIZE_AND_SIGNED(uint_fast16_t)); print_typedef_meta("uint_fast32_t", SIZE_AND_SIGNED(uint_fast32_t)); print_typedef_meta("uint_fast64_t", SIZE_AND_SIGNED(uint_fast64_t)); printf("\n"); print_typedef_meta("intptr_t", SIZE_AND_SIGNED(intptr_t)); print_typedef_meta("uintptr_t", SIZE_AND_SIGNED(uintptr_t)); printf("\n"); print_typedef_meta("intmax_t", SIZE_AND_SIGNED(intmax_t)); print_typedef_meta("uintmax_t", SIZE_AND_SIGNED(uintmax_t)); printf("\n"); print_typedef_meta("float_t", SIZE_AND_SIGNED(float_t)); print_typedef_meta("double_t", SIZE_AND_SIGNED(double_t)); printf("\n"); print_typedef_meta("time_t", SIZE_AND_SIGNED(time_t)); print_typedef_meta("useconds_t", SIZE_AND_SIGNED(useconds_t)); print_typedef_meta("suseconds_t", SIZE_AND_SIGNED(suseconds_t)); printf("\n"); { va_list dummy; print_typedef_meta("va_list", DUMMY_STRUCT_SIZE); printf("\n"); } { struct timeval dummy; print_typedef_meta("timeval", DUMMY_STRUCT_SIZE); print_typedef_meta("timeval", ".tv_sec", MEMBER_SIZE_AND_SIGNED(tv_sec)); print_typedef_meta("timeval", ".tv_usec", MEMBER_SIZE_AND_SIGNED(tv_usec)); printf("\n"); } { struct timespec dummy; print_typedef_meta("timespec", DUMMY_STRUCT_SIZE); print_typedef_meta("timespec", ".tv_sec", MEMBER_SIZE_AND_SIGNED(tv_sec)); print_typedef_meta("timespec", ".tv_nsec", MEMBER_SIZE_AND_SIGNED(tv_nsec)); printf("\n"); } print_typedef_meta("pid_t", SIZE_AND_SIGNED(pid_t)); print_typedef_meta("id_t", SIZE_AND_SIGNED(id_t)); print_typedef_meta("uid_t", SIZE_AND_SIGNED(uid_t)); print_typedef_meta("gid_t", SIZE_AND_SIGNED(gid_t)); print_typedef_meta("key_t", SIZE_AND_SIGNED(key_t)); printf("\n"); { pthread_t dummy; print_typedef_meta("pthread_t", DUMMY_STRUCT_SIZE); printf("\n"); } print_typedef_meta("pthread_once_t", SIZE_AND_SIGNED(pthread_once_t)); print_typedef_meta("pthread_key_t", SIZE_AND_SIGNED(pthread_key_t)); print_typedef_meta("pthread_spinlock_t", SIZE_AND_SIGNED(pthread_spinlock_t)); printf("\n"); { pthread_attr_t dummy; print_typedef_meta("pthread_attr_t", DUMMY_STRUCT_SIZE); print_typedef_meta("pthread_attr_t", ".__u.__i[0]", MEMBER_SIZE_AND_SIGNED(__u.__i[0])); print_typedef_meta("pthread_attr_t", ".__u.__s[0]", MEMBER_SIZE_AND_SIGNED(__u.__s[0])); printf("\n"); } print_typedef_meta("pthread_mutexattr_t", SIZE_AND_SIGNED(pthread_mutexattr_t)); print_typedef_meta("pthread_condattr_t", SIZE_AND_SIGNED(pthread_condattr_t)); print_typedef_meta("pthread_barrierattr_t", SIZE_AND_SIGNED(pthread_barrierattr_t)); printf("\n"); { pthread_rwlockattr_t dummy; print_typedef_meta("pthread_rwlockattr_t", DUMMY_STRUCT_SIZE); print_typedef_meta("pthread_rwlockattr_t", ".__attr[0]", MEMBER_SIZE_AND_SIGNED(__attr[0])); printf("\n"); } { pthread_mutex_t dummy; print_typedef_meta("pthread_mutex_t", DUMMY_STRUCT_SIZE); print_typedef_meta("pthread_mutex_t", ".__u.__i[0]", MEMBER_SIZE_AND_SIGNED(__u.__i[0])); print_typedef_meta("pthread_mutex_t", ".__u.__p[0]", PTR_MEMBER_SIZE_AND_SIGNED(__u.__p[0])); printf("\n"); } { pthread_cond_t dummy; print_typedef_meta("pthread_cond_t", DUMMY_STRUCT_SIZE); print_typedef_meta("pthread_cond_t", ".__u.__i[0]", MEMBER_SIZE_AND_SIGNED(__u.__i[0])); print_typedef_meta("pthread_cond_t", ".__u.__p[0]", PTR_MEMBER_SIZE_AND_SIGNED(__u.__p[0])); printf("\n"); } { pthread_barrier_t dummy; print_typedef_meta("pthread_barrier_t", DUMMY_STRUCT_SIZE); print_typedef_meta("pthread_barrier_t", ".__u.__i[0]", MEMBER_SIZE_AND_SIGNED(__u.__i[0])); print_typedef_meta("pthread_barrier_t", ".__u.__p[0]", PTR_MEMBER_SIZE_AND_SIGNED(__u.__p[0])); printf("\n"); } { pthread_rwlock_t dummy; print_typedef_meta("pthread_rwlock_t", DUMMY_STRUCT_SIZE); print_typedef_meta("pthread_rwlock_t", ".__u.__i[0]", MEMBER_SIZE_AND_SIGNED(__u.__i[0])); print_typedef_meta("pthread_rwlock_t", ".__u.__p[0]", PTR_MEMBER_SIZE_AND_SIGNED(__u.__p[0])); printf("\n"); } print_typedef_meta("off_t", SIZE_AND_SIGNED(off_t)); print_typedef_meta("mode_t", SIZE_AND_SIGNED(mode_t)); print_typedef_meta("nlink_t", SIZE_AND_SIGNED(nlink_t)); print_typedef_meta("ino_t", SIZE_AND_SIGNED(ino_t)); print_typedef_meta("dev_t", SIZE_AND_SIGNED(dev_t)); print_typedef_meta("blksize_t", SIZE_AND_SIGNED(blksize_t)); print_typedef_meta("blkcnt_t", SIZE_AND_SIGNED(blkcnt_t)); print_typedef_meta("fsblkcnt_t", SIZE_AND_SIGNED(fsblkcnt_t)); print_typedef_meta("fsfilcnt_t", SIZE_AND_SIGNED(fsfilcnt_t)); printf("\n"); print_typedef_meta("timer_t", SIZE_AND_SIGNED(timer_t)); print_typedef_meta("clockid_t", SIZE_AND_SIGNED(clockid_t)); print_typedef_meta("clock_t", SIZE_AND_SIGNED(clock_t)); printf("\n"); { sigset_t dummy; print_typedef_meta("sigset_t", DUMMY_STRUCT_SIZE); print_typedef_meta("sigset_t", ".__bits:", 128/sizeof(long), "array-size"); print_typedef_meta("sigset_t", ".__bits[0]", MEMBER_SIZE_AND_SIGNED(__bits[0])); printf("\n"); } { siginfo_t dummy; print_typedef_meta("siginfo_t", DUMMY_STRUCT_SIZE); printf("\n"); } print_typedef_meta("socklen_t", SIZE_AND_SIGNED(socklen_t)); print_typedef_meta("sa_family_t", SIZE_AND_SIGNED(sa_family_t)); print_typedef_meta("in_port_t", SIZE_AND_SIGNED(in_port_t)); print_typedef_meta("in_addr_t", SIZE_AND_SIGNED(in_addr_t)); printf("\n"); { struct in_addr { in_addr_t s_addr; } dummy; print_typedef_meta("in_addr", DUMMY_STRUCT_SIZE); print_typedef_meta("in_addr", ".s_addr", MEMBER_SIZE_AND_SIGNED(s_addr)); printf("\n"); } print_typedef_meta("nl_item", SIZE_AND_SIGNED(nl_item)); printf("\n"); { struct iovec { void *iov_base; size_t iov_len; } dummy; print_typedef_meta("iovec", DUMMY_STRUCT_SIZE); print_typedef_meta("iovec", ".iov_base", PTR_MEMBER_SIZE_AND_SIGNED(iov_base)); print_typedef_meta("iovec", ".iov_len", MEMBER_SIZE_AND_SIGNED(iov_len)); printf("\n"); } } int main(void) { print_header(); print_alltypes_meta(); return 0; }