Hallo Andreas, besten Dank für den Patch. In der Tat wird der Fall einer nicht existierenden "TZ" da nicht abgefangen und das ist ein Fehler. Dein Patch werd ich also übernehmen, allerdings werde ich den std::string-Zwischenspeicher wieder reinnehmen, denn der "char*" Buffer, den man von getenv() zurückbekommt, kann schon während tzset() wieder verhunzt werden und deshalb muss der sofort woanders gespeichert werden. Siehe Patch unten.
Quoting Andreas Pakulat <[EMAIL PROTECTED]>: >> a) es fehlt ein tzset(); nach dem zuruecksetzen von "TZ"? Nein, denn ich will ja nur innerhalb des laufenden Prozesses die System-Variable timezone(3) setzen. Wenn's nach mir gehen würde, gäbe es eine Funktion tzset("CET"), also wo ich den gewünschten String direkt übergeben kann, aber das gibt's halt nicht. Der Sinn dieses Timezone-Setzens ist, wenn ich mich recht erinnere und gemäß http://ktoblzcheck.cvs.sourceforge.net/ktoblzcheck/ktoblzcheck/src/lib/ktoblzcheck.cc?r1=1.48&r2=1.49 dass das mktime() in Zeile 388ff (im verlinkten changeset) bei nicht gesetzter tzset() eben *irgendeine* Zeitzone annimmt, aber ich ja genau das Datum in der CET-Zeitzone haben will, da ich mich auf das Gültigkeitsdatum von Bankdaten beziehe, und die sind nun mal in CET-Zeiten angegeben. Andererseits könnte man natürlich argumentieren, dass plus/minus 12 Stunden für diesen Zweck eh egal sind, aber wiederum einerseits hab ich wohl während dem Debuggen (siehe auskommentierte std::cout) schon eine Abweichung +/- 2 Stunden gesehen, die erst bei korrekter Zeitzone verschwunden ist. >> b) Sollte das zuruecksetzen nicht erst am Ende des relevanten Codes >> passieren? Das Ergebnis von tzset() bleibt ja da; nur die Eingabewerte für tzset (eben diese nervige env-Variable) braucht man dann nicht mehr. > So, fertig getestet. Problem ist das setenv("TZ", "", 1) != > unsetenv("TZ"). Und man tzset erklaert warum das ein Problem ist. > /etc/localtime wird nur gelesen wenn TZ nicht gesetzt ist (also auch > nicht auf nen leeren String). Ok, danke. Christian --- ktoblzcheck.cc~ Sat Jan 26 09:48:56 2008 +++ ktoblzcheck.cc Tue Jan 29 12:02:15 2008 @@ -397,7 +397,10 @@ tzset(); // and reset the env variable TZ again. #if !defined(__MINGW32__) | !defined(_WIN32) - setenv("TZ", old_TZ.c_str(), 1); + if (old_TZ_p) + setenv("TZ", old_TZ.c_str(), 1); + else + unsetenv("TZ"); #endif // In the long run, this method should rather look up the available ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Aqbanking-devel mailing list Aqbanking-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/aqbanking-devel