From 4cac49038c48f060913024e7cb32695a34eb316c Mon Sep 17 00:00:00 2001 From: apio Date: Fri, 7 Apr 2023 12:11:28 +0200 Subject: [PATCH] sh: Use StringBuilder instead of C-like manual joining --- apps/sh.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/apps/sh.cpp b/apps/sh.cpp index 05926f63..7a8d1a45 100644 --- a/apps/sh.cpp +++ b/apps/sh.cpp @@ -1,3 +1,4 @@ +#include #include #include @@ -30,21 +31,23 @@ static Result> split_command_into_argv(const char* cmd) return result; } -static char* join_path(const char* str1, const char* str2) +static Result join_path(const char* str1, const char* str2) { - char* buf = (char*)malloc(strlen(str1) + strlen(str2) + 1); - strlcpy(buf, str1, strlen(str1) + 1); - strncat(buf, str2, strlen(str2)); - return buf; + StringBuilder sb; + TRY(sb.add(StringView { str1 })); + TRY(sb.add(StringView { str2 })); + return sb.string(); } static int execute_in_path(const char* dir, char** argv) { - char* path = join_path(dir, argv[0]); + String path; + bool ok = join_path(dir, argv[0]).try_move_value_or_error(path, errno); + if (!ok) return -1; + int err = errno; - int status = execv(path, argv); - free(path); + int status = execv(path.chars(), argv); if (errno == ENOENT) {