interface
     function c_getcwd (buf, size) bind(C,name="getcwd") result(r)
       import
       type(c_ptr) :: r
       character(kind=c_char), dimension(*), intent(out) :: buf
       integer(kind=c_size_t), value :: size
     end function c_getcwd
  end interface
    if (c_associated(c_getcwd (buf, size(buf,kind=c_size_t)))) then
       n = findloc(buf,achar(0),1)
       allocate (character(len=n-1) :: dir)
       dir(1:n-1) = transfer(buf(1:n-1),dir(1:n-1))
    end if