-/* Type lookup.
- Copyright (C) 2019 Free Software Foundation, Inc.
+/* Symbol, variable and name lookup.
+ Copyright (C) 2019-2020 Free Software Foundation, Inc.
This file is part of libctf.
else
{
free (fp->ctf_tmp_typeslice);
- fp->ctf_tmp_typeslice = strndup (p, (size_t) (q - p));
+ fp->ctf_tmp_typeslice = xstrndup (p, (size_t) (q - p));
if (fp->ctf_tmp_typeslice == NULL)
{
(void) ctf_set_errno (fp, ENOMEM);
}
}
- if ((type = ctf_hash_lookup_type (lp->ctl_hash, fp,
- fp->ctf_tmp_typeslice)) == 0)
+ if ((type = ctf_lookup_by_rawhash (fp, lp->ctl_hash,
+ fp->ctf_tmp_typeslice)) == 0)
{
(void) ctf_set_errno (fp, ECTF_NOTYPE);
goto err;
return NULL;
}
- idx = LCTF_TYPE_TO_INDEX (fp, type);
- if (idx > 0 && (unsigned long) idx <= fp->ctf_typemax)
- {
- *fpp = fp; /* Function returns ending CTF container. */
- return (LCTF_INDEX_TO_TYPEPTR (fp, idx));
- }
-
/* If this container is writable, check for a dynamic type. */
if (fp->ctf_flags & LCTF_RDWR)
*fpp = fp;
return &dtd->dtd_data;
}
+ (void) ctf_set_errno (*fpp, ECTF_BADID);
+ return NULL;
}
+
+ /* Check for a type in the static portion. */
+
+ idx = LCTF_TYPE_TO_INDEX (fp, type);
+ if (idx > 0 && (unsigned long) idx <= fp->ctf_typemax)
+ {
+ *fpp = fp; /* Function returns ending CTF container. */
+ return (LCTF_INDEX_TO_TYPEPTR (fp, idx));
+ }
+
(void) ctf_set_errno (*fpp, ECTF_BADID);
return NULL;
}