create_directories Subroutine

public subroutine create_directories(path, status)

Recursively create a directory path without invoking a shell.

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: path
integer, intent(out) :: status

Called by

proc~~create_directories~~CalledByGraph proc~create_directories create_directories proc~ensure_output_dir ensure_output_dir proc~ensure_output_dir->proc~create_directories proc~precompute_periodic_root_operator precompute_periodic_root_operator proc~precompute_periodic_root_operator->proc~create_directories proc~core_build_panel_plan_impl core_build_panel_plan_impl proc~core_build_panel_plan_impl->proc~precompute_periodic_root_operator proc~core_build_plan_impl core_build_plan_impl proc~core_build_plan_impl->proc~precompute_periodic_root_operator proc~maybe_write_periodic_checkpoint maybe_write_periodic_checkpoint proc~maybe_write_periodic_checkpoint->proc~ensure_output_dir proc~write_checkpoint_state_files write_checkpoint_state_files proc~maybe_write_periodic_checkpoint->proc~write_checkpoint_state_files proc~write_checkpoint_state_files->proc~ensure_output_dir proc~write_result_files write_result_files proc~write_result_files->proc~ensure_output_dir program~main main program~main->proc~ensure_output_dir program~main->proc~write_result_files

Source Code

  subroutine create_directories(path, status)
    character(len=*), intent(in) :: path
    integer, intent(out) :: status

    integer :: i, path_length

    status = filesystem_success
    path_length = len_trim(path)
    if (path_length == 0) then
      status = filesystem_empty_path
      return
    end if

    do i = 1, path_length
      if (path(i:i) /= '/') cycle
      if (i <= 1) cycle
      call create_one_directory(path(:i - 1), status)
      if (status /= filesystem_success) return
    end do

    call create_one_directory(path(:path_length), status)
  end subroutine create_directories