[PATCH v3] libctf: ctf_member_next needs to return (ssize_t)-1 on error
Nick Alcock
nick.alcock@oracle.com
Wed Sep 13 18:37:16 GMT 2023
On 13 Sep 2023, Torbjörn SVENSSON verbalised:
> v1 -> v2:
> Changed all functions with signed interger return type to return -1 based on
> comment from Alan.
>
> v2 -> v3:
> Added ctf_set_errno_signed function to return a signed -1 value based on
> comment from Nick.
>
> Ok for trunk?
If this touches exactly those functions that return int, and fixes the
reported bug, it's good as far as I'm concerned, except for a couple of
possible comment improvements:
> +/* Store the specified error code into the CTF dict, and then return -1
> + (CTF_ERR) for the benefit of the caller. */
It's not CTF_ERR in this case, it's just -1. Perhaps:
/* Store the specified error code into the CTF dict, and then return -1
for the benefit of the caller, which is expected to return int,
as opposed to ctf_id_t. */
> +int
> +ctf_set_errno_signed (ctf_dict_t *fp, int err)
> +{
> + fp->ctf_errno = err;
> + /* Don't rely on CTF_ERR here as it will not properly sign extend on 64-bit
> + Windows ABI. */
> + return -1;
> +}
... that Windows is not really the problem here. It's more
/* Don't rely on CTF_ERR here; it is a ctf_id_t (unsigned long), and
it will be truncated to a non--1 value on platforms on which int
and unsigned long are different sizes. */
perhaps? (At least, I think that's what's going on.)
This probably needs testing on a wide variety of platforms with
different type sizes. I'll add throwing this through my entire test
matrix to my todo list, and fix any bugs observed: but the basic idea
looks sound to me.
--
NULL && (void)
More information about the Binutils
mailing list