about summary refs log tree commit diff
path: root/snooze.c
diff options
context:
space:
mode:
Diffstat (limited to 'snooze.c')
-rw-r--r--snooze.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/snooze.c b/snooze.c
index b88db77..a5df967 100644
--- a/snooze.c
+++ b/snooze.c
@@ -31,7 +31,7 @@ static long slack = 60;
 #define SLEEP_PHASE 300
 static int nflag, vflag;
 
-static int timewait = 1;
+static int timewait = -1;
 static int randdelay = 0;
 static char *timefile;
 
@@ -200,6 +200,7 @@ isotime(const struct tm *tm)
 int main(int argc, char *argv[])
 {
 	int c;
+	time_t t;
 	time_t now = time(0);
 
 	/* default: every day at 00:00:00 */
@@ -248,8 +249,16 @@ int main(int argc, char *argv[])
 		if (stat(timefile, &st) < 0) {
 			if (errno != ENOENT)
 				perror("stat");
+			t = start - slack - 1 - timewait;
+		} else {
+			t = st.st_mtime;
+		}
+		if (timewait == -1) {
+			while (t < start - slack)
+				t = find_next(t + 1);
+			start = t;
 		} else {
-			if (st.st_mtime + timewait > start)
+			if (t + timewait > start)
 				start = st.st_mtime + timewait;
 		}
 	}
@@ -271,7 +280,7 @@ int main(int argc, char *argv[])
 		start += delay;
 	}
 
-	time_t t = find_next(start);
+	t = find_next(start);
 	if (t < 0) {
 		fprintf(stderr, "no satisfying date found within a year.\n");
 		exit(2);