ciabatta/todo.md

2.7 KiB

general:

  • Start writing documentation concerning various implementation defined behaviours of the library.
  • (MSVC Ext.) Different kinds of main functions: wmain, WinMain, wWinMain, DllMain
  • (MSVC Ext.) envp argument for main functions

math.h:

  • exp
  • exp2
  • expml
  • log
  • log10
  • log2
  • log1p
  • pow
  • cbrt
  • hypot
  • atan2
  • erf
  • erfc
  • tgamma
  • lgamma
  • frexp
  • ldexp
  • M_* constants
  • M_E
  • M_LOG2
  • M_LOG10
  • other stuff?

stdint.h:

  • Implement 7.20.3

stdio.h:

  • The only reason to keep a linked list of all streams is to make sure they are flushed after main() returns. I wonder if only remembering the files with a buffer would increase performance.
  • Formatted scan
  • %s precision should specify how much characters to write
  • %s check for NULL
  • %Ls this is an actual weird territory. If (wchar_t *) is a unicode string then to determine it's "width" (to figure out field padding) would require to use a Unicode composition algorithm. But the problem is that windows Unicode rendering advances text by 2 units, even if it's 1 graphical character that was composed from 2 unicode characters. The question becomes: do we implement the thing correctly by using a more complex solution, or do we succumb to windows' bullshittery. I guess the answer is obvious. That's why I wrote this todo item :D
  • tmpfile
  • tmpnam
  • tmpfile_s
  • tmpnam_s
  • Printing 8.98846567431157854073e+307
  • Printing negative zero
  • Add functions for testing a file path, creating directories
  • Fix the bug where if a file wasn't closed the thing crashes when trying to flush the buffer

stdlib.h:

  • Strtod base 16 must be correctly rounded
  • Multibyte string functions
  • Better PRNG
  • Fix aligned_malloc
  • Constraint Handlers
  • getenv_s
  • aligned_alloc can't be used with free()

string.h:

  • strnlen_s
  • memset_s
  • memmove_s
  • memcpy_s
  • strncpy_s
  • strcpy_s
  • strcat_s
  • strncat_s
  • strtok_s
  • strerror_s
  • strerrorlen_s

tgmath.h:

  • Due to the use of conditional operator in type-generic macros the expression always expands to the value of type long double. This leads to warnings when used with printf, e.g. as in printf("%f\n", exp(0)). Using _Generic macros isn't a good choice either, because it won't work with typedef'd types. In other words there's no pure-C way to do tgmath.h. That's probably the reason msvc stdlib headers don't implement tgmath.h. clang implements it with attribute((overloadable)).

threads.h:

  • TODO: add todo items

time.h:

  • Probably some other funcs
  • asctime_s
  • ctime_s
  • gmtime_s
  • localtime_s

wchar.h:

  • Collation, IO, Tokenization, Conversions