Checking the presence of the traditional data directory using stat()
leads to a time-of-check / time-of-use bug by the time it is possibly
created using xmkdir(). Use file descriptors and openat() to work around
this problem.
A series of emails with Santiago Vila in May to July 2018 strongly
recommended this option: Francisco's translation is unfortunately of very
poor quality, and although Santiago hoped to provide his own, he has not
been able to do so to date. A new or significantly revised translation
can always be added at a later date.
The reStructuredText (ReST) format is still quite readable as raw text,
and is much more capable than the myriad all-slightly-incompatible
variants of Markdown.
Current and previous versions of ISO/IEC 9945-1 (POSIX), particularly SUSv3
(2001) and SUSv4 (2008), require strfmon() to return rather meaningless
strings when used with the POSIX "C" locale. In particular, the standard
POSIX locale does not define a currency symbol, a monetary radix symbol
(decimal point) or a negative sign. This means strfmon(..., "%n", -123.45)
is supposed to produce "12345" instead of something like "$-123.45"!
The new xstrfmon() overcomes these limitations by using snprintf() as
appropriate.
The Minix C library does not seem to support Unicode well (for example,
wcwidth() returns -1 for UTF-8 byte sequences), the native curses library
is quite buggy, playing around with the Gnulib wcwidth module did not fix
issues with Unicode--it's all in the "too hard" basket!
Note that although Star Traders compiles and installs successfully,
running the binary with a locale set to use non-ASCII strings currently
fails with "mkchstr: 'STRING': Illegal byte sequence" ("STRING" being the
translated string).