make sure that no invalid time values are written to firewall (#1423)
authorGerd von Egidy <gerd.von.egidy@intra2net.com>
Thu, 16 Apr 2009 13:53:30 +0000 (15:53 +0200)
committerGerd von Egidy <gerd.von.egidy@intra2net.com>
Thu, 16 Apr 2009 13:53:30 +0000 (15:53 +0200)
new common function split_daysec() to replace the dated seconds_to_hour_minute()

src/timefunc.cpp
src/timefunc.hxx

index b6cca0b..327de6c 100644 (file)
@@ -99,12 +99,9 @@ string make_nice_time(int seconds)
     int days=seconds/86400;
     seconds%=86400;
 
-    int hours=seconds/3600;
-    seconds%=3600;
-
-    int minutes=seconds/60;
-    seconds%=60;
-
+    int hours,minutes;
+    split_daysec(seconds,&hours,&minutes,&seconds);
+    
     if (days==1)
         out << i18n("1 day") << ", ";
     else if (days>1)
@@ -145,7 +142,32 @@ void seconds_to_hour_minute(int seconds, int *hour, int *minute)
     }
 }
 
-std::string output_hour_minute(int hour, int minute, bool h_for_00)
+/**
+    * Split seconds into hours, minutes and seconds
+    * @param [in] daysec Seconds since start of day
+    * @param [out] outhours hours
+    * @param [out] outminutes minutes
+    * @param [out] outseconds seconds
+    */
+void split_daysec(int daysec, int *outhours, int *outminutes, int *outseconds)
+{
+    int hours=daysec/3600;
+    daysec%=3600;
+
+    int minutes=daysec/60;
+    daysec%=60;
+
+    if (outhours)
+        *outhours=hours;
+
+    if (outminutes)
+        *outminutes=minutes;
+
+    if (outseconds)
+        *outseconds=daysec;
+}
+
+std::string output_hour_minute(int hour, int minute, bool h_for_00, int seconds)
 {
     ostringstream out;
     
@@ -153,7 +175,7 @@ std::string output_hour_minute(int hour, int minute, bool h_for_00)
         out << '0';
     out << hour;
     
-    if (!h_for_00 || minute != 0)
+    if (!h_for_00 || minute != 0 || seconds > 0)
     {
         out << ':';
         if (minute >= 0 && minute < 10)
@@ -163,6 +185,14 @@ std::string output_hour_minute(int hour, int minute, bool h_for_00)
     else
         out << 'h';
 
+    if (seconds > 0)
+    {
+        out << ':';
+        if (seconds > 0 && seconds < 10)
+            out << '0';
+        out << seconds;
+    }
+
     return out.str();
 }
 
index f5ccd32..308ff80 100644 (file)
@@ -22,12 +22,13 @@ int date_to_seconds(const std::string &date);
 std::string make_nice_time(int seconds);
 std::string format_full_time(int seconds);
 void seconds_to_hour_minute(int seconds, int *hour, int *minute);
-std::string output_hour_minute(int hour, int minute, bool h_for_00=true);
+void split_daysec(int daysec, int *outhours=NULL, int *outminutes=NULL, int *outseconds=NULL);
+std::string output_hour_minute(int hour, int minute, bool h_for_00=true, int seconds=0);
 
 inline std::string output_hour_minute_from_seconds(int seconds)
 {
     int hour, minute;
-    seconds_to_hour_minute(seconds,&hour,&minute);
+    split_daysec(seconds,&hour,&minute);
     return output_hour_minute(hour,minute);
 }