Since Cygwin has SG_WINDOWS defined but is likely to expose a POSIX or
GNU-like interface, using _WIN32 to decide whether Windows-specific
functions are available seems more appropriate than SG_WINDOWS to me.
strutils_test.cxx uses std::string but doesn't include <string>
directly. This doesn't cause any error because it includes this header
indirectly via "strutils.hxx". However, I believe relying on this is bad
practice, hence the tiny fix.
Uses:
- strerror_s() on Windows;
- the GNU strerror_r() on non-Windows systems where _GNU_SOURCE is
defined (which is currently the case when the GNU libstdc++ is used,
even if one doesn't explicitely define _GNU_SOURCE, cf.
<https://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.predefined>);
- the XSI-compliant strerror_r() on other systems, as long as
_POSIX_C_SOURCE >= 200112L (otherwise, the compilation will abort
due to a #error preprocessor instruction).