X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/ba5e465dec9a8cf66211bed488050169c65df032..78546f2b0f59b5c8fede1ce5535972716eb17041:/lib/irc_string.c diff --git a/lib/irc_string.c b/lib/irc_string.c index 9f4929d5..28ac047e 100644 --- a/lib/irc_string.c +++ b/lib/irc_string.c @@ -232,12 +232,14 @@ const char *IPlongtostr(unsigned long IP) { /* * longtoduration: * Converts a specified number of seconds into a duration string. - * format: 0 for the "/stats u" compatible output, 1 for more human-friendly output. + * format: 0 for the "/stats u" compatible output, 1 for more + * human-friendly output (that is sometimes format 0), and + * 2 for a different human-friendly output. */ const char *longtoduration(unsigned long interval, int format) { int days,hours,minutes,seconds; - static char outstring[50]; + static char outstring[100]; int pos=0; seconds=interval%60; @@ -245,20 +247,35 @@ const char *longtoduration(unsigned long interval, int format) { hours=(interval%(3600*24))/3600; days=interval/(3600*24); - if (format==0 || (days>0 && (hours||minutes||seconds))) { - sprintf(outstring,"%d day%s, %02d:%02d:%02d", - days,(days==1)?"":"s",hours,minutes,seconds); - } else if (days>0) { - sprintf(outstring, "%d day%s",days,(days==1)?"":"s"); + if(format<2) { + if (format==0 || (days>0 && (hours||minutes||seconds))) { + sprintf(outstring,"%d day%s, %02d:%02d:%02d", + days,(days==1)?"":"s",hours,minutes,seconds); + } else if (days>0) { + sprintf(outstring, "%d day%s",days,(days==1)?"":"s"); + } else { + if (hours>0) { + pos += sprintf(outstring+pos,"%d hour%s ",hours,hours==1?"":"s"); + } + if (minutes>0 || (hours>0 && seconds>0)) { + pos += sprintf(outstring+pos,"%d minute%s ",minutes,minutes==1?"":"s"); + } + if (seconds>0 || !interval) { + sprintf(outstring+pos,"%d second%s ",seconds,seconds==1?"":"s"); + } + } } else { - if (hours>0) { - pos += sprintf(outstring+pos,"%d hour%s ",hours,hours==1?"":"s"); + if (days>0) { + pos += sprintf(outstring+pos, "%dd ",days); + } + if (hours>0 || (days>0 && (minutes>0 || seconds>0))) { + pos += sprintf(outstring+pos, "%dh ",hours); } - if (minutes>0 || (hours>0 && seconds>0)) { - pos += sprintf(outstring+pos,"%d minute%s ",minutes,minutes==1?"":"s"); + if (minutes>0 || ((days>0 || hours>0) && seconds>0)) { + pos += sprintf(outstring+pos, "%dm ",minutes); } - if (seconds>0) { - pos += sprintf(outstring+pos,"%d second%s ",seconds,seconds==1?"":"s"); + if (seconds>0 || !interval) { + sprintf(outstring+pos, "%ds ",seconds); } }