diff --git a/src/xpdev/genwrap.c b/src/xpdev/genwrap.c index c95dbcac0dc1a4572c8aabb8dd990583746477e6..aa7d63b8e78d482e530ef8b65c4b85721ceb1060 100644 --- a/src/xpdev/genwrap.c +++ b/src/xpdev/genwrap.c @@ -336,6 +336,11 @@ char* byte_estimate_to_str(uint64_t bytes, char* str, size_t size, ulong unit, i return str; } +static const double one_year = 365.0*24.0*60.0*60.0; // Actually, 365.2425 +static const double one_week = 7.0*24.0*60.0*60.0; +static const double one_day = 24.0*60.0*60.0; +static const double one_hour = 60.0*60.0; +static const double one_minute = 60.0; /* Parse a duration string, default unit is in seconds */ /* (Y)ears, (W)eeks, (D)ays, (H)ours, and (M)inutes */ @@ -350,11 +355,11 @@ double parse_duration(const char* str) if(p!=NULL) { SKIP_WHITESPACE(p); switch(toupper(*p)) { - case 'Y': t*=365.0*24.0*60.0*60.0; break; - case 'W': t*= 7.0*24.0*60.0*60.0; break; - case 'D': t*= 24.0*60.0*60.0; break; - case 'H': t*= 60.0*60.0; break; - case 'M': t*= 60.0; break; + case 'Y': t*= one_year; break; + case 'W': t*= one_week; break; + case 'D': t*= one_day; break; + case 'H': t*= one_hour; break; + case 'M': t*= one_minute; break; } } return t; @@ -366,16 +371,16 @@ double parse_duration(const char* str) */ char* duration_to_str(double value, char* str, size_t size) { - if(value && fmod(value,365.0*24.0*60.0*60.0)==0) - safe_snprintf(str, size, "%gY",value/(365.0*24.0*60.0*60.0)); - else if(value && fmod(value,7.0*24.0*60.0*60.0)==0) - safe_snprintf(str, size, "%gW",value/(7.0*24.0*60.0*60.0)); - else if(value && fmod(value,24.0*60.0*60.0)==0) - safe_snprintf(str, size, "%gD",value/(24.0*60.0*60.0)); - else if(value && fmod(value,60.0*60.0)==0) - safe_snprintf(str, size, "%gH",value/(60.0*60.0)); - else if(value && fmod(value,60.0)==0) - safe_snprintf(str, size, "%gM",value/60.0); + if(value && fmod(value, one_year)==0) + safe_snprintf(str, size, "%gY",value/one_year); + else if(value && fmod(value, one_week)==0) + safe_snprintf(str, size, "%gW",value/one_week); + else if(value && fmod(value, one_day)==0) + safe_snprintf(str, size, "%gD",value/one_day); + else if(value && fmod(value, one_hour)==0) + safe_snprintf(str, size, "%gH",value/one_hour); + else if(value && fmod(value, one_minute)==0) + safe_snprintf(str, size, "%gM",value/one_minute); else safe_snprintf(str, size, "%gS",value); @@ -388,24 +393,24 @@ char* duration_to_str(double value, char* str, size_t size) */ char* duration_to_vstr(double value, char* str, size_t size) { - if(value && fmod(value,365.0*24.0*60.0*60.0)==0) { - value /= (365.0*24.0*60.0*60.0); + if(value && fmod(value, one_year)==0) { + value /= one_year; safe_snprintf(str, size, "%g year%s", value, value == 1 ? "":"s"); } - else if(value && fmod(value,7.0*24.0*60.0*60.0)==0) { - value /= (7.0*24.0*60.0*60.0); + else if(value && fmod(value, one_week)==0) { + value /= one_week; safe_snprintf(str, size, "%g week%s", value, value == 1 ? "":"s"); } - else if(value && fmod(value,24.0*60.0*60.0)==0) { - value /= (24.0*60.0*60.0); + else if(value && fmod(value, one_day)==0) { + value /= one_day; safe_snprintf(str, size, "%g day%s", value, value == 1 ? "":"s"); } - else if(value && fmod(value,60.0*60.0)==0) { - value /= (60.0*60.0); + else if(value && fmod(value, one_hour)==0) { + value /= one_hour; safe_snprintf(str, size, "%g hour%s", value, value == 1 ? "":"s"); } - else if(value && fmod(value,60.0)==0) { - value /= 60.0; + else if(value && fmod(value, one_minute)==0) { + value /= one_minute; safe_snprintf(str, size, "%g minute%s", value, value == 1 ? "":"s"); } else