Package: nvram-wakeup Version: 0.97-12 Severity: normal The calculation of a regular wake-up time in /usr/share/vdr/shutdown-hooks/S90.nvram-wakeup is too simplistic and yields wake-up times too far ahead in the future potentially leading to missed recordings in VDR. The bug is triggered e.g. with REGULAR_TIME=08:00 and REGULAR_DAYS=1 when executed between 00:00 and 07:59, yielding a wake-up time at 08:00 the next day.
The following patch seems to fix this problem for me: --- /tmp/S90.nvram-wakeup.org 2007-11-13 23:43:57.000000000 +0100 +++ /tmp/S90.nvram-wakeup.new 2007-11-13 23:43:12.000000000 +0100 @@ -43,8 +43,55 @@ TIMER=$1 +# convert the time representation 'HH:MM' into seconds from midnight +function hm2sec () +{ + local HM=$1 + # extract hours + local HOUR=${HM%:*} + # remove leading zero + HOUR=${HOUR#0} + # extract minutes + local MIN=${HM#*:} + # remove leading zero + MIN=${MIN#0} + if [ $HOUR -lt 0 ] || [ $HOUR -gt 23 ] || [ $MIN -lt 0 ] || [ $MIN -gt 59 ]; then + echo "Invalid input for hm2sec: $HM" >&2 + return 2 + else + echo $[ $HOUR * 3600 + $MIN * 60 ] + fi +} + +# convert the local time zone into an offset in seconds +function tz2sec () +{ + local TZ=$(date +%z) + local TZHM=${TZ:1:2}:${TZ:3:2} + local SEC=$(hm2sec $TZHM) + local SIGN=${TZ:0:1} + [ $SIGN == '-' ] && SEC=$(( $SEC * -1 )) + echo $SEC +} + if [ $REGULAR_DAYS -gt 0 ]; then - REGULAR_TIMER=$((`date -d "$REGULAR_TIME" +%s` + $REGULAR_DAYS * 24 * 60 * 60)) + # GMT epoch + NOW=$(date +%s) + # epoch offset by local TZ + TZNOW=$[ $NOW + `tz2sec` ] + # wake-up interval in seconds + STRIDE=$(($REGULAR_DAYS * 24 * 3600)) + # rounddown (TZNOW, STRIDE) -> midnight of the most recent wake-up interval + INTERVAL_BASE=$((($TZNOW / $STRIDE) * $STRIDE)) + # REGULAR_TIME configuration option in seconds: offset into each wake-up interval to match configured time of day + INTERVAL_OFFSET=`hm2sec $REGULAR_TIME` + # base + offset -> time to wake up at - due to the addition, this may lie in the past or the future + WAKEUP_TIME=$(($INTERVAL_BASE + $INTERVAL_OFFSET)) + # convert wake-up time to GMT + WAKEUP_TIME=$(($WAKEUP_TIME - `tz2sec`)) + # if in the past, this wake-up interval has truly expired and we need to wake up at the next one + [ $WAKEUP_TIME -lt $NOW ] && WAKEUP_TIME=$(($WAKEUP_TIME + $STRIDE)) + REGULAR_TIMER=$WAKEUP_TIME # when no vdr timer is set or vdr timer starts later than regular timer: if [ $TIMER -eq 0 ] || [ $TIMER -gt 0 -a $REGULAR_TIMER -lt $TIMER ] ; then -- System Information: Debian Release: 4.0 APT prefers stable APT policy: (500, 'stable') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.23.1 Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968) Versions of packages nvram-wakeup depends on: ii debconf [debconf-2.0] 1.5.11 Debian configuration management sy ii libc6 2.3.6.ds1-13etch2 GNU C Library: Shared libraries ii makedev 2.3.1-83 creates device files in /dev nvram-wakeup recommends no packages. -- debconf information: * nvram-wakeup/install_instruction: -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]