- width += 6;
- if (buf)
- sprintf(buf, "%*u:%02u:%02u", max_width - width + 1, hours, mins, secs);
- return width;
+ return width + 6;
+}
+
+static void get_duration_buf(int seconds, char *buf, short unsigned max_width)
+{
+ unsigned hours = seconds / 3600, mins = (seconds % 3600) / 60;
+
+ if (!hours) /* m:ss or mm:ss */
+ sprintf(buf, "%*u:%02u", max_width - 3, mins, seconds % 60);
+ else /* more than one hour => h:mm:ss, hh:mm:ss, hhh:mm:ss, ... */
+ sprintf(buf, "%*u:%02u:%02u", max_width - 6, hours, mins,
+ seconds % 60);