Re: Use enum to declare errno values

From: Denis Vlasenko
Date: Thu Nov 24 2005 - 02:20:05 EST


On Wednesday 23 November 2005 17:00, linux-os (Dick Johnson) wrote:
> On Wed, 23 Nov 2005, Denis Vlasenko wrote:
> > On Wednesday 23 November 2005 16:19, linux-os (Dick Johnson) wrote:
> >>> I'm just wondering why not declaring errno values using enumaration ?
> >>> It is just more convenient when debuging the kernel.
> >>
> >> There is an attempt to keep kernel errno values similar to
> >> user-mode errno values. This simplifies the user-kernel
> >> interface where the kernel will return -ERRNO and the user-mode
> >> code negates it and puts it into the user errno then sets the
> >> return value to -1 (a Unix convention).
> >>
> >> The user-mode errno's therefore must correspond. You can't
> >> expect the 'C' runtime libraries to be rebuilt and/or all the
> >> programs recompiled just because the kernel got changed so
> >> the errno's are hard-coded. 0 will always mean "no error" and
> >> 1 will always be EPERM, etc. There are error-codes that are
> >> the same number also, EWOULDBLOCK and EAGAIN are examples.
> >>
> >> So, you can't just auto-enumerate. If auto-enumeration isn't
> >> possible, then you might just as well use #define, which is
> >> what is done.
> >
> > ?!!
> >
> > enum {
> > one,
> > two,
> > ten = 10
> > };
>
> Did you BOTHER to read or you just picking a fight??

I was trying to say that since enum supports non-contiguous numbering,
any sequence of integer #defines can be trivially converted to enum
declaration:

...
#define ERESTARTSYS 512
#define ERESTARTNOINTR 513
#define ERESTARTNOHAND 514 /* restart if no handler.. */
#define ENOIOCTLCMD 515 /* No ioctl command */
#define ERESTART_RESTARTBLOCK 516 /* restart by calling sys_restart_syscall */
...

enum {
...
ERESTARTSYS = 512,
ERESTARTNOINTR = 513,
ERESTARTNOHAND = 514, /* restart if no handler.. */
ENOIOCTLCMD = 515, /* No ioctl command */
ERESTART_RESTARTBLOCK = 516, /* restart by calling sys_restart_syscall */
...
};
--
vda
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/