X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmisc%2Fmtime.c;h=b85c7ef0e3cedca38b14d43142615b18a97f1fa4;hb=2915b611a1c64c6c9b3dd5dcda951e0787916ca9;hp=c70f42b01202b37ef4a953f543c8f8a4f8f471cb;hpb=f7aee60194c7c2c455bbab68aef8a6ae437dfa3b;p=vlc diff --git a/src/misc/mtime.c b/src/misc/mtime.c index c70f42b012..b85c7ef0e3 100644 --- a/src/misc/mtime.c +++ b/src/misc/mtime.c @@ -82,7 +82,7 @@ int nanosleep(struct timespec *, struct timespec *); /* * We cannot use the monotonic clock if clock selection is not available, * as it would screw vlc_cond_timedwait() completely. Instead, we have to - * stick to the realtime clock. Nevermind it screws everything uå when ntpdate + * stick to the realtime clock. Nevermind it screws everything up when ntpdate * warps the wall clock. */ # undef CLOCK_MONOTONIC @@ -125,25 +125,28 @@ char *mstrtime( char *psz_buffer, mtime_t date ) * \param psz_buffer should be a buffer at least MSTRTIME_MAX_SIZE characters * \return psz_buffer is returned so this can be used as printf parameter. */ -char *secstotimestr( char *psz_buffer, int i_seconds ) +char *secstotimestr( char *psz_buffer, int32_t i_seconds ) { - int i_hours, i_mins; - i_mins = i_seconds / 60; - i_hours = i_mins / 60 ; - if( i_hours ) + if( unlikely(i_seconds < 0) ) { - snprintf( psz_buffer, MSTRTIME_MAX_SIZE, "%d:%2.2d:%2.2d", - (int) i_hours, - (int) (i_mins % 60), - (int) (i_seconds % 60) ); + secstotimestr( psz_buffer + 1, -i_seconds ); + *psz_buffer = '-'; + return psz_buffer; } + + div_t d; + + d = div( i_seconds, 60 ); + i_seconds = d.rem; + d = div( d.quot, 60 ); + + if( d.quot ) + snprintf( psz_buffer, MSTRTIME_MAX_SIZE, "%u:%02u:%02u", + d.quot, d.rem, i_seconds ); else - { - snprintf( psz_buffer, MSTRTIME_MAX_SIZE, "%2.2d:%2.2d", - (int) i_mins , - (int) (i_seconds % 60) ); - } - return( psz_buffer ); + snprintf( psz_buffer, MSTRTIME_MAX_SIZE, "%02u:%02u", + d.rem, i_seconds ); + return psz_buffer; } #if defined (HAVE_CLOCK_NANOSLEEP)