This file describes the implementation status and some notes; information is taken from the C99 standard (ISO/IEC 9899:1999), section 7 ("Library"). # Notes for implementers 7.1.2§6: Use (extern) in all function prototypes 7.1.3§1: Only expose standard identifiers; anything else might be defined as a macro. Make sure every argument name, internal function name, etc. starts with either "__" or "_X" (where X is any uppercase letter) 7.1.4§1: Always give a function even if there is a macro definition, so that the address of the function can be taken; don't rely on the macro being defined, as the user can remove it except in some special cases String functions (mainly in ) can use 4-byte accesses, and in doing so read up to 3 bytes after the end of the string if it is not padded (which malloc'd strings and literal strings both are, leaving only stack-allocated and statically-allocated ones). This allows important speed optimizations. The extra access cannot trigger memory protection because there is no valid memory less than 4 bytes before the end of any protection region. The extra access might trigger the UBC in very specific scenarios, but we don't really care. # Status In this file, every definition is classified in one of several implementation statuses. There are 5 stages that every definition should go through. TODO: Function/symbol/macro is not implemented/defined BDEPS(...): Function/symbol/macro needs ... to build LDEPS(...): Function/symbol/macro needs ... to link TEST: Function/symbol/macro needs to be tested DONE: Function/symbol/macro is defined, builds, links, and is tested 7.2 ! 7.2.1 assert: LDEPS(fprintf,stderr,abort) 7.3 => OpenLibm 7.4 7.4.1 is*: DONE 7.4.2 to*: DONE 7.5 7.5.2 EDOM EILSEQ ERANGE: DONE 7.6 => OpenLibm 7.7 => GCC 7.8 ! 7.8.1 PRI* macros: LDEPS(*printf) ! 7.8.1 SCN* macros: LDEPS(*scanf) 7.8.2.1 imaxabs: DONE 7.8.2.2 imaxdiv: DONE 7.8.2.3 strtoimax strtoumax: DONE ! 7.8.2.4 wcstoimax wcstoumax: TODO 7.9 => GCC 7.10 => GCC 7.11 ! 7.11.1 setlocale: TEST ! 7.11.2 localeconv: TEST 7.12 => OpenLibm 7.13 7.13.1 setjmp: DONE 7.13.2 longjmp: DONE 7.14 ! 7.14.1 Macros and stuff: TODO ! 7.14.1.1 signal: TODO ! 7.14.1.2 raise: TODO 7.15 => GCC 7.16 => GCC 7.17 => GCC 7.18 => GCC 7.19 ! 7.19.1 Introduction: TODO ! 7.19.4 Operations on files: TODO ! 7.19.5 File access functions: TODO ! 7.19.6 Formatted input/output functions: TODO ! 7.19.7 Character input/output functions: TODO ! 7.19.8 Direct input/output functions: TODO ! 7.19.9 File positioning functions: TODO ! 7.19.10 Error-handling functions: TODO 7.20 7.20 RAND_MAX, MB_CUR_MAX: TODO 7.20.1.1 atof: DONE 7.20.1.2 atoi, atol, atoll: DONE 7.20.1.3 strtod, strtof, strtold: DONE 7.20.1.4 strtol, strtoul, strtoll, strtoull: DONE ! 7.20.2 Pseudo-random sequence generation functions: TODO ! 7.20.3 Memory management functions: TODO (check existing code first) ! 7.20.4.1 abort: BDEPS(raise) ! 7.20.4.2 atexit: TODO 7.20.4.3 exit: DONE (missing stream flushing/closing/etc) 7.20.4.4 _Exit: DONE (gint only) ! 7.20.4.5 getenv: TODO ! 7.20.4.6 system: TODO ! 7.20.5 Searching and sorting utilities: TODO 7.20.6.1 abs, labs, llabs: DONE 7.20.6.2 div, ldiv, lldiv: DONE ! 7.20.7 Multibyte/wide character conversion functions: TODO ! 7.20.8 Multibyte/wide string conversion functions: TODO 7.21 7.21.2.1 memcpy: DONE 7.21.2.2 memmove: DONE (Unoptimized: byte-by-byte) 7.21.2.3 strcpy: DONE 7.21.2.4 strncpy: DONE 7.21.3.1 strcat: DONE 7.21.3.2 strncat: DONE 7.21.4.1 memcmp: DONE 7.21.4.2 strcmp: DONE 7.21.4.3 strcoll: DONE 7.21.4.4 strncmp: DONE 7.21.4.5 strxfrm: DONE 7.21.5.1 memchr: DONE 7.21.5.2 strchr: DONE 7.21.5.3 strcspn: DONE 7.21.5.4 strpbrk: DONE 7.21.5.5 strrchr: DONE 7.21.5.6 strspn: DONE 7.21.5.7 strstr: DONE 7.21.5.8 strtok: DONE 7.21.6.1 memset: DONE 7.21.6.2 strerror: DONE 7.21.6.3 strlen: DONE Extensions: - strnlen: DONE - strchrnul: DONE - strcasestr: DONE - strcasecmp: DONE - strncasecmp: DONE - strdup: DONE - strndup: DONE 7.22 => GCC 7.23 ! 7.23.1 Components of time: TODO ! 7.23.2.1 clock: TODO ! 7.23.2.2 difftime: TODO ! 7.23.2.3 mktime: TODO ! 7.23.2.4 time: TODO ! 7.23.3.1 asctime: TODO ! 7.23.3.2 ctime: TODO ! 7.23.3.3 gmtime: TODO ! 7.23.3.4 localtime: TODO ! 7.23.3.5 strftime: TODO 7.24 TODO (not a priority) 7.25 TODO (not a priority) # Supporting locales What if we wanted to support more locales? -> Need to a mechanism to supply the raw information, similar to the text files in /usr/share/i18n/locales -> Implement setlocale() and localeconv() properly (not hard) -> Probably support nl_langinfo(), which is much better than localeconv() -> Fix the "TODO: locale: ..." messages wherever assumptions on the locale are made in the code -> Properly implement strcoll() and strxfrm()