From d899367f6a884f36066a6908336466c179aa6e5f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andreas=20P=C3=A5hlsson?= Date: Fri, 25 Jan 2008 00:15:15 +0200 Subject: [PATCH] s-s-d: Use system timersub and fix timeval normalization in multiplication Closes: #462225 --- ChangeLog | 6 ++++++ THANKS | 1 + debian/changelog | 2 ++ utils/start-stop-daemon.c | 21 ++++----------------- 4 files changed, 13 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index 69c26cc7..c8742bbf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-01-25 Andreas PÃ¥hlsson + + * utils/start-stop-daemon.c (tsub): Remove function. + (tmul): Fix normalization. + (run_stop_schedule): Use timersub instead of tsub. + 2008-01-24 Raphael Hertzog * scripts/dpkg-genchanges.pl: Warn if the current version is diff --git a/THANKS b/THANKS index 6109ce9a..c61d1273 100644 --- a/THANKS +++ b/THANKS @@ -6,6 +6,7 @@ Alberto Garcia Anand Kumria Andreas Barth Andreas Metzler +Andreas PÃ¥hlsson Andrew Ferrier Andrew Hobson Andrew Suffield diff --git a/debian/changelog b/debian/changelog index d554e2f5..1eb62469 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,6 +6,8 @@ dpkg (1.14.17) UNRELEASED; urgency=low * Add new keybinding in dselect to restore all selections back to whatever's currently installed. Closes: #151540 Thanks to Colin Watson. + * Use system timersub and fix timeval normalization in multiplication in + start-stop-daemon. Thanks to Andreas PÃ¥hlsson. Closes: #462225 [ Raphael Hertzog ] * Add a warning displayed by dpkg-genchanges if the current version is diff --git a/utils/start-stop-daemon.c b/utils/start-stop-daemon.c index 79d07c34..1494e55e 100644 --- a/utils/start-stop-daemon.c +++ b/utils/start-stop-daemon.c @@ -216,26 +216,13 @@ xgettimeofday(struct timeval *tv) fatal("gettimeofday failed: %s", strerror(errno)); } -static void -tsub(struct timeval *r, struct timeval *a, struct timeval *b) -{ - r->tv_sec = (time_t)(a->tv_sec - b->tv_sec); - r->tv_usec = (suseconds_t)(a->tv_usec - b->tv_usec); - if (r->tv_usec < 0) { - --r->tv_sec; - r->tv_usec += 1000000; - } -} - static void tmul(struct timeval *a, int b) { a->tv_sec *= b; a->tv_usec *= b; - if (a->tv_usec >= 1000000) { - ++a->tv_sec; - a->tv_usec -= 1000000; - } + a->tv_sec = a->tv_sec + a->tv_usec / 1000000; + a->tv_usec %= 1000000; } static long @@ -1200,8 +1187,8 @@ run_stop_schedule(void) if (ratio < 10) ratio++; - tsub(&maxinterval, &stopat, &after); - tsub(&interval, &after, &before); + timersub(&stopat, &after, &maxinterval); + timersub(&after, &before, &interval); tmul(&interval, ratio); if (interval.tv_sec < 0 || interval.tv_usec < 0) -- 2.39.5