Use CMake to detect availability of getlogin_r
authorakallabeth <akallabeth@posteo.net>
Fri, 26 Jun 2020 08:57:05 +0000 (10:57 +0200)
committerArmin Novak <armin.novak@thincast.com>
Mon, 6 Jul 2020 09:13:51 +0000 (11:13 +0200)
(cherry picked from commit 3a5bfd2bd0eee134dbac4a98dcb3ed5227a8c6dc)

CMakeLists.txt
channels/rdpdr/client/rdpdr_main.c
client/X11/xf_client.c
config.h.in
winpr/libwinpr/sspicli/sspicli.c

index be4fcbb..90aae3b 100644 (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")
index 98f526d..25c758c 100644 (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)
index 189cb17..2a5569d 100644 (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);
 
index cf8f3f6..7e6fdfd 100644 (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
index 671df6e..0394169 100644 (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)