sasc re-write
Matthew Dillon
dillon at apollo.backplane.com
Mon Jan 17 11:09:45 PST 2005
:On Mon(17)/Jan/05 - , Diane Bruce wrote:
:> On Mon, Jan 17, 2005 at 09:24:53AM +0100, Simon 'corecode' Schubert wrote:
:> > hey, just a few comments
:> >
:> ...
:>
:> And a nit...
:>
:> > >+ val = strtol(str, &ep, 10);
:> > >+ if (errno)
:> > >+ err(1, "strtol failed: %s", str);
:>
:>
:> I'd not attempt to use errno as a boolean, I'd do:
:>
:> if (errno != 0)
:> ...
:>
:> Especially as later on you do:
:>
:> >+ if (ioctl(fd, asc_setting, &asc_value) < 0)
:
:I disagree. errno is normally used as boolean.
:
:>
:> > you don't reset errno to 0, so this might be not working. reading the
:> > man page it might be needed :/
:>
:> Indeed it would be.
:>
:> - Diane.
:
:--
:- Liam J. Foy
:<liamfoy at xxxxxxxxxxxxx>
Diane is right. errno is only modified when something fails, which
means that it tends to 'accumulate' a non-zero value even if the last
50 system calls succeeded.
You are only supposed to check errno if a particular operation fails.
e.g. if (lseek(...) < 0) { ... check errno }
strtol() is one of those rare functions where the only safe way to
check errno is to clear it prior to calling the function because the
error return value may also represent a non-error value.
In anycase, I recommend not bothering with errno at all for strtol().
Just check that the returned value is in a reasonable range.
-Matt
Matthew Dillon
<dillon at xxxxxxxxxxxxx>
More information about the Kernel
mailing list