diff --git a/flang/runtime/extensions.cpp b/flang/runtime/extensions.cpp --- a/flang/runtime/extensions.cpp +++ b/flang/runtime/extensions.cpp @@ -57,7 +57,13 @@ void FORTRAN_PROCEDURE_NAME(getarg)( // CALL GETLOG(USRNAME) void FORTRAN_PROCEDURE_NAME(getlog)(std::byte *arg, std::int64_t length) { #if _REENTRANT || _POSIX_C_SOURCE >= 199506L - const int nameMaxLen{LOGIN_NAME_MAX + 1}; +#ifdef LOGIN_NAME_MAX + int nameMaxLen{LOGIN_NAME_MAX + 1}; +#else + int nameMaxLen = sysconf(_SC_LOGIN_NAME_MAX) + 1; + if (nameMaxLen == -1) + nameMaxLen = _POSIX_LOGIN_NAME_MAX + 1; +#endif char str[nameMaxLen]; int error{getlogin_r(str, nameMaxLen)}; diff --git a/flang/unittests/Runtime/CommandTest.cpp b/flang/unittests/Runtime/CommandTest.cpp --- a/flang/unittests/Runtime/CommandTest.cpp +++ b/flang/unittests/Runtime/CommandTest.cpp @@ -527,7 +527,13 @@ TEST_F(EnvironmentVariables, GetlogGetNa #if _REENTRANT || _POSIX_C_SOURCE >= 199506L TEST_F(EnvironmentVariables, GetlogPadSpace) { // guarantee 1 char longer than max, last char should be pad space - const int charLen{LOGIN_NAME_MAX + 2}; +#ifdef LOGIN_NAME_MAX + int charLen{LOGIN_NAME_MAX + 2}; +#else + int charLen = sysconf(_SC_LOGIN_NAME_MAX) + 2; + if (charLen == -1) + charLen = _POSIX_LOGIN_NAME_MAX + 2; +#endif char input[charLen]; FORTRAN_PROCEDURE_NAME(getlog)