Loading...
--- libmalloc/libmalloc-715.120.13/src/nano_malloc_common.c
+++ libmalloc/libmalloc-425.100.7/src/nano_malloc_common.c
@@ -54,59 +54,6 @@
#pragma mark -
#pragma mark Initialization
-nano_version_t
-_nano_common_init_pick_mode(const char *envp[], const char *apple[], const char *bootargs, bool space_efficient_enabled)
-{
- const char *p = NULL;
- const char *flag = NULL;
- nano_version_t ret = NANO_NONE;
-
- // Use the nanov2_mode boot argument and MallocNanoZone to determine
- // whether to use nano
- nanov2_mode_t nanov2_mode = NANOV2_DEFAULT_MODE;
-
- p = malloc_common_value_for_key(bootargs, mode_boot_arg);
- if (p) {
- if (!strncmp(p, enabled_mode, sizeof(enabled_mode) - 1)) {
- nanov2_mode = NANO_ENABLED;
- } else if (!strncmp(p, forced_mode, sizeof(forced_mode) - 1)) {
- nanov2_mode = NANO_FORCED;
- } else if (!strncmp(p, conditional_mode, sizeof(conditional_mode) - 1)) {
- nanov2_mode = NANO_CONDITIONAL;
- }
- }
-
- if (nanov2_mode == NANO_FORCED) {
- ret = NANO_V2;
- } else {
- if (nanov2_mode == NANO_CONDITIONAL) {
- // If conditional mode is selected, ignore the apple[] array and
- // make the decision based of space efficient mode.
- ret = space_efficient_enabled ? NANO_NONE : NANO_V2;
- } else {
- flag = _simple_getenv(apple, "MallocNanoZone");
- if (flag && flag[0] == '1') {
- ret = NANO_V2;
- }
- }
- /* Explicit overrides from the environment */
- flag = _simple_getenv(envp, "MallocNanoZone");
- if (flag) {
- if (flag[0] == '1') {
- ret = NANO_V2;
- } else if (flag[0] == '0') {
- ret = NANO_NONE;
- } else if (flag[0] == 'V' || flag[0] == 'v') {
- if (flag[1] == '1' || flag[1] == '2') {
- ret = NANO_V2;
- }
- }
- }
- }
-
- return ret;
-}
-
// Shared initialization code. Determines which version of Nano should be used,
// if any, and sets _malloc_engaged_nano. The Nano version is determined as
// follows:
@@ -117,11 +64,54 @@
void
nano_common_init(const char *envp[], const char *apple[], const char *bootargs)
{
- _malloc_engaged_nano = _nano_common_init_pick_mode(envp, apple, bootargs, malloc_space_efficient_enabled);
-
+ const char *flag = NULL;
+ const char *p = NULL;
+
+ // Use the nanov2_mode boot argument and MallocNanoZone to determine
+ // whether to use nano
+ nanov2_mode_t nanov2_mode = NANOV2_DEFAULT_MODE;
+
+ p = malloc_common_value_for_key(bootargs, mode_boot_arg);
+ if (p) {
+ if (!strncmp(p, enabled_mode, sizeof(enabled_mode) - 1)) {
+ nanov2_mode = NANO_ENABLED;
+ } else if (!strncmp(p, forced_mode, sizeof(forced_mode) - 1)) {
+ nanov2_mode = NANO_FORCED;
+ } else if (!strncmp(p, conditional_mode, sizeof(conditional_mode) - 1)) {
+ nanov2_mode = NANO_CONDITIONAL;
+ }
+ }
+
+ if (nanov2_mode == NANO_FORCED) {
+ _malloc_engaged_nano = NANO_V2;
+ } else {
+ if (nanov2_mode == NANO_CONDITIONAL) {
+ // If conditional mode is selected, ignore the apple[] array and
+ // make the decision based of space efficient mode.
+ _malloc_engaged_nano = malloc_space_efficient_enabled ? NANO_NONE : NANO_V2;
+ } else {
+ flag = _simple_getenv(apple, "MallocNanoZone");
+ if (flag && flag[0] == '1') {
+ _malloc_engaged_nano = NANO_V2;
+ }
+ }
+ /* Explicit overrides from the environment */
+ flag = _simple_getenv(envp, "MallocNanoZone");
+ if (flag) {
+ if (flag[0] == '1') {
+ _malloc_engaged_nano = NANO_V2;
+ } else if (flag[0] == '0') {
+ _malloc_engaged_nano = NANO_NONE;
+ } else if (flag[0] == 'V' || flag[0] == 'v') {
+ if (flag[1] == '1' || flag[1] == '2') {
+ _malloc_engaged_nano = NANO_V2;
+ }
+ }
+ }
+ }
#if NANOV2_MULTIPLE_REGIONS
// Override max region number from environment
- const char *p = malloc_common_value_for_key(bootargs, "malloc_nano_max_region");
+ p = malloc_common_value_for_key(bootargs, "malloc_nano_max_region");
if (p) {
long value = strtol(p, NULL, 10);
if (value) {
@@ -135,7 +125,7 @@
}
}
}
- const char *flag = _simple_getenv(envp, "MallocNanoMaxRegion");
+ flag = _simple_getenv(envp, "MallocNanoMaxRegion");
if (flag) {
long value = strtol(flag, NULL, 10);
if (value) {