On 12/19/22 16:16, Mark Wielaard wrote:
> Hi Martin,
>
> On Mon, 2022-12-19 at 15:21 +0100, Martin Liška wrote:
>>>> + else
>>>> + error (0, 0, "Couldn't get chdr for section %zd", ndx);
>>>
>>> Shouldn't this error be fatal?
>>
>> What do you use for fatal errors?
>
> Depends a bit on context. It might be that this error isn't fatal, then
> zero as first (status) argument is fine, just know that the program
> will just continue. And it looked like not all callers were prepared
> for this function to return with a bogus return value.
>
> If it is fatal then depending on context you either call error_exit (0,
> "Couldn't get chdr for section %zd", ndx); [see system.h, this really
> is just error (EXIT_FAILURE, 0, ...)] if the program needs to terminate
> right now.
>
> Or you return a special value from the function (assuming all callers
> check for an error here). And/Or if the program needs a cleanup you'll
> goto cleanup (as is done in process_file).
I think it's fine as we return UNSET in that case and the caller goes directly
to cleanup (or abort is called for the second call site):
enum ch_type schtype = get_section_chtype (scn, shdr, sname, ndx);
if (schtype == UNSET)
goto cleanup;
Martin
>
> Cheers,
>
> Mark