1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "src/base/file-utils.h"
6 
7 #include <stdlib.h>
8 #include <string.h>
9 
10 #include "src/base/platform/platform.h"
11 #include "src/base/platform/wrappers.h"
12 
13 namespace v8 {
14 namespace base {
15 
RelativePath(const char* exec_path, const char* name)16 std::unique_ptr<char[]> RelativePath(const char* exec_path, const char* name) {
17   DCHECK(exec_path);
18   size_t basename_start = strlen(exec_path);
19   while (basename_start > 0 &&
20          !OS::isDirectorySeparator(exec_path[basename_start - 1])) {
21     --basename_start;
22   }
23   size_t name_length = strlen(name);
24   auto buffer = std::make_unique<char[]>(basename_start + name_length + 1);
25   if (basename_start > 0) memcpy(buffer.get(), exec_path, basename_start);
26   memcpy(buffer.get() + basename_start, name, name_length);
27   return buffer;
28 }
29 
30 }  // namespace base
31 }  // namespace v8
32