Shift key-related error codes up and insert ECANCELED
PATCH 1/1 Shift key-related error codes up and insert ECANCELED
This patch shifts the key-related error codes up by one and inserts an ECANCELED error code where not already defined. It seems that has been defined in glibc without passing it back to the kernel:-/
Who arbitrates error number allocations anyway?
---
warthog>diffstat errno-269bk5.diff
asm-alpha/errno.h | 9 +++++---- asm-generic/errno.h | 9 +++++---- asm-sparc/errno.h | 9 +++++---- asm-sparc64/errno.h | 9 +++++---- 4 files changed, 20 insertions(+), 16 deletions(-)
include/asm-alpha/errno.h +5 -4
@@ -110,9 +110,10 @@#define ENOMEDIUM 129/* No medium found */ #define EMEDIUMTYPE 130/* Wrong medium type */ -#define ENOKEY 131/* Required key not available */ -#define EKEYEXPIRED 132/* Key has expired */ -#define EKEYREVOKED 133/* Key has been revoked */ -#define EKEYREJECTED 134/* Key was rejected by service */ +#define ECANCELED 131/* Operation Cancelled */ +#define ENOKEY 132/* Required key not available */ +#define EKEYEXPIRED 133/* Key has expired */ +#define EKEYREVOKED 134/* Key has been revoked */ +#define EKEYREJECTED 135/* Key was rejected by service */ #endif
include/asm-generic/errno.h +5 -4
@@ -96,9 +96,10 @@#define ENOMEDIUM 123/* No medium found */ #define EMEDIUMTYPE 124/* Wrong medium type */ -#define ENOKEY 125/* Required key not available */ -#define EKEYEXPIRED 126/* Key has expired */ -#define EKEYREVOKED 127/* Key has been revoked */ -#define EKEYREJECTED 128/* Key was rejected by service */ +#define ECANCELED 125/* Operation Canceled */ +#define ENOKEY 126/* Required key not available */ +#define EKEYEXPIRED 127/* Key has expired */ +#define EKEYREVOKED 128/* Key has been revoked */ +#define EKEYREJECTED 129/* Key was rejected by service */ #endif
include/asm-sparc/errno.h +5 -4
@@ -101,9 +101,10 @@#define ENOMEDIUM 125/* No medium found */ #define EMEDIUMTYPE 126/* Wrong medium type */ -#define ENOKEY 127/* Required key not available */ -#define EKEYEXPIRED 128/* Key has expired */ -#define EKEYREVOKED 129/* Key has been revoked */ -#define EKEYREJECTED 130/* Key was rejected by service */ +#define ECANCELED 127/* Operation Cancelled */ +#define ENOKEY 128/* Required key not available */ +#define EKEYEXPIRED 129/* Key has expired */ +#define EKEYREVOKED 130/* Key has been revoked */ +#define EKEYREJECTED 131/* Key was rejected by service */ #endif
include/asm-sparc64/errno.h +5 -4
@@ -101,9 +101,10 @@#define ENOMEDIUM 125/* No medium found */ #define EMEDIUMTYPE 126/* Wrong medium type */ -#define ENOKEY 127/* Required key not available */ -#define EKEYEXPIRED 128/* Key has expired */ -#define EKEYREVOKED 129/* Key has been revoked */ -#define EKEYREJECTED 130/* Key was rejected by service */ +#define ECANCELED 127/* Operation Cancelled */ +#define ENOKEY 128/* Required key not available */ +#define EKEYEXPIRED 129/* Key has expired */ +#define EKEYREVOKED 130/* Key has been revoked */ +#define EKEYREJECTED 131/* Key was rejected by service */ #endif /* !(_SPARC64_ERRNO_H) */
Quoted 4 lines · David Howells
This patch shifts the key-related error codes up by one and inserts an ECANCELED error code where not already defined. It seems that has been defined in glibc without passing it back to the kernel:-/
Not sure what's the story behind ECANCELED not being in kernel headers, certainly it is something only userland needs ATM.
It is a POSIX mandated errno code used in aio_* that glibc is using since 1998, so it would be really bad to break all apps using aio.
The values you posted match exactly what glibc is using:
libc/sysdeps/unix/sysv/sysv4/solaris2/bits/errno.h:# define ECANCELED 47 /* Operation canceled. */ libc/sysdeps/unix/sysv/aix/bits/errno.h:# define ECANCELED 117 /* Asynchronous i/o cancelled. */ libc/sysdeps/unix/sysv/linux/alpha/bits/errno.h:# define ECANCELED 131 libc/sysdeps/unix/sysv/linux/sparc/bits/errno.h:# define ECANCELED 127
libc/sysdeps/unix/sysv/linux/bits/errno.h:# define ECANCELED 125
libc/sysdeps/unix/sysv/linux/hppa/bits/errno.h:# define ECANCELED ECANCELLED
libc/sysdeps/mach/hurd/bits/errno.h:#define ECANCELED _HURD_ERRNO (118)/* Operation canceled */
just maybe asm-parisc/errno.h could have
#define ECANCELED ECANCELLED
added (ECANCELED is the POSIX mandated spelling, while asm-parisc/errno.h for some reason defines ECANCELLED).
Jakub
Quoted 5 lines · David Howells
This patch shifts the key-related error codes up by one and inserts an ECANCELED error code where not already defined. It seems that has been defined in glibc without passing it back to the kernel:-/
Who arbitrates error number allocations anyway?
Generally nobody because new error codes are almost always a mistake in the first place especially when they don't appear in standards so no application will correctly or sanely handle them.
You should use existing codes IMHO. Lets see
EKEYEXPIRED - ETIME (ETIMEDOUT ? ENOLINK ?)
ENOKEY - ENOENT
EKEYREJECTED - EILSEQ / EMSGSIZE / EPROTOTYPE ..
EKEYREVOKED - EREMCHG / ESHUTDOWN
And now I can use your key stuff with an existing C library and in LSB compliant or cross platform code and give more information. If you look through the kernel history we've almost never ever added an error code, adding them just causes compatibility pain for everyone
Alan
Quoted 7 lines
You should use existing codes IMHO. Lets see
EKEYEXPIRED - ETIME (ETIMEDOUT ? ENOLINK ?)
ENOKEY - ENOENT
EKEYREJECTED - EILSEQ / EMSGSIZE / EPROTOTYPE ..
EKEYREVOKED - EREMCHG / ESHUTDOWN
The problem with doing that is that these error codes have specific meanings that we're then violating the standards by overloading. Take open() for
example: it's possible that this will return ENOENT because there's no file there to be opened; I think it's a bad idea for it to return ENOENT when there is a file there, but we don't have a key, hence ENOKEY.
David
Quoted 4 lines · David Howells
Take
open()for
example: it's possible that this will return ENOENT because there's no file there to be opened; I think it's a bad idea for it to return ENOENT when there is a file there, but we don't have a key, hence ENOKEY.
take open....
you don't have access to the file because you don't have a matching key to get to it. Doesn't that kinda say EACCESS (or EPERM) would be a/the proper return code ?