Skip to content

Commit

Permalink
[ENV] Optimized BOX64ENV log a bit (#2277)
Browse files Browse the repository at this point in the history
  • Loading branch information
ksco authored Jan 21, 2025
1 parent 044dec0 commit d882a5c
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 2 deletions.
8 changes: 7 additions & 1 deletion src/include/env.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,12 @@
#include <unistd.h>

#define BOX64ENV(name) (box64env.name)
#define SET_BOX64ENV(name, value) { box64env.name = (value); box64env.is_##name##_overridden = 1; }
#define SET_BOX64ENV(name, value) \
{ \
box64env.name = (value); \
box64env.is_any_overridden = 1; \
box64env.is_##name##_overridden = 1; \
}

/*
INTEGER(NAME, name, default, min, max)
Expand Down Expand Up @@ -187,6 +192,7 @@ typedef struct box64env_s {
uintptr_t nodynarec_end;
int dynarec_perf_map_fd;

uint64_t is_any_overridden : 1;
uint64_t is_dynarec_perf_map_fd_overridden : 1;
} box64env_t;

Expand Down
19 changes: 18 additions & 1 deletion src/tools/env.c
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@ static void initializeEnvFile(const char* filename)
int v = strtol(val, &p, 0); \
if (p != val && v >= min && v <= max) { \
current_env.is_##name##_overridden = 1; \
current_env.is_any_overridden = 1; \
current_env.name = v; \
} \
}
Expand All @@ -270,6 +271,7 @@ static void initializeEnvFile(const char* filename)
int64_t v = strtoll(val, &p, 0); \
if (p != val) { \
current_env.is_##name##_overridden = 1; \
current_env.is_any_overridden = 1; \
current_env.name = v; \
} \
}
Expand All @@ -278,9 +280,11 @@ static void initializeEnvFile(const char* filename)
{ \
if (strcmp(val, "0")) { \
current_env.is_##name##_overridden = 1; \
current_env.is_any_overridden = 1; \
current_env.name = 1; \
} else { \
current_env.is_##name##_overridden = 1; \
current_env.is_any_overridden = 1; \
current_env.name = 0; \
} \
}
Expand All @@ -290,13 +294,15 @@ static void initializeEnvFile(const char* filename)
uintptr_t v = (uintptr_t)strtoll(val, &p, 0); \
if (p != val) { \
current_env.is_##name##_overridden = 1; \
current_env.is_any_overridden = 1; \
current_env.name = v; \
} \
}
#define STRING(NAME, name) \
else if (!strcmp(key, #NAME)) \
{ \
current_env.is_##name##_overridden = 1; \
current_env.is_any_overridden = 1; \
if (current_env.name) box_free(current_env.name); \
current_env.name = strdup(val); \
}
Expand Down Expand Up @@ -362,26 +368,31 @@ static void internalEnvFileEntry(const char* entryname, const box64env_t* env)
if (env->is_##name##_overridden) { \
box64env.name = env->name; \
box64env.is_##name##_overridden = 1; \
box64env.is_any_overridden = 1; \
}
#define INTEGER64(NAME, name, default) \
if (env->is_##name##_overridden) { \
box64env.name = env->name; \
box64env.is_##name##_overridden = 1; \
box64env.is_any_overridden = 1; \
}
#define BOOLEAN(NAME, name, default) \
if (env->is_##name##_overridden) { \
box64env.name = env->name; \
box64env.is_##name##_overridden = 1; \
box64env.is_any_overridden = 1; \
}
#define ADDRESS(NAME, name) \
if (env->is_##name##_overridden) { \
box64env.name = env->name; \
box64env.is_##name##_overridden = 1; \
box64env.is_any_overridden = 1; \
}
#define STRING(NAME, name) \
if (env->is_##name##_overridden) { \
box64env.name = env->name; \
box64env.is_##name##_overridden = 1; \
box64env.is_any_overridden = 1; \
}
ENVSUPER()
#undef INTEGER
Expand Down Expand Up @@ -439,31 +450,36 @@ void LoadEnvVariables()
box64env.name = default; \
} else { \
box64env.is_##name##_overridden = 1; \
box64env.is_any_overridden = 1; \
} \
}
#define INTEGER64(NAME, name, default) \
p = getenv(#NAME); \
if (p) { \
box64env.name = atoll(p); \
box64env.is_##name##_overridden = 1; \
box64env.is_any_overridden = 1; \
}
#define BOOLEAN(NAME, name, default) \
p = getenv(#NAME); \
if (p) { \
box64env.name = p[0] != '0'; \
box64env.is_##name##_overridden = 1; \
box64env.is_any_overridden = 1; \
}
#define ADDRESS(NAME, name) \
p = getenv(#NAME); \
if (p) { \
box64env.name = (uintptr_t)atoll(p); \
box64env.is_##name##_overridden = 1; \
box64env.is_any_overridden = 1; \
}
#define STRING(NAME, name) \
p = getenv(#NAME); \
if (p) { \
box64env.name = strdup(p); \
box64env.is_##name##_overridden = 1; \
box64env.is_any_overridden = 1; \
}
ENVSUPER()
#undef INTEGER
Expand All @@ -476,7 +492,8 @@ void LoadEnvVariables()

void PrintEnvVariables()
{
printf_log(LOG_INFO, "BOX64ENV: Variables overridden via env and/or RC file:\n");
if (box64env.is_any_overridden)
printf_log(LOG_INFO, "BOX64ENV: Variables overridden via env and/or RC file:\n");
#define INTEGER(NAME, name, default, min, max) \
if (box64env.is_##name##_overridden) \
printf_log(LOG_INFO, "\t%s=%d\n", #NAME, box64env.name);
Expand Down

0 comments on commit d882a5c

Please sign in to comment.