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 12 namespace v8 { 13 namespace base { 14 RelativePath(char ** buffer,const char * exec_path,const char * name)15char* RelativePath(char** buffer, const char* exec_path, const char* name) { 16 DCHECK(exec_path); 17 int path_separator = static_cast<int>(strlen(exec_path)) - 1; 18 while (path_separator >= 0 && 19 !OS::isDirectorySeparator(exec_path[path_separator])) { 20 path_separator--; 21 } 22 if (path_separator >= 0) { 23 int name_length = static_cast<int>(strlen(name)); 24 *buffer = 25 reinterpret_cast<char*>(calloc(path_separator + name_length + 2, 1)); 26 *buffer[0] = '\0'; 27 strncat(*buffer, exec_path, path_separator + 1); 28 strncat(*buffer, name, name_length); 29 } else { 30 *buffer = strdup(name); 31 } 32 return *buffer; 33 } 34 35 } // namespace base 36 } // namespace v8 37