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)16std::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