      TYPE, BIND(C) :: space_t
         INTEGER(hsize_t) :: total ! Total space for storing object header in file
         INTEGER(hsize_t) :: meta  ! Space within header for object header metadata
                                   ! information
         INTEGER(hsize_t) :: mesg  ! Space within header for actual message
                                   ! information
         INTEGER(hsize_t) :: free  ! Free space within object header
      END TYPE space_t

      TYPE, BIND(C) :: mesg_t
         INTEGER(c_int64_t) :: present ! Flags to indicate presence of message type
                                       ! in header
         INTEGER(c_int64_t) :: shared  ! Flags to indicate message type is shared
                                       ! in header
      END TYPE mesg_t

      TYPE, BIND(C) :: hdr_t
         INTEGER :: version ! Version number of header format in file
         INTEGER :: nmesgs  ! Number of object header messages
         INTEGER :: nchunks ! Number of object header chunks
         INTEGER :: flags   ! Object header status flags
         TYPE(space_t)  :: space
         TYPE(mesg_t)   :: mesg
      END TYPE hdr_t

      ! Extra metadata storage for obj & attributes
      TYPE, BIND(C) :: H5_ih_info_t
         INTEGER(hsize_t) :: index_size ! btree and/or list
         INTEGER(hsize_t) :: heap_size
      END TYPE H5_ih_info_t

      TYPE, BIND(C) :: meta_size_t
         TYPE(H5_ih_info_t) :: obj  ! v1/v2 B-tree & local/fractal heap for
                                    ! groups, B-tree for chunked datasets
         TYPE(H5_ih_info_t) :: attr ! v2 B-tree & heap for attributes
      ENDTYPE meta_size_t

      TYPE, BIND(C) :: h5o_info_t
         INTEGER(C_LONG)  :: fileno     ! File number that object is located in
         INTEGER(haddr_t) :: addr       ! Object address in file
         INTEGER(C_INT)   :: type       ! Basic object type (group, dataset, etc.)
         INTEGER          :: rc         ! Reference count of object

         INTEGER, DIMENSION(8) :: atime ! Access time        !    -- NOTE --
         INTEGER, DIMENSION(8) :: mtime ! Modification time  ! Returns an integer
         INTEGER, DIMENSION(8) :: ctime ! Change time        ! array as specified
         INTEGER, DIMENSION(8) :: btime ! Birth time         ! in Fortran intrinsic
                                                             ! DATE_AND_TIME(VALUES)

         INTEGER(hsize_t) :: num_attrs  ! # of attributes attached to object

         TYPE(hdr_t) :: hdr

         TYPE(meta_size_t) :: meta_size
      END TYPE h5o_info_t