From: Gerd von Egidy Date: Thu, 16 Apr 2009 13:53:30 +0000 (+0200) Subject: make sure that no invalid time values are written to firewall (#1423) X-Git-Tag: v2.6~124 X-Git-Url: http://developer.intra2net.com/git/?a=commitdiff_plain;h=c0368918b7e62136eed71b3768d9224b3c8b08cd;p=libi2ncommon make sure that no invalid time values are written to firewall (#1423) new common function split_daysec() to replace the dated seconds_to_hour_minute() --- diff --git a/src/timefunc.cpp b/src/timefunc.cpp index b6cca0b..327de6c 100644 --- a/src/timefunc.cpp +++ b/src/timefunc.cpp @@ -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(); } diff --git a/src/timefunc.hxx b/src/timefunc.hxx index f5ccd32..308ff80 100644 --- a/src/timefunc.hxx +++ b/src/timefunc.hxx @@ -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); }