#!/bin/sh # # a workaround for the sucking date behavior of doscam, oscam and ncam # . /etc/init.d/globals BINARY="/var/bin/$2" FLAGFILE="/var/etc/.$2" case "$1" in "start") DATE_TODAY=$(date +%Y%m%d%H%M) # keep line below in sync with dummy time in rcS if [ "${DATE_TODAY:0:8}" = "20170101" ]; then # try to read date from flagfile test -e $FLAGFILE && \ DATE_FLAG=$(date -r $FLAGFILE +%Y%m%d%H%M) # try to read date from binary DATE_CAMD=$(strings $BINARY | grep -B1 "is smaller than the build date") DATE_CAMD=${DATE_CAMD:0:11} _m=$(echo $DATE_CAMD | cut -d\ -f1) _d=$(echo $DATE_CAMD | cut -d\ -f2) _y=$(echo $DATE_CAMD | cut -d\ -f3) c=0 for m in Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec; do c=$(($c+1)) if [ "$m" = "$_m" ]; then _m=$c break fi done test ${#_m} -lt 2 && _m=0$_m test ${#_d} -lt 2 && _d=0$_d DATE_CAMD=$_y$_m$_d # try to read date from versionfile DATE_IMAGE=$(cat /.version | grep "^version=" | cut -d= -f2) DATE_IMAGE=${DATE_IMAGE:4} c=0 for date in "$DATE_FLAG" "$DATE_CAMD" "$DATE_IMAGE"; do c=$(($c+1)) while [ ${#date} -lt 12 ]; do date=$date"0" done test $c = 1 && DATE_FLAG=$date test $c = 2 && DATE_CAMD=$date test $c = 3 && DATE_IMAGE=$date done SHOWINFO "manipulating date ... " for date in "$DATE_FLAG" "$DATE_CAMD" "$DATE_IMAGE"; do echo $date; done | sort -r -u | while read date; do if date -s $date > /dev/null; then SHOWINFO "done ($date)" break else continue fi SHOWWARN "failed" done fi ;; "stop") test -e $FLAGFILE && touch $FLAGFILE ;; *) echo "[$BASENAME] Usage: $0 {start|stop}" ;; esac