From: Thomas Hindoe Paaboel Andersen <pho...@gmail.com> The return value from detect_virtualization used to be a Virtualization enum but in cases of error it would also be a negative errno. This caused a warning in clang when test-architecture began comparing the return value to -EPERM and -EACCES. --- src/core/dbus-manager.c | 2 +- src/core/main.c | 2 +- src/detect-virt/detect-virt.c | 6 +++--- src/hostname/hostnamectl.c | 3 ++- src/hostname/hostnamed.c | 2 +- src/shared/condition-util.c | 8 ++++---- src/shared/virt.c | 20 ++++++++++++++------ src/shared/virt.h | 2 +- src/test/test-architecture.c | 5 +++-- 9 files changed, 30 insertions(+), 20 deletions(-)
diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c index 75004cb..f5a06ba 100644 --- a/src/core/dbus-manager.c +++ b/src/core/dbus-manager.c @@ -84,7 +84,7 @@ static int property_get_virtualization( assert(bus); assert(reply); - detect_virtualization(&id); + detect_virtualization(&id, NULL); return sd_bus_message_append(reply, "s", id); } diff --git a/src/core/main.c b/src/core/main.c index 086e283..5facd17 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -1507,7 +1507,7 @@ int main(int argc, char *argv[]) { log_info(PACKAGE_STRING " running in system mode. (" SYSTEMD_FEATURES ")"); - detect_virtualization(&virtualization); + detect_virtualization(&virtualization, NULL); if (virtualization) log_info("Detected virtualization '%s'.", virtualization); diff --git a/src/detect-virt/detect-virt.c b/src/detect-virt/detect-virt.c index 2f8b0eb..698658c 100644 --- a/src/detect-virt/detect-virt.c +++ b/src/detect-virt/detect-virt.c @@ -131,9 +131,9 @@ int main(int argc, char *argv[]) { case ANY_VIRTUALIZATION: { Virtualization v; - v = detect_virtualization(&id); - if (v < 0) { - log_error("Failed to check for virtualization: %s", strerror(-v)); + r = detect_virtualization(&id, &v); + if (r < 0) { + log_error("Failed to check for virtualization: %s", strerror(-r)); return EXIT_FAILURE; } diff --git a/src/hostname/hostnamectl.c b/src/hostname/hostnamectl.c index e455249..2e1e6d7 100644 --- a/src/hostname/hostnamectl.c +++ b/src/hostname/hostnamectl.c @@ -104,7 +104,8 @@ static void print_status_info(StatusInfo *i) { if (r >= 0) printf(" Boot ID: " SD_ID128_FORMAT_STR "\n", SD_ID128_FORMAT_VAL(bid)); - if (detect_virtualization(&id) > 0) + r = detect_virtualization(&id, NULL); + if (r > 0) printf(" Virtualization: %s\n", id); r = parse_env_file("/etc/os-release", NEWLINE, diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c index e57891b..2e36d01 100644 --- a/src/hostname/hostnamed.c +++ b/src/hostname/hostnamed.c @@ -125,7 +125,7 @@ static const char* fallback_chassis(void) { unsigned t; Virtualization v; - v = detect_virtualization(NULL); + r = detect_virtualization(NULL, &v); if (v == VIRTUALIZATION_VM) return "vm"; diff --git a/src/shared/condition-util.c b/src/shared/condition-util.c index 4aea3ca..44feabe 100644 --- a/src/shared/condition-util.c +++ b/src/shared/condition-util.c @@ -121,7 +121,7 @@ bool condition_test_kernel_command_line(Condition *c) { } bool condition_test_virtualization(Condition *c) { - int b; + int b, r; Virtualization v; const char *id; @@ -129,9 +129,9 @@ bool condition_test_virtualization(Condition *c) { assert(c->parameter); assert(c->type == CONDITION_VIRTUALIZATION); - v = detect_virtualization(&id); - if (v < 0) { - log_warning("Failed to detect virtualization, ignoring: %s", strerror(-v)); + r = detect_virtualization(&id, &v); + if (r < 0) { + log_warning("Failed to detect virtualization, ignoring: %s", strerror(-r)); return c->negate; } diff --git a/src/shared/virt.c b/src/shared/virt.c index c79d35d..73ce9ff 100644 --- a/src/shared/virt.c +++ b/src/shared/virt.c @@ -278,20 +278,28 @@ finish: } /* Returns a short identifier for the various VM/container implementations */ -Virtualization detect_virtualization(const char **id) { +int detect_virtualization(const char **id, Virtualization *type) { int r; r = detect_container(id); if (r < 0) return r; - if (r > 0) - return VIRTUALIZATION_CONTAINER; + if (r > 0) { + if (type != NULL) + *type = VIRTUALIZATION_CONTAINER; + return r; + } r = detect_vm(id); if (r < 0) return r; - if (r > 0) - return VIRTUALIZATION_VM; + if (r > 0) { + if (type != NULL) + *type = VIRTUALIZATION_VM; + return r; + } - return VIRTUALIZATION_NONE; + if (type != NULL) + *type = VIRTUALIZATION_NONE; + return 0; } diff --git a/src/shared/virt.h b/src/shared/virt.h index aa6ad35..6c9cb0f 100644 --- a/src/shared/virt.h +++ b/src/shared/virt.h @@ -32,4 +32,4 @@ typedef enum Virtualization { _VIRTUALIZATION_INVALID = -1 } Virtualization; -Virtualization detect_virtualization(const char **id); +int detect_virtualization(const char **id, Virtualization *type); diff --git a/src/test/test-architecture.c b/src/test/test-architecture.c index b586c0d..bc17b15 100644 --- a/src/test/test-architecture.c +++ b/src/test/test-architecture.c @@ -27,10 +27,11 @@ int main(int argc, char *argv[]) { Architecture a; Virtualization v; + int r; const char *id = NULL; - v = detect_virtualization(&id); - if (v == -EPERM || v == -EACCES) + r = detect_virtualization(&id, &v); + if (r == -EPERM || r == -EACCES) return EXIT_TEST_SKIP; assert_se(v >= 0); -- 1.8.5.3 _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel