Browse Source

time: to/from sec conversions.

Trivial, but they make coding easier and more predictable.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Rusty Russell 12 years ago
parent
commit
fe5952874b
2 changed files with 42 additions and 1 deletions
  1. 7 1
      ccan/time/test/run.c
  2. 35 0
      ccan/time/time.h

+ 7 - 1
ccan/time/test/run.c

@@ -6,7 +6,7 @@ int main(void)
 {
 	struct timespec t1, t2, t3, zero = { 0, 0 };
 
-	plan_tests(58);
+	plan_tests(61);
 
 	/* Test time_now */
 	t1 = time_now();
@@ -51,6 +51,12 @@ int main(void)
 	t3 = time_sub(t2, t2);
 	ok1(time_eq(t3, zero));
 
+	/* time_from_sec / time_to_sec */
+	t3 = time_from_sec(500);
+	ok1(t3.tv_sec == 500);
+	ok1(t3.tv_nsec == 0);
+	ok1(time_to_sec(t3) == 500);
+
 	/* time_from_msec / time_to_msec */
 	t3 = time_from_msec(500);
 	ok1(t3.tv_sec == 0);

+ 35 - 0
ccan/time/time.h

@@ -210,6 +210,24 @@ struct timespec time_divide(struct timespec t, unsigned long div);
  */
 struct timespec time_multiply(struct timespec t, unsigned long mult);
 
+/**
+ * time_to_sec - return number of seconds
+ * @t: a time
+ *
+ * It's often more convenient to deal with time values as seconds.
+ * Note that this will fit into an unsigned 32-bit variable if it's a
+ * time of less than about 136 years.
+ *
+ * Example:
+ *	...
+ *	printf("Forking time is %u sec\n",
+ *	       (unsigned)time_to_sec(forking_time()));
+ */
+static inline uint64_t time_to_sec(struct timespec t)
+{
+	return t.tv_sec;
+}
+
 /**
  * time_to_msec - return number of milliseconds
  * @t: a time
@@ -275,6 +293,23 @@ static inline uint64_t time_to_nsec(struct timespec t)
 	return nsec;
 }
 
+/**
+ * time_from_sec - convert seconds to a timespec
+ * @msec: time in seconds
+ *
+ * Example:
+ *	// 1 minute timeout
+ *	#define TIMEOUT time_from_sec(60)
+ */
+static inline struct timespec time_from_sec(uint64_t sec)
+{
+	struct timespec t;
+
+	t.tv_nsec = 0;
+	t.tv_sec = sec;
+	return TIME_CHECK(t);
+}
+
 /**
  * time_from_msec - convert milliseconds to a timespec
  * @msec: time in milliseconds