diff options
-rw-r--r-- | Userland/Libraries/LibC/stdlib.cpp | 7 | ||||
-rw-r--r-- | Userland/Libraries/LibC/stdlib.h | 1 | ||||
-rw-r--r-- | Userland/Libraries/LibCore/System.cpp | 18 |
3 files changed, 11 insertions, 15 deletions
diff --git a/Userland/Libraries/LibC/stdlib.cpp b/Userland/Libraries/LibC/stdlib.cpp index 1cada26c97..687de3a7a3 100644 --- a/Userland/Libraries/LibC/stdlib.cpp +++ b/Userland/Libraries/LibC/stdlib.cpp @@ -472,14 +472,9 @@ int clearenv() // https://pubs.opengroup.org/onlinepubs/9699919799/functions/setenv.html int setenv(char const* name, char const* value, int overwrite) { - return serenity_setenv(name, strlen(name), value, strlen(value), overwrite); -} - -int serenity_setenv(char const* name, ssize_t name_length, char const* value, ssize_t value_length, int overwrite) -{ if (!overwrite && getenv(name)) return 0; - auto const total_length = name_length + value_length + 2; + auto const total_length = strlen(name) + strlen(value) + 2; auto* var = (char*)malloc(total_length); snprintf(var, total_length, "%s=%s", name, value); s_malloced_environment_variables.set((FlatPtr)var); diff --git a/Userland/Libraries/LibC/stdlib.h b/Userland/Libraries/LibC/stdlib.h index eb955ae98b..fbe0b7ca55 100644 --- a/Userland/Libraries/LibC/stdlib.h +++ b/Userland/Libraries/LibC/stdlib.h @@ -32,7 +32,6 @@ int serenity_putenv(char const* new_var, size_t length); int unsetenv(char const*); int clearenv(void); int setenv(char const* name, char const* value, int overwrite); -int serenity_setenv(char const* name, ssize_t name_length, char const* value, ssize_t value_length, int overwrite); char const* getprogname(void); void setprogname(char const*); int atoi(char const*); diff --git a/Userland/Libraries/LibCore/System.cpp b/Userland/Libraries/LibCore/System.cpp index 8fbda2e159..758881db8f 100644 --- a/Userland/Libraries/LibCore/System.cpp +++ b/Userland/Libraries/LibCore/System.cpp @@ -1430,15 +1430,17 @@ ErrorOr<void> mkfifo(StringView pathname, mode_t mode) ErrorOr<void> setenv(StringView name, StringView value, bool overwrite) { -#ifdef AK_OS_SERENITY - auto const rc = ::serenity_setenv(name.characters_without_null_termination(), name.length(), value.characters_without_null_termination(), value.length(), overwrite); -#else - DeprecatedString name_string = name; - DeprecatedString value_string = value; - auto const rc = ::setenv(name_string.characters(), value_string.characters(), overwrite); -#endif + auto builder = TRY(StringBuilder::create()); + TRY(builder.try_append(name)); + TRY(builder.try_append('\0')); + TRY(builder.try_append(value)); + TRY(builder.try_append('\0')); + // Note the explicit null terminators above. + auto c_name = builder.string_view().characters_without_null_termination(); + auto c_value = c_name + name.length() + 1; + auto rc = ::setenv(c_name, c_value, overwrite); if (rc < 0) - return Error::from_syscall("setenv"sv, -errno); + return Error::from_errno(errno); return {}; } |