-/* 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;
}
const uint32_t *dp;
ctf_funcinfo_t f;
- if (ctf_func_info (fp, symidx, &f) == CTF_ERR)
- return CTF_ERR; /* errno is set for us. */
+ if (ctf_func_info (fp, symidx, &f) < 0)
+ return -1; /* errno is set for us. */
/* The argument data is two uint32_t's past the translation table
offset: one for the function info, and one for the return type. */