X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Fvirt.c;h=1299a75ed54d242ef9b93964b7a24dfe302fff9c;hp=712523210d7202d6d755bfb8e8591217989c04c2;hb=8eb444001b790b0c16369ceb1420afde4c1e5b24;hpb=db6a86897efb337100165c017da81cc70fac51e2 diff --git a/src/shared/virt.c b/src/shared/virt.c index 712523210..1299a75ed 100644 --- a/src/shared/virt.c +++ b/src/shared/virt.c @@ -24,6 +24,7 @@ #include #include "util.h" +#include "process-util.h" #include "virt.h" #include "fileio.h" @@ -115,6 +116,23 @@ static int detect_vm_devicetree(const char **_id) { *_id = "xen"; return 1; } + } else if (r == -ENOENT) { + _cleanup_closedir_ DIR *dir = NULL; + struct dirent *dent; + + dir = opendir("/proc/device-tree"); + if (!dir) { + if (errno == ENOENT) + return 0; + return -errno; + } + + FOREACH_DIRENT(dent, dir, return -errno) { + if (strstr(dent->d_name, "fw-cfg")) { + *_id = "qemu"; + return 1; + } + } } #endif return 0;