tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: fixing compat_12 getdents



On Mon, Dec 10, 2012 at 09:53:46PM +0200, Alan Barrett wrote:
> >also, EINVAL doesn't seem like a great error code for this 
> >condition.  it's not an input parameter that's causing the 
> >error, but rather that the required output format cannot express 
> >the data to be returned.  I think solaris uses EOVERFLOW for 
> >this kind of situation, and ERANGE doesn't seem too bad either. 
> >any opinions on that?
> 
> There's also E2BIG, but I don't think it fits.  ERANGE is 
> documented in terms of "the available space", while EOVERFLOW is 
> documented in terms of "a numeric result".  So perhaps EOVERFLOW 
> for "integer is too large to fit in N bits", and ERANGE for 
> "string is too long to fit in N bytes"?  Or vice versa?
> 
> Somebody(TM) should go through the errno(2) documentation and make 
> the descriptions more generic, and add guidance for choosing which 
> code to return.
> 

Then people get upset because they say "function foo() isn't allowed
to set errno to 'bar'".
It is rather a shame that posix tries to list all errno a function
can return, not just those for explicit 'likely' (ie normal)
non-success returns froma function.

For the inode number, it is a slight shame that a 'fake' value
can't be returned - maybe 0xffffffff - since a lot of the
code won't really care.

More likely to be an issue for the stat() functions - but not much code
really cares.
Well not much that you are really going to run compat versions of.

There are issues getting unique dev/inode pairs anyway for some
filesystems (and things like union mounts).

        David

-- 
David Laight: david%l8s.co.uk@localhost


Home | Main Index | Thread Index | Old Index