]> git.netwichtig.de Git - user/henk/code/snooze.git/blobdiff - snooze.c
Reschedule when time moved backwards
[user/henk/code/snooze.git] / snooze.c
index 73de94e1d7c5f0f01f53bab263e6f631a00ac81b..3a5185d7f13a30fbd7354e379de0fe6960f4cb0d 100644 (file)
--- a/snooze.c
+++ b/snooze.c
@@ -230,6 +230,7 @@ int main(int argc, char *argv[])
        int c;
        time_t t;
        time_t now = time(0);
+       time_t last = 0;
 
        /* default: every day at 00:00:00 */
        memset(weekday, '*', sizeof weekday);
@@ -279,7 +280,7 @@ int main(int argc, char *argv[])
                                perror("stat");
                        t = start - slack - 1 - timewait;
                } else {
-                       t = st.st_mtime;
+                       t = st.st_mtime + 1;
                }
                if (timewait == -1) {
                        while (t < start - slack)
@@ -348,6 +349,11 @@ int main(int argc, char *argv[])
 
        while (!alarm_rang) {
                now = time(0);
+               if (now < last) {
+                       t = find_next(now);
+                       if (vflag)
+                               printf("Time moved backwards, rescheduled for %s\n", isotime(tm));
+               }
                t = mktime(tm);
                if (t <= now) {
                        if (now - t <= slack)  // still about time
@@ -365,6 +371,7 @@ int main(int argc, char *argv[])
                        struct timespec ts;
                        ts.tv_nsec = 0;
                        ts.tv_sec = t - now > SLEEP_PHASE ? SLEEP_PHASE : t - now;
+                       last = now;
                        nanosleep(&ts, 0);
                        // we just iterate again when this exits early
                }