Re: __attribute__((warn_unused_result)) for NetBSD?

James Chacon <[email protected]>
Newsgroups gmane.os.netbsd.devel.general
Message-ID <[email protected]>
On Sep 14, 2008, at 7:30 PM, Christos Zoulas wrote:

> In article <[email protected]>,
> Thor Lancelot Simon  <[email protected]> wrote:
>> On Sun, Sep 14, 2008 at 07:53:55PM -0400, der Mouse wrote:
>>>>> Why?  IMO Not checking for return value of all these functions as
>>>>> well as close fclose etc. is VERY dangerous.
>>>> Please, explain to me what exactly you intend to do to handle an
>>>> error return from close().
>>>
>>> I didn't write that.  But the answer seems pretty obvious: report  
>>> it to
>>> wherever is appropriate for errors on the file in question.
>>>
>>> Typically an error from close() will be something like a delayed- 
>>> write
>>> I/O error, something the file writer quite likely wants to hear  
>>> about.
>>
>> You might be able to report it to the user.  However, it's among  
>> those
>> errors for which, I think, if you consider actual use cases  
>> carefully,
>> it is least likely that you can actually take corrective action.   
>> After
>> all, you've closed the file.  Across a close, all kinds of normal  
>> Unix
>> I/O semantics you might expect are simply not going to hold...
>
> For the 2 errno entries listed in close(2):
>
> EBADF: Programming error.
> EINTR: User could re-try.
>
> Both sound nice to report back.
>

Lots of existing code does this at startup:

for (i=0; i<255; i++)
	close(i);

Or something similar. I'm not claiming that's valid for a lot of  
reasons but it is a common idiom and yes it's deliberately ignoring  
the return value there on purpose obviously.

In general EBADF is meaningless on close. Assuming you were catching  
errors in read/write already you would have already noticed using the  
wrong fd. If you weren't catching errors there, reporting a warning  
for close will just duplicate the ones we should be returning for those.

Isn't it only possible to get EINTR on non-blocking I/O? Otherwise  
isn't this an auto-restarted call?

Anyways, for the most part all common usages of close don't need  
warnings about missing the return value that I can see. Spitting lots  
of warnings for the common case makes the warning useless.

James
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.