+/* Expand a structure element into the passed-in ctf_lmember_t. */
+
+static int
+ctf_struct_member (ctf_dict_t *fp, ctf_lmember_t *dst, const ctf_type_t *tp,
+ unsigned char *vlen, size_t vbytes, size_t n)
+{
+ if (!ctf_assert (fp, n < LCTF_INFO_VLEN (fp, tp->ctt_info)))
+ return -1; /* errno is set for us. */
+
+ /* Already large. */
+ if (tp->ctt_size == CTF_LSIZE_SENT)
+ {
+ ctf_lmember_t *lmp = (ctf_lmember_t *) vlen;
+
+ if (!ctf_assert (fp, (n + 1) * sizeof (ctf_lmember_t) <= vbytes))
+ return -1; /* errno is set for us. */
+
+ memcpy (dst, &lmp[n], sizeof (ctf_lmember_t));
+ }
+ else
+ {
+ ctf_member_t *mp = (ctf_member_t *) vlen;
+ dst->ctlm_name = mp[n].ctm_name;
+ dst->ctlm_type = mp[n].ctm_type;
+ dst->ctlm_offsetlo = mp[n].ctm_offset;
+ dst->ctlm_offsethi = 0;
+ }
+ return 0;
+}
+