Use CMake to detect availability of getlogin_r

This commit is contained in:
akallabeth 2020-06-26 10:57:05 +02:00 committed by akallabeth
parent f25fbaee9c
commit b971c5c97f
5 changed files with 15 additions and 3 deletions

View File

@ -671,6 +671,10 @@ if(UNIX OR CYGWIN)
list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES m)
set(X11_FEATURE_TYPE "RECOMMENDED")
set(WAYLAND_FEATURE_TYPE "RECOMMENDED")
include(CheckFunctionExists)
check_function_exists(getlogin_r HAVE_GETLOGIN_R)
else()
set(X11_FEATURE_TYPE "DISABLED")
set(WAYLAND_FEATURE_TYPE "DISABLED")

View File

@ -600,7 +600,7 @@ static BOOL isAutomountLocation(const char* path)
uid_t uid = getuid();
char uname[MAX_PATH] = { 0 };
#ifndef getlogin_r
#ifndef HAVE_GETLOGIN_R
strncpy(uname, getlogin(), sizeof(uname));
#else
if (getlogin_r(uname, sizeof(uname)) != 0)

View File

@ -1181,9 +1181,16 @@ static BOOL xf_pre_connect(freerdp* instance)
if (!settings->Username && !settings->CredentialsFromStdin && !settings->SmartcardLogon)
{
int rc;
char login_name[MAX_PATH] = { 0 };
if (getlogin_r(login_name, sizeof(login_name)) == 0)
#ifdef HAVE_GETLOGIN_R
rc = getlogin_r(login_name, sizeof(login_name));
#else
strncpy(login_name, getlogin(), sizeof(login_name));
rc = 0;
#endif
if (rc == 0)
{
settings->Username = _strdup(login_name);

View File

@ -24,6 +24,7 @@
#cmakedefine HAVE_PTHREAD_MUTEX_TIMEDLOCK
#cmakedefine HAVE_VALGRIND_MEMCHECK_H
#cmakedefine HAVE_EXECINFO_H
#cmakedefine HAVE_GETLOGIN_R
/* Features */
#cmakedefine SWRESAMPLE_FOUND

View File

@ -206,7 +206,7 @@ BOOL GetUserNameExA(EXTENDED_NAME_FORMAT NameFormat, LPSTR lpNameBuffer, PULONG
switch (NameFormat)
{
case NameSamCompatible:
#ifndef getlogin_r
#ifndef HAVE_GETLOGIN_R
strncpy(login, getlogin(), sizeof(login));
#else
if (getlogin_r(login, sizeof(login)) != 0)