1!
2! Copyright (C) by Argonne National Laboratory
3!     See COPYRIGHT in top-level directory
4!
5
6subroutine MPI_Info_get_valuelen_f08(info, key, valuelen, flag, ierror)
7    use, intrinsic :: iso_c_binding, only : c_int, c_char
8    use :: mpi_f08, only : MPI_Info
9    use :: mpi_c_interface, only : c_Info
10    use :: mpi_c_interface, only : MPIR_Info_get_valuelen_c
11    use :: mpi_c_interface, only : MPIR_Fortran_string_f2c
12
13    implicit none
14
15    type(MPI_Info), intent(in) :: info
16    character(len=*), intent(in) :: key
17    integer, intent(out) :: valuelen
18    logical, intent(out) :: flag
19    integer, optional, intent(out) :: ierror
20
21    integer(c_Info) :: info_c
22    character(kind=c_char) :: key_c(len_trim(key)+1)
23    integer(c_int) :: valuelen_c
24    integer(c_int) :: flag_c
25    integer(c_int) :: ierror_c
26
27    call MPIR_Fortran_string_f2c(key, key_c)
28
29    if (c_int == kind(0)) then
30        ierror_c = MPIR_Info_get_valuelen_c(info%MPI_VAL, key_c, valuelen_c, flag_c)
31    else
32        info_c = info%MPI_VAL
33        ierror_c = MPIR_Info_get_valuelen_c(info_c, key_c, valuelen_c, flag_c)
34    end if
35
36    flag = (flag_c /= 0)
37
38    if (flag) valuelen = valuelen_c
39    if (present(ierror)) ierror = ierror_c
40
41end subroutine MPI_Info_get_valuelen_f08
42