Move 1988-2004 entries into subdirs
We we move 1988-2004 entries from all of a year's winning entries in a single directory to each winner being in their own sub-directory under the given year directory.
This commit is contained in:
1 parent
1e82e8aa3e
commit
d2a42f42e8
478 files changed
No files matched your search
@@ -0,0 +1,949 @@
|
||||
# This file is read by a standard conformance test program.
|
||||
#
|
||||
# File format:
|
||||
# Three paragraphs separated by exactly one empty line.
|
||||
# Lines beginning with '#' at the very beginning are ignored.
|
||||
#
|
||||
# Lines in the first paragraph consist of a single digit [0-9], a space,
|
||||
# and an argument for cpp which selects some standard. Normally this is
|
||||
# done with a feature test macros but for example for ANSI compliance it
|
||||
# might be a compiler switch, like -Xa or -ansi.
|
||||
# No more than 10 standards (identified by the digits 0 - 9, in order)
|
||||
# are allowed.
|
||||
#
|
||||
# Lines in the second paragraph consist of a string of digits, a space,
|
||||
# and an identifier. An identifier may begin or end with '*' meaning
|
||||
# zero or more characters can be appended or prepended, respectively.
|
||||
# The string of digits describes the particular standards in which this
|
||||
# identifier is *always* (regardless of which header is included) reserved
|
||||
# and thus may be a valid macro.
|
||||
#
|
||||
# Lines in the third paragraph consist of two or three fields.
|
||||
# A two field line consists of a string of digits describing the
|
||||
# standards, a space, and an identifier (of the same format as in
|
||||
# the second paragraph). A sequence of two field lines is followed
|
||||
# by exactly one three field line. This line consists of a string
|
||||
# of digits describing the standards, a space, the header name,
|
||||
# another space and the single character H. In other words, a list
|
||||
# of identifiers *followed* by the header in which they may appear.
|
||||
# [That way only one pass is needed when reading this file.]
|
||||
#
|
||||
0 -D__STDC__ -D_ANSI_SOURCE
|
||||
1 -D_POSIX_SOURCE
|
||||
2 -D_XOPEN_SOURCE -D_XOPEN_VERSION=4
|
||||
|
||||
# Identifiers with external linkage (extern functions and extern
|
||||
# variables) are always in scope, even when no header is included.
|
||||
#
|
||||
# Always okay, because these constitute the implementation name space:
|
||||
012 _*
|
||||
#
|
||||
# <errno.h> :
|
||||
012 errno
|
||||
#
|
||||
# <stddef.h> : [no identifiers with external linkage]
|
||||
#
|
||||
# <assert.h> : [no identifiers with external linkage]
|
||||
#
|
||||
# <ctype.h> :
|
||||
012 isa*
|
||||
012 isb*
|
||||
012 isc*
|
||||
012 isd*
|
||||
012 ise*
|
||||
012 isf*
|
||||
012 isg*
|
||||
012 ish*
|
||||
012 isi*
|
||||
012 isj*
|
||||
012 isk*
|
||||
012 isl*
|
||||
012 ism*
|
||||
012 isn*
|
||||
012 iso*
|
||||
012 isp*
|
||||
012 isq*
|
||||
012 isr*
|
||||
012 iss*
|
||||
012 ist*
|
||||
012 isu*
|
||||
012 isv*
|
||||
012 isw*
|
||||
012 isx*
|
||||
012 isy*
|
||||
012 isz*
|
||||
012 toa*
|
||||
012 tob*
|
||||
012 toc*
|
||||
012 tod*
|
||||
012 toe*
|
||||
012 tof*
|
||||
012 tog*
|
||||
012 toh*
|
||||
012 toi*
|
||||
012 toj*
|
||||
012 tok*
|
||||
012 tol*
|
||||
012 tom*
|
||||
012 ton*
|
||||
012 too*
|
||||
012 top*
|
||||
012 toq*
|
||||
012 tor*
|
||||
012 tos*
|
||||
012 tot*
|
||||
012 tou*
|
||||
012 tov*
|
||||
012 tow*
|
||||
012 tox*
|
||||
012 toy*
|
||||
012 toz*
|
||||
#
|
||||
# <locale.h> :
|
||||
012 lconv
|
||||
012 setlocale
|
||||
012 localeconv
|
||||
#
|
||||
# <math.h> :
|
||||
012 acos
|
||||
012 acosf
|
||||
012 acosl
|
||||
012 asin
|
||||
012 asinf
|
||||
012 asinl
|
||||
012 atan
|
||||
012 atanf
|
||||
012 atanl
|
||||
012 atan2
|
||||
012 atan2f
|
||||
012 atan2l
|
||||
012 cos
|
||||
012 cosf
|
||||
012 cosl
|
||||
012 cosh
|
||||
012 coshf
|
||||
012 coshl
|
||||
012 exp
|
||||
012 expf
|
||||
012 expl
|
||||
012 fabs
|
||||
012 fabsf
|
||||
012 fabsl
|
||||
012 floor
|
||||
012 floorf
|
||||
012 floorl
|
||||
012 fmod
|
||||
012 fmodf
|
||||
012 fmodl
|
||||
012 frexp
|
||||
012 frexpf
|
||||
012 frexpl
|
||||
012 ldexp
|
||||
012 ldexpf
|
||||
012 ldexpl
|
||||
012 log
|
||||
012 logf
|
||||
012 logl
|
||||
012 log10
|
||||
012 log10f
|
||||
012 log10l
|
||||
012 modf
|
||||
012 modff
|
||||
012 modfl
|
||||
012 pow
|
||||
012 powf
|
||||
012 powl
|
||||
012 sin
|
||||
012 sinf
|
||||
012 sinl
|
||||
012 sinh
|
||||
012 sinhf
|
||||
012 sinhl
|
||||
012 tan
|
||||
012 tanf
|
||||
012 tanl
|
||||
012 tanh
|
||||
012 tanhf
|
||||
012 tanhl
|
||||
012 sqrt
|
||||
012 sqrtf
|
||||
012 sqrtl
|
||||
012 ceil
|
||||
012 ceilf
|
||||
012 ceill
|
||||
#
|
||||
# <setjmp.h> :
|
||||
012 longjmp
|
||||
012 setjmp
|
||||
12 siglongjmp
|
||||
12 sigsetjmp
|
||||
#
|
||||
# <signal.h> :
|
||||
012 raise
|
||||
012 signal
|
||||
12 kill
|
||||
12 sigaction
|
||||
12 sigaddset
|
||||
12 sigdelset
|
||||
12 sigemptyset
|
||||
12 sigfillset
|
||||
12 sigismember
|
||||
12 sigpending
|
||||
12 sigprocmask
|
||||
12 sigsuspend
|
||||
#
|
||||
# <stdarg.h> : [no identifiers with external linkage]
|
||||
#
|
||||
# <stdio.h> :
|
||||
012 stderr
|
||||
012 stdin
|
||||
012 stdout
|
||||
012 remove
|
||||
012 rename
|
||||
012 tmpfile
|
||||
012 tmpnam
|
||||
012 fclose
|
||||
012 fflush
|
||||
012 fileno
|
||||
012 fopen
|
||||
012 freopen
|
||||
012 setbuf
|
||||
012 setvbuf
|
||||
012 fprintf
|
||||
012 fscanf
|
||||
012 printf
|
||||
012 scanf
|
||||
012 sprintf
|
||||
012 sscanf
|
||||
012 vfprintf
|
||||
012 vprintf
|
||||
012 vsprintf
|
||||
012 fgetc
|
||||
012 fgets
|
||||
012 fputc
|
||||
012 fputs
|
||||
012 getc
|
||||
012 getchar
|
||||
012 gets
|
||||
012 putc
|
||||
012 putchar
|
||||
012 puts
|
||||
012 ungetc
|
||||
012 fread
|
||||
012 fwrite
|
||||
012 fgetpos
|
||||
012 fseek
|
||||
012 fsetpos
|
||||
012 ftell
|
||||
012 rewind
|
||||
012 clearerr
|
||||
012 feof
|
||||
012 ferror
|
||||
012 perror
|
||||
#
|
||||
# <stdlib.h> :
|
||||
012 atof
|
||||
012 atoi
|
||||
012 atol
|
||||
012 strtod
|
||||
012 strtol
|
||||
012 strtoul
|
||||
012 rand
|
||||
012 srand
|
||||
012 calloc
|
||||
012 free
|
||||
012 malloc
|
||||
012 realloc
|
||||
012 abort
|
||||
012 atexit
|
||||
012 exit
|
||||
012 getenv
|
||||
012 system
|
||||
012 bsearch
|
||||
012 qsort
|
||||
012 abs
|
||||
012 div
|
||||
012 labs
|
||||
012 ldiv
|
||||
012 mblen
|
||||
012 mbtowc
|
||||
012 wctomb
|
||||
012 mbstowcs
|
||||
012 wcstombs
|
||||
#
|
||||
# <string.h>
|
||||
012 mema*
|
||||
012 memb*
|
||||
012 memc*
|
||||
012 memd*
|
||||
012 meme*
|
||||
012 memf*
|
||||
012 memg*
|
||||
012 memh*
|
||||
012 memi*
|
||||
012 memj*
|
||||
012 memk*
|
||||
012 meml*
|
||||
012 memm*
|
||||
012 memn*
|
||||
012 memo*
|
||||
012 memp*
|
||||
012 memq*
|
||||
012 memr*
|
||||
012 mems*
|
||||
012 memt*
|
||||
012 memu*
|
||||
012 memv*
|
||||
012 memw*
|
||||
012 memx*
|
||||
012 memy*
|
||||
012 memz*
|
||||
012 stra*
|
||||
012 strb*
|
||||
012 strc*
|
||||
012 strd*
|
||||
012 stre*
|
||||
012 strf*
|
||||
012 strg*
|
||||
012 strh*
|
||||
012 stri*
|
||||
012 strj*
|
||||
012 strk*
|
||||
012 strl*
|
||||
012 strm*
|
||||
012 strn*
|
||||
012 stro*
|
||||
012 strp*
|
||||
012 strq*
|
||||
012 strr*
|
||||
012 strs*
|
||||
012 strt*
|
||||
012 stru*
|
||||
012 strv*
|
||||
012 strw*
|
||||
012 strx*
|
||||
012 stry*
|
||||
012 strz*
|
||||
012 wcsa*
|
||||
012 wcsb*
|
||||
012 wcsc*
|
||||
012 wcsd*
|
||||
012 wcse*
|
||||
012 wcsf*
|
||||
012 wcsg*
|
||||
012 wcsh*
|
||||
012 wcsi*
|
||||
012 wcsj*
|
||||
012 wcsk*
|
||||
012 wcsl*
|
||||
012 wcsm*
|
||||
012 wcsn*
|
||||
012 wcso*
|
||||
012 wcsp*
|
||||
012 wcsq*
|
||||
012 wcsr*
|
||||
012 wcss*
|
||||
012 wcst*
|
||||
012 wcsu*
|
||||
012 wcsv*
|
||||
012 wcsw*
|
||||
012 wcsx*
|
||||
012 wcsy*
|
||||
012 wcsz*
|
||||
#
|
||||
# <time.h> :
|
||||
012 clock
|
||||
012 difftime
|
||||
012 mktime
|
||||
012 time
|
||||
012 asctime
|
||||
012 ctime
|
||||
012 gmtime
|
||||
012 localtime
|
||||
012 strftime
|
||||
12 tzset
|
||||
12 tzname
|
||||
#
|
||||
# <limits.h> : [no identifiers with external linkage]
|
||||
#
|
||||
# <float.h> : [no identifiers with external linkage]
|
||||
#
|
||||
# <iso646.h> : [no identifiers with external linkage]
|
||||
#
|
||||
# <wctype.h> :
|
||||
012 wctype
|
||||
012 wctrans
|
||||
# (is* and to* mentioned above)
|
||||
#
|
||||
# <wchar.h> :
|
||||
# (wcs* already mentioned above)
|
||||
012 fwprintf
|
||||
012 fwscanf
|
||||
012 wprintf
|
||||
012 wscanf
|
||||
012 swprintf
|
||||
012 swscanf
|
||||
012 vfwprintf
|
||||
012 vwprintf
|
||||
012 vswprintf
|
||||
012 fgetwc
|
||||
012 fgetws
|
||||
012 fputwc
|
||||
012 fputws
|
||||
012 getwc
|
||||
012 getwchar
|
||||
012 putwc
|
||||
012 putwchar
|
||||
012 ungetwc
|
||||
012 fwide
|
||||
012 wmemchr
|
||||
012 wmemcmp
|
||||
012 wmemcpy
|
||||
012 wmemmove
|
||||
012 wmemset
|
||||
012 btowc
|
||||
012 wctob
|
||||
012 mbsinit
|
||||
012 mbrlen
|
||||
012 mbrtowc
|
||||
012 wcrtomb
|
||||
012 mbsrtowcs
|
||||
#
|
||||
# <dirent.h> (POSIX) :
|
||||
12 dirent
|
||||
12 closedir
|
||||
12 opendir
|
||||
12 readdir
|
||||
12 rewinddir
|
||||
#
|
||||
# <fcntl.h> (POSIX) :
|
||||
12 flock
|
||||
12 creat
|
||||
12 fcntl
|
||||
12 open
|
||||
#
|
||||
# <grp.h> (POSIX) :
|
||||
12 getgrgid
|
||||
12 getgrnam
|
||||
#
|
||||
# <pwd.h> (POSIX) :
|
||||
12 getpwnam
|
||||
12 getpwuid
|
||||
#
|
||||
# <sys/stat.h> (POSIX) :
|
||||
12 chmod
|
||||
12 fstat
|
||||
12 mkdir
|
||||
12 mkfifo
|
||||
12 stat
|
||||
12 umask
|
||||
#
|
||||
# <sys/times.h> (POSIX) :
|
||||
12 times
|
||||
#
|
||||
# <sys/types.h> (POSIX) : [no external identifiers]
|
||||
#
|
||||
# <sys/utsname.h> (POSIX) :
|
||||
12 uname
|
||||
#
|
||||
# <sys/wait.h> (POSIX) :
|
||||
12 wait
|
||||
12 waitpid
|
||||
#
|
||||
# <termios.h> (POSIX) :
|
||||
12 cfgetispeed
|
||||
12 cfgetospeed
|
||||
12 cfsetispeed
|
||||
12 cfsetospeed
|
||||
12 tcdrain
|
||||
12 tcflow
|
||||
12 tcflush
|
||||
12 tcgetattr
|
||||
12 tcsendbreak
|
||||
12 tcsetattr
|
||||
#
|
||||
# <unistd.h> (POSIX) :
|
||||
12 _exit
|
||||
12 access
|
||||
12 alarm
|
||||
12 chdir
|
||||
12 chown
|
||||
12 close
|
||||
12 ctermid
|
||||
12 cuserid
|
||||
12 dup2
|
||||
12 dup
|
||||
12 execl
|
||||
12 execle
|
||||
12 execlp
|
||||
12 execv
|
||||
12 execve
|
||||
12 execvp
|
||||
12 fork
|
||||
12 fpathconf
|
||||
12 getcwd
|
||||
12 getegid
|
||||
12 geteuid
|
||||
12 getgid
|
||||
12 getgroups
|
||||
12 getlogin
|
||||
12 getpgrp
|
||||
12 getpid
|
||||
12 getppid
|
||||
12 getuid
|
||||
12 isatty
|
||||
12 link
|
||||
12 lseek
|
||||
12 pathconf
|
||||
12 pause
|
||||
12 pipe
|
||||
12 read
|
||||
12 rmdir
|
||||
12 setgid
|
||||
12 setpgid
|
||||
12 setsid
|
||||
12 setuid
|
||||
12 sleep
|
||||
12 sysconf
|
||||
12 tcgetpgrp
|
||||
12 tcsetpgrp
|
||||
12 ttyname
|
||||
12 unlink
|
||||
12 write
|
||||
# <unistd.h> (XOPEN additions)
|
||||
2 confstr
|
||||
2 crypt
|
||||
2 encrypt
|
||||
2 getopt
|
||||
2 optarg
|
||||
2 opterr
|
||||
2 optind
|
||||
2 optopt
|
||||
2 getpass
|
||||
2 swab
|
||||
#
|
||||
# <utime.h> (POSIX) :
|
||||
12 utime
|
||||
|
||||
# Identifiers with no linkage, per header:
|
||||
# macros, types, structs, unions.
|
||||
012 E0*
|
||||
012 E1*
|
||||
012 E2*
|
||||
012 E3*
|
||||
012 E4*
|
||||
012 E5*
|
||||
012 E6*
|
||||
012 E7*
|
||||
012 E8*
|
||||
012 E9*
|
||||
012 EA*
|
||||
012 EB*
|
||||
012 EC*
|
||||
012 ED*
|
||||
012 EE*
|
||||
012 EF*
|
||||
012 EG*
|
||||
012 EH*
|
||||
012 EI*
|
||||
012 EJ*
|
||||
012 EK*
|
||||
012 EL*
|
||||
012 EM*
|
||||
012 EN*
|
||||
012 EO*
|
||||
012 EP*
|
||||
012 EQ*
|
||||
012 ER*
|
||||
012 ES*
|
||||
012 ET*
|
||||
012 EU*
|
||||
012 EV*
|
||||
012 EW*
|
||||
012 EX*
|
||||
012 EY*
|
||||
012 EZ*
|
||||
12 *_t
|
||||
012 errno.h H
|
||||
012 NULL
|
||||
012 offsetof
|
||||
012 ptrdiff_t
|
||||
012 size_t
|
||||
012 wchar_z
|
||||
12 *_t
|
||||
012 stddef.h H
|
||||
012 NDEBUG
|
||||
012 assert
|
||||
12 *_t
|
||||
012 assert.h H
|
||||
012 LC_A*
|
||||
012 LC_B*
|
||||
012 LC_C*
|
||||
012 LC_D*
|
||||
012 LC_E*
|
||||
012 LC_F*
|
||||
012 LC_G*
|
||||
012 LC_H*
|
||||
012 LC_I*
|
||||
012 LC_J*
|
||||
012 LC_K*
|
||||
012 LC_L*
|
||||
012 LC_M*
|
||||
012 LC_N*
|
||||
012 LC_O*
|
||||
012 LC_P*
|
||||
012 LC_Q*
|
||||
012 LC_R*
|
||||
012 LC_S*
|
||||
012 LC_T*
|
||||
012 LC_U*
|
||||
012 LC_V*
|
||||
012 LC_W*
|
||||
012 LC_X*
|
||||
012 LC_Y*
|
||||
012 LC_Z*
|
||||
012 NULL
|
||||
12 *_t
|
||||
012 locale.h H
|
||||
012 HUGE_VAL
|
||||
12 *_t
|
||||
2 MAXFLOAT
|
||||
2 M_E
|
||||
2 M_LOG2E
|
||||
2 M_LOG10E
|
||||
2 M_LN2
|
||||
2 M_LN10
|
||||
2 M_PI
|
||||
2 M_PI_2
|
||||
2 M_PI_4
|
||||
2 M_1_PI
|
||||
2 M_2_PI
|
||||
2 M_2_SQRTPI
|
||||
2 M_SQRT2
|
||||
2 M_SQRT1_2
|
||||
012 math.h H
|
||||
012 jmp_buf
|
||||
12 sigjmp_buf
|
||||
12 *_t
|
||||
012 setjmp.h H
|
||||
012 sig_atomic_t
|
||||
012 SIG_*
|
||||
012 SIGA*
|
||||
012 SIGB*
|
||||
012 SIGC*
|
||||
012 SIGD*
|
||||
012 SIGE*
|
||||
012 SIGF*
|
||||
012 SIGG*
|
||||
012 SIGH*
|
||||
012 SIGI*
|
||||
012 SIGJ*
|
||||
012 SIGK*
|
||||
012 SIGL*
|
||||
012 SIGM*
|
||||
012 SIGN*
|
||||
012 SIGO*
|
||||
012 SIGP*
|
||||
012 SIGQ*
|
||||
012 SIGR*
|
||||
012 SIGS*
|
||||
012 SIGT*
|
||||
012 SIGU*
|
||||
012 SIGV*
|
||||
012 SIGW*
|
||||
012 SIGX*
|
||||
012 SIGY*
|
||||
012 SIGZ*
|
||||
12 sa_*
|
||||
12 SA_*
|
||||
12 *_t
|
||||
012 signal.h H
|
||||
012 va_list
|
||||
012 va_start
|
||||
012 va_arg
|
||||
012 va_end
|
||||
12 *_t
|
||||
012 stdarg.h H
|
||||
012 _IOFBF
|
||||
012 _IOLBF
|
||||
012 _IONBF
|
||||
012 BUFSIZ
|
||||
012 EOF
|
||||
012 FILE
|
||||
012 FILENAME_MAX
|
||||
012 FOPEN_MAX
|
||||
012 fpos_t
|
||||
012 L_tmpnam
|
||||
012 NULL
|
||||
012 SEEK_CUR
|
||||
012 SEEK_END
|
||||
012 SEEK_SET
|
||||
012 size_t
|
||||
012 TMP_MAX
|
||||
12 L_ctermid
|
||||
12 L_cuserid
|
||||
12 STREAM_MAX
|
||||
12 *_t
|
||||
2 P_tmpdir
|
||||
012 stdio.h H
|
||||
012 EXIT_FAILURE
|
||||
012 EXIT_SUCCESS
|
||||
012 MB_CUR_MAX
|
||||
012 NULL
|
||||
012 RAND_MAX
|
||||
012 div_t
|
||||
012 ldiv_t
|
||||
012 size_t
|
||||
012 wchar_t
|
||||
12 *_t
|
||||
2 WIFSIGNALED
|
||||
2 WTERMSIG
|
||||
2 WUNTRACED
|
||||
2 WNOHANG
|
||||
2 WIFEXITED
|
||||
2 WIFSTOPPED
|
||||
2 WSTOPSIG
|
||||
2 WEXITSTATUS
|
||||
012 stdlib.h H
|
||||
012 NULL
|
||||
012 size_t
|
||||
12 *_t
|
||||
012 string.h H
|
||||
012 CLOCKS_PER_SEC
|
||||
012 NULL
|
||||
012 tm
|
||||
12 CLK_TCK
|
||||
12 *_t
|
||||
012 time.h H
|
||||
012 CHAR_BIT
|
||||
012 CHAR_MAX
|
||||
012 CHAR_MIN
|
||||
012 INT_MAX
|
||||
012 INT_MIN
|
||||
012 LONG_MAX
|
||||
012 LONG_MIN
|
||||
012 MB_LEN_MAX
|
||||
012 SCHAR_MAX
|
||||
012 SCHAR_MIN
|
||||
012 SHRT_MAX
|
||||
012 SHRT_MIN
|
||||
012 UCHAR_MAX
|
||||
012 UCHAR_MIN
|
||||
012 UINT_MAX
|
||||
012 ULONG_MAX
|
||||
012 USHRT_MAX
|
||||
12 ARG_MAX
|
||||
12 CHILD_MAX
|
||||
12 LINK_MAX
|
||||
12 MAX_CANON
|
||||
12 MAX_INPUT
|
||||
12 NAME_MAX
|
||||
12 NGROUPS_MAX
|
||||
12 OPEN_MAX
|
||||
12 PATH_MAX
|
||||
12 PIPE_BUF
|
||||
12 SSIZE_MAX
|
||||
12 STREAM_MAX
|
||||
12 TZNAME_MAX
|
||||
12 *_t
|
||||
12 *_MAX
|
||||
2 NL_TEXTMAX
|
||||
2 DBL_MIN
|
||||
2 NL_MSGMAX
|
||||
2 NL_ARGMAX
|
||||
2 NL_NMAX
|
||||
2 WORD_BIT
|
||||
2 NL_LANGMAX
|
||||
2 LONG_BIT
|
||||
2 NZERO
|
||||
2 NL_SETMAX
|
||||
2 FLT_DIG
|
||||
2 FLT_MIN
|
||||
2 DBL_DIG
|
||||
012 limits.h H
|
||||
012 DBL_DIG
|
||||
012 DBL_MANT_DIG
|
||||
012 DBL_MAX_10_EXP
|
||||
012 DBL_MAX_EXP
|
||||
012 DBL_MIN_10_EXP
|
||||
012 DBL_MIN_EXP
|
||||
012 FLT_DIG
|
||||
012 FLT_MANT_DIG
|
||||
012 FLT_MAX_10_EXP
|
||||
012 FLT_MAX_EXP
|
||||
012 FLT_MIN_10_EXP
|
||||
012 FLT_MIN_EXP
|
||||
012 LDBL_DIG
|
||||
012 LDBL_MANT_DIG
|
||||
012 LDBL_MAX_10_EXP
|
||||
012 LDBL_MAX_EXP
|
||||
012 LDBL_MIN_10_EXP
|
||||
012 LDBL_MIN_EXP
|
||||
012 DBL_MAX
|
||||
012 FLT_MAX
|
||||
012 LDBL_MAX
|
||||
012 DBL_EPSILON
|
||||
012 DBL_MIN
|
||||
012 FLT_EPSILON
|
||||
012 FLT_MIN
|
||||
012 LDBL_EPSILON
|
||||
012 LDBL_MIN
|
||||
012 FLT_ROUNDS
|
||||
012 FLT_RADIX
|
||||
12 *_t
|
||||
012 float.h H
|
||||
012 and
|
||||
012 and_eq
|
||||
012 bitand
|
||||
012 bitor
|
||||
012 compl
|
||||
012 not
|
||||
012 not_eq
|
||||
012 or
|
||||
012 or_eq
|
||||
012 xor
|
||||
012 xor_eq
|
||||
12 *_t
|
||||
012 iso646.h H
|
||||
012 wctrans_t
|
||||
012 wctype_t
|
||||
012 WEOF
|
||||
012 wint_t
|
||||
12 *_t
|
||||
012 wctype.h H
|
||||
012 mbstate_t
|
||||
012 NULL
|
||||
012 size_t
|
||||
012 tm
|
||||
012 wchar_t
|
||||
012 WCHAR_MAX
|
||||
012 WCHAR_MIN
|
||||
012 WEOF
|
||||
012 wint_t
|
||||
12 *_t
|
||||
012 wchar.h H
|
||||
12 DIR
|
||||
12 d_*
|
||||
12 *_t
|
||||
12 dirent.h H
|
||||
12 l_*
|
||||
12 F_*
|
||||
12 O_*
|
||||
12 S_*
|
||||
12 FD_CLOEXEC
|
||||
12 SEEK_CUR
|
||||
12 SEEK_END
|
||||
12 SEEK_SET
|
||||
2 st_atime
|
||||
2 st_mtime
|
||||
2 st_ctime
|
||||
12 *_t
|
||||
12 fcntl.h H
|
||||
12 group
|
||||
12 *_t
|
||||
12 gr_*
|
||||
12 grp.h H
|
||||
12 passwd
|
||||
12 pw_*
|
||||
12 *_t
|
||||
12 pwd.h H
|
||||
12 stat
|
||||
12 st_*
|
||||
12 S_*
|
||||
12 *_t
|
||||
12 sys/stat.h H
|
||||
12 clock_t
|
||||
12 tms
|
||||
12 tms_*
|
||||
12 *_t
|
||||
12 sys/times.h H
|
||||
12 *_t
|
||||
12 sys/types.h H
|
||||
12 utsname
|
||||
12 *_t
|
||||
12 sys/utsname.h H
|
||||
12 WEXITSTATUS
|
||||
12 WIFEXITED
|
||||
12 WIFSIGNALED
|
||||
12 WIFSTOPPED
|
||||
12 WNOHANG
|
||||
12 WSTOPSIG
|
||||
12 WTERMSIG
|
||||
12 WUNTRACED
|
||||
12 *_t
|
||||
12 sys/wait.h H
|
||||
12 BRKINT
|
||||
12 CLOCAL
|
||||
12 CREAD
|
||||
12 CS5
|
||||
12 CS6
|
||||
12 CS7
|
||||
12 CS8
|
||||
12 CSIZE
|
||||
12 CSTOPB
|
||||
12 ECHO
|
||||
12 ECHOE
|
||||
12 ECHOK
|
||||
12 ECHONL
|
||||
12 HUPCL
|
||||
12 NCCS
|
||||
12 NOFLSH
|
||||
12 PARENB
|
||||
12 PARMRK
|
||||
12 PARODD
|
||||
12 TOSTOP
|
||||
12 c_*
|
||||
12 V*
|
||||
12 I*
|
||||
12 O*
|
||||
12 TC*
|
||||
12 B0*
|
||||
12 B1*
|
||||
12 B2*
|
||||
12 B3*
|
||||
12 B4*
|
||||
12 B5*
|
||||
12 B6*
|
||||
12 B7*
|
||||
12 B8*
|
||||
12 B9*
|
||||
2 FFDLY
|
||||
2 CRDLY
|
||||
2 BS0
|
||||
2 BS1
|
||||
2 FF0
|
||||
2 CR0
|
||||
2 FF1
|
||||
2 CR1
|
||||
2 CR2
|
||||
2 CR3
|
||||
2 XCASE
|
||||
2 NL0
|
||||
2 NL1
|
||||
2 TABDLY
|
||||
2 NLDLY
|
||||
2 TAB0
|
||||
2 TAB1
|
||||
2 TAB2
|
||||
2 TAB3
|
||||
2 BSDLY
|
||||
12 termios
|
||||
12 *_t
|
||||
12 termios.h H
|
||||
12 F_OK
|
||||
12 NULL
|
||||
12 R_OK
|
||||
12 SEEK_CUR
|
||||
12 SEEK_END
|
||||
12 SEEK_SET
|
||||
12 STDERR_FILENO
|
||||
12 STDIN_FILENO
|
||||
12 STDOUT_FILENO
|
||||
12 W_OK
|
||||
12 X_OK
|
||||
# _* is in the allowed namespace anyway.
|
||||
12 *_t
|
||||
12 unistd.h H
|
||||
12 utimbuf
|
||||
12 *_t
|
||||
12 utime.h H
|
||||
@@ -0,0 +1,70 @@
|
||||
%:define H(x) <st%:%:x##.h>
|
||||
#include H(dio)
|
||||
#include H(dlib)
|
||||
#include H(ring)
|
||||
|
||||
#define x ) == 0 ?__LINE__:0){O =__LINE__;break;} }
|
||||
#define X(x) __LINE__ x __LINE__
|
||||
#define t(a)\
|
||||
for (c = 0; c <n##a; ++c) { \
|
||||
if (strchr (a[c], 0[__FILE__])) { if (*a[c] == 0[__FILE__]) { \
|
||||
if (strcmp (a[c]+__LINE__, I + strlen (I) + __LINE__ - strlen (a[c]) x else { \
|
||||
if (strncmp (a[c], I, strlen (a[c])-__LINE__ x \
|
||||
} else { if (strcmp (a[c], I x }
|
||||
|
||||
#line 4 "info\0r"
|
||||
int
|
||||
main (int C, char **V)
|
||||
{
|
||||
FILE *H;
|
||||
int c, ne, nn, S = C < 2 ? 060 : *V[1];
|
||||
|
||||
char f[__LINE__][X(*)], K[X(*)], L[X(<<)],
|
||||
e[X(<<)][3*__LINE__], n[X(<<)][3*__LINE__], F[__LINE__];
|
||||
|
||||
if (freopen (__FILE__, 5+__FILE__, stdin) == 0) return __LINE__-13;
|
||||
for (c = 0;;) {
|
||||
#line 1 "#\n"
|
||||
if (!fgets (f[c], (int)sizeof *f, stdin)) return __LINE__; if (*f[c] == 0[__FILE__]) continue; if (*f[c] != __LINE__[__FILE__]) { f[c][strlen (f[c]) - __LINE__] = 2[__FILE__];
|
||||
++c;
|
||||
} else
|
||||
break;
|
||||
}
|
||||
for (ne = 0;;) {
|
||||
do {
|
||||
#line 1 "#%s%s"
|
||||
if (!fgets (L, (int)sizeof L, stdin)) return __LINE__; } while (*L == 0[__FILE__]); switch (sscanf (L, __LINE__+__FILE__, F, e[ne])) { default: goto O;
|
||||
case __LINE__: switch (strchr (F, S)!=0) case 1: ++ne;
|
||||
}
|
||||
}
|
||||
|
||||
O:
|
||||
nn = 0;
|
||||
while ((fgets (L, (int) sizeof L, stdin)) != 0) {
|
||||
|
||||
|
||||
char A[__LINE__], f3; if (*L == 0[__FILE__]) continue;
|
||||
#line 1 "%s%s %c"
|
||||
switch (sscanf (L, __FILE__, A, n[nn], &f3)) {
|
||||
case __LINE__: if (strchr (A, S)) ++nn; break;
|
||||
case __LINE__:
|
||||
if (strchr (A, S)) {
|
||||
#line 8 "<%s>:\n"
|
||||
char *I = L + __LINE__;
|
||||
int O = printf (__FILE__, n[nn]) +
|
||||
#line 2 "0gcc -ansi -E -dM -undef %s /usr/include/%s>r\0 ("
|
||||
sprintf (K, 1+__FILE__, f[S-*__FILE__] + __LINE__, n[nn]);
|
||||
O += system (K);
|
||||
if ((H = fopen (__FILE__+44, 44+__FILE__)) == 0) return 1;
|
||||
while ((fgets (L, (int)sizeof L, H)) != 0) {
|
||||
I[strcspn (I, 46+__FILE__)] = O = 0;
|
||||
#line 1 "*r"
|
||||
t (n) t (e)
|
||||
if (0 == O) O = puts (L);
|
||||
}
|
||||
nn = fclose (H);
|
||||
}
|
||||
}
|
||||
}
|
||||
return remove (1+__FILE__);
|
||||
}
|
||||
@@ -0,0 +1,222 @@
|
||||
CPP Abuse:
|
||||
|
||||
Jens Schweikhardt
|
||||
DFN Network Operation Center
|
||||
Schlartaeckerweg 3 (Home address)
|
||||
D-71384 Weinstadt
|
||||
Germany
|
||||
|
||||
http://www.shuttle.de/schweikh/
|
||||
|
||||
|
||||
Judge's Comments:
|
||||
|
||||
To build:
|
||||
|
||||
make schweikh1
|
||||
|
||||
To use:
|
||||
|
||||
./schweikh1
|
||||
|
||||
What does it do? It seems to print a list of system headers, perhaps
|
||||
with words after them. Curiously, if you look at the list of words
|
||||
defined in a given standard header, they are never printed directly
|
||||
after that header's name. Ah-hah! It's a conformance test for the
|
||||
standard headers.
|
||||
|
||||
This code is a wonder; it's a wonder that it compiles. I wonder
|
||||
whether or not it should. The innovative realization that you can
|
||||
use special characters, such as '\n', in #file directives alone
|
||||
merits some recognition.
|
||||
|
||||
I've included most of the author's comments; they're fairly thorough.
|
||||
Do not read them if you want to figure this out yourself. "Amendment
|
||||
One" refers to "NA1", the add-on to C89 which added some fairly
|
||||
crufty internationalization support.
|
||||
|
||||
NOTE: Some non-gcc compilers that are not fully ANSI standard do not
|
||||
compile this entry correctly. Using cc by default is not helpful
|
||||
most of the time on this entry, because the program has a hardcoded
|
||||
gcc invocation anyway. Anyone who uses egcs and has no plain gcc
|
||||
will need to frob the source anyway and can be expected to do the
|
||||
right thing with ${CC}. So use gcc.
|
||||
|
||||
NOTE: One may build the original entry, which incorrectly used
|
||||
^K's and ^L's after a # cpp-directive. While this works under
|
||||
gcc, it is not ISO C89. One may build this original entry by:
|
||||
|
||||
make schweikh1.orig
|
||||
|
||||
|
||||
Selected Author's Comments:
|
||||
|
||||
Important! This program, if it compiles at all, is mis-compiled by many
|
||||
compilers due to compiler bugs. It could be the "least likely
|
||||
to compile and execute" in conjunction with preprocessor abuse.
|
||||
When run, it is likely to uncover bugs in your system headers.
|
||||
|
||||
The program is run without arguments. If your compiler is buggy,
|
||||
the most likely result is no output and/or an exit status of 1.
|
||||
|
||||
If Amendment One headers are missing you will see
|
||||
<iso646.h>:
|
||||
gcc: /usr/include/iso646.h: No such file or directory
|
||||
gcc: No input files specified
|
||||
<wctype.h>:
|
||||
gcc: /usr/include/wctype.h: No such file or directory
|
||||
gcc: No input files specified
|
||||
<wchar.h>:
|
||||
gcc: /usr/include/wchar.h: No such file or directory
|
||||
gcc: No input files specified
|
||||
|
||||
Bug your vendor for an upgrade.
|
||||
|
||||
The format of the info file is straightforward and described in the file
|
||||
itself. Just load it in your favorite editor.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
Gcc (the GNU C compiler) must be available at runtime. It is assumed
|
||||
that your C implementation keeps headers as files in the /usr/include
|
||||
directory. The info file must be readable and reside in the current
|
||||
working directory. The current working directory must be writable in
|
||||
order to create a temporary file (which is removed upon program
|
||||
termination). In case you don't have gcc at runtime, not all is lost
|
||||
if your compiler or preprocessor can produce a list of defined macros
|
||||
in the format output by gcc -dM, i.e. lines of the form
|
||||
#define MACRO value
|
||||
Edit the source at line 55 in this case.
|
||||
|
||||
Background
|
||||
----------
|
||||
|
||||
ISO C has a very strict idea of visibility of identifiers. All possible
|
||||
macros are explicitly enumerated. In a compliant implementation no other
|
||||
macros can be defined, because you could write strictly conforming
|
||||
programs that may fail to compile due to syntax errors: suppose
|
||||
<stdio.h> defines PIPE_BUF, then the conforming
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h> /* <- or where the bogus macro is defined */
|
||||
#include <string.h>
|
||||
#define STR(x) #x
|
||||
#define XSTR(x) STR(x)
|
||||
int main (void)
|
||||
{
|
||||
int PIPE_BUF = 0;
|
||||
assert (strcmp ("PIPE_BUF", XSTR (PIPE_BUF)) == 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
is expected to compile and meet the assertion. If it does not, your
|
||||
compiler compiles some other language than ISO C.
|
||||
|
||||
Why I think my program is obfuscated
|
||||
------------------------------------
|
||||
|
||||
Not only is the program's purpose a thorough standard conformance
|
||||
test. The source itself is a beast and has uncovered bugs in many
|
||||
C compilers.
|
||||
|
||||
1. The token sequence after #include can consist of pp-tokens and
|
||||
"are processed just as in normal text." [ISO 6.8.2] The result
|
||||
must resemble one of the canonical forms, "foo.h" or <bar.h>.
|
||||
This lets us write things like
|
||||
#define HEADER "foo.h"
|
||||
#include HEADER
|
||||
I could not find a compiler rejecting this. However, if we're
|
||||
torturing the preprocessor a little more, by using token pasting,
|
||||
at least one compiler falls over.
|
||||
#define H(x) <st##x##.h>
|
||||
#include H(dio) /* expands to <stdio.h> */
|
||||
is rejected by tcc version 4.1.2, the TenDRA compiler:
|
||||
"t.c", line 3: Error:
|
||||
[ISO 6.8.3.3]: Invalid result for '##' operator in macro 'H'.
|
||||
To be honest, I don't know if the rules for pp-tokens and token
|
||||
pasting don't forbid what I do (and tcc is correct in rejecting it).
|
||||
In this case, all other compilers I tried are buggy, or the Standard
|
||||
itself :-)
|
||||
|
||||
2. The #line directive allows to set a line number, and optionally
|
||||
a file name, i.e. modify __LINE__ and __FILE__. Strange things
|
||||
happen if the file name contains a NUL byte -- which the Standard
|
||||
allows: in #line num "file" the "file" is an s-char-sequence per
|
||||
ISO 6.8.4. ISO 6.1.4 defines string literals as s-char-sequences,
|
||||
which may include octal escape sequences. Let's look at
|
||||
#include <stdio.h>
|
||||
#line 42 "foo\0bar"
|
||||
int main (void) {
|
||||
printf ("%s %d\n", __FILE__, (int)sizeof __FILE__);
|
||||
return 0;
|
||||
}
|
||||
This is supposed to output 'foo 8'. Here's what happens in RL:
|
||||
foo 4 gcc 2.7.2.1, lcc
|
||||
foo\0bar 9 tcc 4.1.2, Sunsoft cc turn "\0" into "\\0", ugh!
|
||||
(I have written a bug report for gcc. Newer versions and egcs are ok.)
|
||||
|
||||
3. The %: and %:%: digraphs test for conformance to Amendment One.
|
||||
|
||||
Ask your local guru if C allows the same case label in the same switch
|
||||
statement to appear more than once. Ask him/her to think real hard.
|
||||
The answer will be "no". The true guru will cite a constraint in
|
||||
ISO 6.6.4.2. Then make fun of the guru's answer by waving 'case __LINE__:'
|
||||
under his/her nose. Easy money from a bet! Make sure your guru has
|
||||
no chance to use Standardese weasel words as an escape: can I have
|
||||
case <some_token>:
|
||||
case <some_token>:
|
||||
in the same switch? (Note that you need the [invisible] newline. You
|
||||
can generously allow the additional constraint that no #undefs or
|
||||
#defines are allowed between the two cases.)
|
||||
|
||||
Lots of integer constants and string literals come into the source
|
||||
via __LINE__ and __FILE__ which are redefined at various places.
|
||||
Sometimes the __FILE__ contains \0 bytes; different strings or
|
||||
characters are then accessed with offsets, say 10+__FILE__ or
|
||||
__LINE__+__FILE__ or 2[__FILE__]. One integral constant in octal.
|
||||
This makes the source and header input depend on ASCII.
|
||||
|
||||
A few old obfuscations, like one character identifiers, not too
|
||||
many macros, a goto O, "needless" assignments to satisfy lint
|
||||
with its "function value ignored" warnings. My lint has nothing
|
||||
to complain.
|
||||
|
||||
There's more whitespace in the Standard than just space, tab and
|
||||
newline. In particular, there are vertical tab and formfeed that
|
||||
can be used in certain places (outside of preprocessing directives,
|
||||
i.e. they are not allowed from just after the # up to the final
|
||||
newline. See 6.8 for details.)
|
||||
On many implementations these appear as ^L and ^K. My source starts
|
||||
with an extremely uncommon 32bit word consisting of ^L, ^K, % and :.
|
||||
I have grepped old winning entries for ^K, none of them contains one,
|
||||
so this is something new -- after 14 years of IOCCC. Be sure to have
|
||||
enough paper in your printer when you make a hardcopy of the source...
|
||||
|
||||
While I'm at it, the rules state that only space, tab and newline
|
||||
are ignored for the count (plus '{', '}', ';' followed by
|
||||
whitespace). The mkentry.c program, however, uses isspace() which
|
||||
returns nonzero for vtab and formfeed and other characters as well.
|
||||
I could have used a lot more ^K and ^L probably undetected by your
|
||||
counter but decided to err on the side of safety. I use a perl
|
||||
script to compute the character count according to the rules.
|
||||
The advantages of an independent clean room approach...
|
||||
#!/usr/bin/perl -w
|
||||
$/ = "\0";
|
||||
$_ = <>;
|
||||
s/[;{}][ \t\n]/\n/g;
|
||||
s/[ \t\n]+//g;
|
||||
print length ($_),"\n";
|
||||
|
||||
I have tried, as suggested in the guidelines, to let the code look
|
||||
like ordinary C code. Apart from a few long lines I think I left
|
||||
the indentation like I would in RL. You should however not try to
|
||||
use indent on the source. The code is extremely fragile because of the
|
||||
myriads of __LINE__ macros -- indenting is a sure way to break
|
||||
the program. Don't even think of maintaining that beast; I've
|
||||
had my share of core dumps during development :-) A test suite
|
||||
was used after every minor change to find out if the program still
|
||||
does what it should.
|
||||
|
||||
From the goals: "To stress C compilers with unusual code."
|
||||
That describes exactly my modest attempts...
|
||||
@@ -0,0 +1,70 @@
|
||||
%:defineH(x) <st%:%:x##.h>
|
||||
#includeH(dio)
|
||||
#includeH(dlib)
|
||||
#includeH(ring)
|
||||
|
||||
#definex)==0?__LINE__:0){O=__LINE__;break;}}
|
||||
#defineX(x)__LINE__x__LINE__
|
||||
#definet(a)\
|
||||
for(c=0;c<n##a; ++c) { \
|
||||
if(strchr (a[c], 0[__FILE__])) { if (*a[c] == 0[__FILE__]) { \
|
||||
if (strcmp (a[c]+__LINE__, I + strlen (I) + __LINE__ - strlen (a[c]) x else { \
|
||||
if (strncmp (a[c], I, strlen (a[c])-__LINE__ x \
|
||||
}else { if (strcmp (a[c], I x }
|
||||
|
||||
#line 4 "info\0r"
|
||||
int
|
||||
main (int C, char **V)
|
||||
{
|
||||
FILE *H;
|
||||
int c, ne, nn, S = C < 2 ? 060 : *V[1];
|
||||
|
||||
char f[__LINE__][X(*)], K[X(*)], L[X(<<)],
|
||||
e[X(<<)][3*__LINE__], n[X(<<)][3*__LINE__], F[__LINE__];
|
||||
|
||||
if (freopen (__FILE__, 5+__FILE__, stdin) == 0) return __LINE__-13;
|
||||
for (c = 0;;) {
|
||||
#line 1 "#\n"
|
||||
if (!fgets (f[c], (int)sizeof *f, stdin)) return __LINE__; if (*f[c] == 0[__FILE__]) continue; if (*f[c] != __LINE__[__FILE__]) { f[c][strlen (f[c]) - __LINE__] = 2[__FILE__];
|
||||
++c;
|
||||
} else
|
||||
break;
|
||||
}
|
||||
for (ne = 0;;) {
|
||||
do {
|
||||
#line 1 "#%s%s"
|
||||
if (!fgets (L, (int)sizeof L, stdin)) return __LINE__; } while (*L == 0[__FILE__]); switch (sscanf (L, __LINE__+__FILE__, F, e[ne])) { default: goto O;
|
||||
case __LINE__: switch (strchr (F, S)!=0) case 1: ++ne;
|
||||
}
|
||||
}
|
||||
|
||||
O:
|
||||
nn = 0;
|
||||
while ((fgets (L, (int) sizeof L, stdin)) != 0) {
|
||||
|
||||
|
||||
char A[__LINE__], f3; if (*L == 0[__FILE__]) continue;
|
||||
#line 1 "%s%s %c"
|
||||
switch (sscanf (L, __FILE__, A, n[nn], &f3)) {
|
||||
case __LINE__: if (strchr (A, S)) ++nn; break;
|
||||
case __LINE__:
|
||||
if (strchr (A, S)) {
|
||||
#line 8 "<%s>:\n"
|
||||
char *I = L + __LINE__;
|
||||
int O = printf (__FILE__, n[nn]) +
|
||||
#line 2 "0gcc -ansi -E -dM -undef %s /usr/include/%s>r\0 ("
|
||||
sprintf (K, 1+__FILE__, f[S-*__FILE__] + __LINE__, n[nn]);
|
||||
O += system (K);
|
||||
if ((H = fopen (__FILE__+44, 44+__FILE__)) == 0) return 1;
|
||||
while ((fgets (L, (int)sizeof L, H)) != 0) {
|
||||
I[strcspn (I, 46+__FILE__)] = O = 0;
|
||||
#line 1 "*r"
|
||||
t (n) t (e)
|
||||
if (0 == O) O = puts (L);
|
||||
}
|
||||
nn = fclose (H);
|
||||
}
|
||||
}
|
||||
}
|
||||
return remove (1+__FILE__);
|
||||
}
|
||||
Reference in new issue
Block a user