qemu-ga: check if utmpx.h is available on the system

Commit 161a56a906 added command guest-get-users and requires the
utmpx.h (defined by POSIX) to work. It is however not always available
(e.g. on OpenBSD) therefor a check for its existence is necessary.

Signed-off-by: Tomáš Golembiovský <tgolembi@redhat.com>
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
Tomáš Golembiovský 2017-07-17 15:58:33 +02:00 committed by Michael Roth
parent f2dce827f5
commit e674605f98
2 changed files with 35 additions and 1 deletions

19
configure vendored
View File

@ -4914,6 +4914,21 @@ if compile_prog "" "" ; then
have_static_assert=yes
fi
##########################################
# check for utmpx.h, it is missing e.g. on OpenBSD
have_utmpx=no
cat > $TMPC << EOF
#include <utmpx.h>
struct utmpx user_info;
int main(void) {
return 0;
}
EOF
if compile_prog "" "" ; then
have_utmpx=yes
fi
##########################################
# End of CC checks
# After here, no more $cc or $ld runs
@ -5959,6 +5974,10 @@ if test "$have_static_assert" = "yes" ; then
echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
fi
if test "$have_utmpx" = "yes" ; then
echo "HAVE_UTMPX=y" >> $config_host_mak
fi
# Hold two types of flag:
# CONFIG_THREAD_SETNAME_BYTHREAD - we've got a way of setting the name on
# a thread we have a handle to

View File

@ -15,7 +15,6 @@
#include <sys/ioctl.h>
#include <sys/wait.h>
#include <dirent.h>
#include <utmpx.h>
#include "qga/guest-agent-core.h"
#include "qga-qmp-commands.h"
#include "qapi/qmp/qerror.h"
@ -25,6 +24,10 @@
#include "qemu/base64.h"
#include "qemu/cutils.h"
#ifdef HAVE_UTMPX
#include <utmpx.h>
#endif
#ifndef CONFIG_HAS_ENVIRON
#ifdef __APPLE__
#include <crt_externs.h>
@ -2519,6 +2522,8 @@ void ga_command_state_init(GAState *s, GACommandState *cs)
#endif
}
#ifdef HAVE_UTMPX
#define QGA_MICRO_SECOND_TO_SECOND 1000000
static double ga_get_login_time(struct utmpx *user_info)
@ -2577,3 +2582,13 @@ GuestUserList *qmp_guest_get_users(Error **err)
g_hash_table_destroy(cache);
return head;
}
#else
GuestUserList *qmp_guest_get_users(Error **errp)
{
error_setg(errp, QERR_UNSUPPORTED);
return NULL;
}
#endif