path_join Function

public function path_join(path1, path2) result(joined_path)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: path1
character(len=*), intent(in) :: path2

Return Value character(len=:), allocatable


Source Code

    function path_join(path1, path2) result(joined_path)
        character(len=*), intent(in) :: path1, path2
        character(len=:), allocatable :: joined_path

        if (len_trim(path1) == 0) then
            joined_path = trim(path2)
        else if (len_trim(path2) == 0) then
            joined_path = trim(path1)
        else if (path2(1:1) == '/' .or. (len(path2) >= 2 .and. path2(2:2) == ':')) then
            ! path2 is absolute (Unix or Windows C:\...)
            joined_path = trim(path2)
        else
            ! Join with separator
            if (get_os_type() == OS_WINDOWS) then
                if (path1(len_trim(path1):len_trim(path1)) == '/' .or. &
                    path1(len_trim(path1):len_trim(path1)) == '\') then
                    joined_path = trim(path1)//trim(path2)
                else
                    joined_path = join_path(trim(path1), trim(path2))
                end if
            else
                if (path1(len_trim(path1):len_trim(path1)) == '/') then
                    joined_path = trim(path1)//trim(path2)
                else
                    joined_path = join_path(trim(path1), trim(path2))
                end if
            end if
        end if

    end function path_join