+bool
+os_variant_is_darwinos(const char * __unused subsystem)
+{
+
+#if TARGET_OS_IPHONE
+ return _check_darwin_release_type();
+#else
+ return false;
+#endif
+}
+
+bool
+os_variant_is_recovery(const char * __unused subsystem)
+{
+#if TARGET_OS_IPHONE
+ return _check_recovery_release_type();
+#else
+ return _check_base_system_content();
+#endif
+}
+
+bool
+os_variant_uses_ephemeral_storage(const char * __unused subsystem)
+{
+ if (is_ephemeral == S_UNKNOWN) {
+ uint32_t buffer = 0;
+ size_t buffer_size = sizeof(buffer);
+
+ sysctlbyname("hw.ephemeral_storage", (void *)&buffer, &buffer_size, NULL, 0);
+
+ is_ephemeral = (buffer != 0) ? S_YES : S_NO;
+ }
+
+ return status2bool(is_ephemeral);
+}
+
+bool
+os_variant_check(const char * __unused subsystem, const char *variant)
+{
+ static const variant_check_mapping map[] = {
+ {.variant = "HasInternalContent", .function = os_variant_has_internal_content},
+ {.variant = "HasInternalDiagnostics", .function = os_variant_has_internal_diagnostics},
+ {.variant = "HasInternalUI", .function = os_variant_has_internal_ui},
+ {.variant = "AllowsInternalSecurityPolicies", .function = os_variant_allows_internal_security_policies},
+ {.variant = "HasFactoryContent", .function = os_variant_has_factory_content},
+ {.variant = "IsDarwinOS", .function = os_variant_is_darwinos},
+ {.variant = "UsesEphemeralStorage", .function = os_variant_uses_ephemeral_storage},
+ {.variant = "IsRecovery", .function = os_variant_is_recovery},
+ {.variant = NULL, .function = NULL}
+ };
+ variant_check_mapping *current = (variant_check_mapping *)map;
+
+ while (current->variant) {
+ if (0 == strncasecmp(current->variant, variant, strlen(current->variant))) {
+ return current->function("");
+ }
+ current ++;
+ }
+
+ return false;
+}
+