5xxx functions from nbdkit.
[libguestfs-talks.git] / 2020-frama-c / 5300-timeval.html
diff --git a/2020-frama-c/5300-timeval.html b/2020-frama-c/5300-timeval.html
new file mode 100644 (file)
index 0000000..0548d43
--- /dev/null
@@ -0,0 +1,30 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>nbdkit tvdiff_usec</h1>
+
+<pre class="code">
+  <span class="comment">/*@
+    predicate valid_timeval (struct timeval tv) =
+      tv.tv_sec >= 0 && tv.tv_usec >= 0 && tv.tv_usec < 1000000;
+    logic integer tv_to_microseconds (struct timeval tv) =
+      tv.tv_sec * 1000000 + tv.tv_usec;
+   */</span>
+
+  /* Return the number of µs (microseconds) in y - x. */
+  <span class="comment">/*@
+    requires \valid_read (x) && \valid_read (y);
+    requires valid_timeval (*x) && valid_timeval (*y);
+    ensures \result == tv_to_microseconds (*y) - tv_to_microseconds (*x);
+   */</span>
+  static inline int64_t
+  tvdiff_usec (const struct timeval *x, const struct timeval *y)
+  {
+    int64_t usec;
+
+    usec = (y->tv_sec - x->tv_sec) * 1000000;
+    usec += y->tv_usec - x->tv_usec;
+    return usec;
+  }
+</pre>