diff --git a/flang/runtime/extensions.cpp b/flang/runtime/extensions.cpp index 8fc132aeff4ee..f72acf83a4409 100644 --- a/flang/runtime/extensions.cpp +++ b/flang/runtime/extensions.cpp @@ -100,7 +100,14 @@ 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}; + int nameMaxLen; +#ifdef LOGIN_NAME_MAX + nameMaxLen = LOGIN_NAME_MAX + 1; +#else + 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 index 30574dcbdda19..668a3508653e4 100644 --- a/flang/unittests/Runtime/CommandTest.cpp +++ b/flang/unittests/Runtime/CommandTest.cpp @@ -691,7 +691,14 @@ TEST_F(EnvironmentVariables, GetlogGetName) { #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}; + int charLen; +#ifdef LOGIN_NAME_MAX + charLen = LOGIN_NAME_MAX + 2; +#else + charLen = sysconf(_SC_LOGIN_NAME_MAX) + 2; + if (charLen == -1) + charLen = _POSIX_LOGIN_NAME_MAX + 2; +#endif char input[charLen]; FORTRAN_PROCEDURE_NAME(getlog)