1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
#include <aws/common/private/system_info_priv.h>
#include <aws/common/logging.h>
void s_destroy_env(void *arg) {
struct aws_system_environment *env = arg;
if (env) {
aws_system_environment_destroy_platform_impl(env);
aws_mem_release(env->allocator, env);
}
}
struct aws_system_environment *aws_system_environment_load(struct aws_allocator *allocator) {
struct aws_system_environment *env = aws_mem_calloc(allocator, 1, sizeof(struct aws_system_environment));
env->allocator = allocator;
aws_ref_count_init(&env->ref_count, env, s_destroy_env);
if (aws_system_environment_load_platform_impl(env)) {
AWS_LOGF_ERROR(
AWS_LS_COMMON_GENERAL,
"id=%p: failed to load system environment with error %s.",
(void *)env,
aws_error_debug_str(aws_last_error()));
goto error;
}
AWS_LOGF_TRACE(
AWS_LS_COMMON_GENERAL,
"id=%p: virtualization vendor detected as \"" PRInSTR "\"",
(void *)env,
AWS_BYTE_CURSOR_PRI(aws_system_environment_get_virtualization_vendor(env)));
AWS_LOGF_TRACE(
AWS_LS_COMMON_GENERAL,
"id=%p: virtualization product name detected as \"" PRInSTR " \"",
(void *)env,
AWS_BYTE_CURSOR_PRI(aws_system_environment_get_virtualization_vendor(env)));
env->os = aws_get_platform_build_os();
env->cpu_count = aws_system_info_processor_count();
env->cpu_group_count = aws_get_cpu_group_count();
return env;
error:
s_destroy_env(env);
return NULL;
}
struct aws_system_environment *aws_system_environment_acquire(struct aws_system_environment *env) {
aws_ref_count_acquire(&env->ref_count);
return env;
}
void aws_system_environment_release(struct aws_system_environment *env) {
aws_ref_count_release(&env->ref_count);
}
struct aws_byte_cursor aws_system_environment_get_virtualization_vendor(const struct aws_system_environment *env) {
struct aws_byte_cursor vendor_string = aws_byte_cursor_from_buf(&env->virtualization_vendor);
return aws_byte_cursor_trim_pred(&vendor_string, aws_char_is_space);
}
struct aws_byte_cursor aws_system_environment_get_virtualization_product_name(
const struct aws_system_environment *env) {
struct aws_byte_cursor product_name_str = aws_byte_cursor_from_buf(&env->product_name);
return aws_byte_cursor_trim_pred(&product_name_str, aws_char_is_space);
}
size_t aws_system_environment_get_processor_count(struct aws_system_environment *env) {
return env->cpu_count;
}
AWS_COMMON_API
size_t aws_system_environment_get_cpu_group_count(const struct aws_system_environment *env) {
return env->cpu_group_count;
}
|