[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