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

Reply via email to