[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [tyndur-devel] [PATCH] strerror
On Fri, Feb 11, 2011 at 07:33:48PM +0100, Jörg Pfähler wrote:
> Am Freitag, 11. Februar 2011, um 17:48:13 schrieb Arne Hasselbring:
> > + strerror gibt jetzt nicht mehr "Unbekannter Fehler" zurück, sondern die
> > zu errno gehörenden Fehlermeldungen
> >
> > Signed-off-by: Arne Hasselbring <arne.hasselbring@xxxxxxxxxxxxxx>
> > ---
> > src/modules/lib/posix/strerror.c | 67
> > +++++++++++++++++++++++++++++++++++-- 1 files changed, 63 insertions(+), 4
> > deletions(-)
> >
> > diff --git a/src/modules/lib/posix/strerror.c
> > b/src/modules/lib/posix/strerror.c index e08f3e0..ac3d84e 100644
> > --- a/src/modules/lib/posix/strerror.c
> > +++ b/src/modules/lib/posix/strerror.c
> > @@ -38,11 +38,70 @@
> > *
> > * @return Pointer auf internen Buffer mit Fehlermeldung
> > */
> > +
> > +char *errno_messages[51] = {
> Hier wäre ein MAX_ERRORS-Makro in der Header schöner
Hm, eigentlich braucht man die Größe doch gar nicht angeben. Ungefähr so
gehört das, würde ich sagen:
static const char* const errno_messages[] = {
[EFOO] = "bar",
...
}
> > + "Result too large.",
> > + "Invalid argument.",
> > + "Not enough space.",
> > + "Interrupted function.",
> > + "No such file or directory.",
> > + "File exists.",
> > + "Bad file descriptor.",
> > + "Operation not permitted.",
> > + "I/O error.",
> > + "Cross-device link.",
> > + "Bad address.",
> > + "Argument list too long."
> > + "Not a directory.",
> > + "Permission denied.",
> > + "Too many open files.",
> > + "Executable file format error.",
> > + "No child processes.",
> > + "Resource unavailable, try again.",
> > + "Too many files open in system.",
> > + "Is a directory.",
> > + "No such device.",
> > + "Inappropriate I/O control operation.",
> > + "Mathematics argument out of domain of function.",
> > + "No such device or address.",
> > + "No such process.",
> > + "Broken pipe.",
> > + "Illegal byte sequence.",
> > +
> > +
> > + "Address family not supported.",
> > + "Connection timed out.",
> > + "Protocol wrong type for socket.",
> > + "Connection refused.",
> > + "The socket is not connected.",
> > + "Connection reset.",
> > + "Operation in progress.",
> > + "Connection already in progress.",
> > + "Socket is connected.",
> > +
> > +
> > + "Operation not supported on socket.",
> > + "Read-only file system.",
> > + "No space left on device.",
> > + "Device or resource busy.",
> > + "Value too large to be stored in data type.",
> > + "File too large.",
> > + "Resource deadlock would occur.",
> > + "Address not available.",
> > + "Function not supported.",
> > + "Filename too long.",
> > + "Invalid seek.",
> > + "Too many links.",
> > + "Directory not empty.",
> > +
> > +
> > + "Host is unreachable.",
> > + "Message too large.",
> > + "Protocol error.",
> Würde ich lieber als
> ...
> [EBLABLA] = "BlaBla",
> ...
> machen, das hält besser.
>
> > +};
> > +
> > char* strerror(int error_code)
> > {
> > - static char error_message[64];
> > - snprintf(error_message, sizeof(error_message),
> > - "Unbekannter Fehler %d", error_code);
> > - return error_message;
> > + return errno_messages[error_code - 1];
> Und hier dann die -1 entfernen
Und vor allem prüfen, dass der error_code im Array enthalten ist und du
nicht irgendwo ins Leere greifst. Für unerwartete Werte würde ich immer
noch "Unbekannter Felder %d" sagen.
Kevin