From bbad0d9d9d6b0a0ae014b52bcf0dc8d0c91d35ab Mon Sep 17 00:00:00 2001 From: Rom Walton Date: Tue, 22 Sep 2015 10:24:01 -0400 Subject: [PATCH] client: VirtualBox now installs VboxManage to /usr/local/bin. Make detection of VirtualBox work again. --- client/hostinfo_unix.cpp | 54 +++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/client/hostinfo_unix.cpp b/client/hostinfo_unix.cpp index 6f0442ed19..7e47237bcf 100644 --- a/client/hostinfo_unix.cpp +++ b/client/hostinfo_unix.cpp @@ -1224,33 +1224,47 @@ bool isDualGPUMacBook() { // see if Virtualbox is installed // +static const struct dir_vbox_locations { + const char *dir; +} vbox_locations[] = { + { "/usr/bin/VboxManage" }, + { "/usr/local/bin/VboxManage" }, + // add other ifdefs here as necessary. + { NULL }, +}; + int HOST_INFO::get_virtualbox_version() { char path[MAXPATHLEN]; char cmd [MAXPATHLEN+35]; char buf[256]; + int i = 0; FILE* fd; - safe_strcpy(path, "/usr/bin/VBoxManage"); + do { + safe_strcpy(path, vbox_locations[i].dir); - if (boinc_file_exists(path)) { - if (access(path, X_OK)) { - return 0; - } - safe_strcpy(cmd, path); - safe_strcat(cmd, " --version"); - fd = popen(cmd, "r"); - if (fd) { - if (fgets(buf, sizeof(buf), fd)) { - strip_whitespace(buf); - int n, a,b,c; - n = sscanf(buf, "%d.%d.%d", &a, &b, &c); - if (n == 3) { - strcpy(virtualbox_version, buf); - } - } - pclose(fd); - } - } + if (boinc_file_exists(path)) { + if (access(path, X_OK)) { + return 0; + } + safe_strcpy(cmd, path); + safe_strcat(cmd, " --version"); + fd = popen(cmd, "r"); + if (fd) { + if (fgets(buf, sizeof(buf), fd)) { + strip_whitespace(buf); + int n, a,b,c; + n = sscanf(buf, "%d.%d.%d", &a, &b, &c); + if (n == 3) { + strcpy(virtualbox_version, buf); + } + } + pclose(fd); + } + } + + ++i; + } while (vbox_locations[i].dir != NULL); return 0; }