[gelöst]locale-unabhängiges strerror() gesucht

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

[gelöst]locale-unabhängiges strerror() gesucht

Beitrag von cosmac » 17.08.2011 19:48:20

hi,

"Nicht erlaubter Seek" geht ja gerade noch, aber "Repérage non permis" ist nicht mehr lustig. Ich will mein "Illegal Seek" wieder zurück!

Als Notlösung hatte ich mir sowas gebastelt:

Code: Alles auswählen

char *
cstrerror (int error)
{
char  *message;

  setlocale (LC_MESSAGES, "C");
  message = strerror (error);
  setlocale (LC_MESSAGES, "");
  return message;
}
Das war mir schon immer suspekt, aber jetzt hab' ich auch noch diese Bemerkung gefunden:
ActivePython 3.2 Documentation hat geschrieben:The C standard defines the locale as a program-wide property that may be relatively expensive to change. On top of that, some implementation are broken in such a way that frequent locale changes may cause core dumps.
Von sys_errlist[] rät mir mein gcc ab -- was jetzt? Wie macht man das heutzutage?
Zuletzt geändert von cosmac am 24.08.2011 10:57:22, insgesamt 1-mal geändert.
Beware of programmers who carry screwdrivers.

mtheiss
Beiträge: 154
Registriert: 01.04.2005 22:07:26
Lizenz eigener Beiträge: MIT Lizenz

Re: locale-unabhängiges strerror() gesucht

Beitrag von mtheiss » 18.08.2011 14:29:53

Hallo,

es gibt die Funktion strerror_l. Mit der würde ich es implementieren.

Code: Alles auswählen

#include <stdio.h>
#include <string.h>
#include <locale.h>

int main(void) {
        char *lcm = setlocale(LC_MESSAGES, "");
        printf("LC_MESSAGE: %s\n", lcm);

        locale_t loc = newlocale(LC_MESSAGES, "C", NULL);
        printf("strerror: %s\n",   strerror(29));
        printf("strerror_l: %s\n", strerror_l(29, loc));
        freelocale(loc);
        return 0;
}
Ausgabe mit LC_MESSAGES=de_DE.UTF-8 exportiert

Code: Alles auswählen

LC_MESSAGE: de_DE.UTF-8
strerror: Nicht erlaubter Seek
strerror_l: Illegal seek
Gruss
Martin

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: locale-unabhängiges strerror() gesucht

Beitrag von cosmac » 18.08.2011 16:50:20

ja, so hab' ich mir das vorgestellt!
Dankeschön!
Es lässt sich so auch unter squeeze übersetzen, nur die man page fehlt (noch?).
Beware of programmers who carry screwdrivers.

mtheiss
Beiträge: 154
Registriert: 01.04.2005 22:07:26
Lizenz eigener Beiträge: MIT Lizenz

Re: locale-unabhängiges strerror() gesucht

Beitrag von mtheiss » 19.08.2011 09:36:46

Hallo,

die Funktion sollte in der POSIX.1-2008 base specification zu finden sein.
http://pubs.opengroup.org/onlinepubs/96 ... error.html

Gruss
Martin

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: locale-unabhängiges strerror() gesucht

Beitrag von cosmac » 19.08.2011 10:06:24

Tja, wenn man erstmal weiß, wonach man sucht, kommt man schon weiter. Aber von Debian bin ich es eigentlich gewohnt, dass ich alles per "apropos" oder im "see also"-Abschnitt einer ähnlichen Funktion finde. POSIX.1-2008 war wohl doch zu neu für squeeze, das passt schon.
Beware of programmers who carry screwdrivers.

Antworten