From d6da1b74e241e79eb0af9c01e390e98ceead3a49 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Sat, 28 Apr 2012 20:40:39 +0100 Subject: [PATCH] 32 bit: Fix for 31 bit int overflow in time_t. --- daemon/daemon.ml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/daemon/daemon.ml b/daemon/daemon.ml index 64d4012..bbaab13 100644 --- a/daemon/daemon.ml +++ b/daemon/daemon.ml @@ -309,7 +309,9 @@ and reload_files () = else ( let len = String.length file in let t = String.sub file 6 (len-slen-6) in - try Some (int_of_string t) with Failure "int_of_string" -> None + (* Use int64 because t won't necessarily fit into 31 bit int. *) + try Some (Int64.of_string t) + with Failure "int_of_string" -> assert false ) ) files in let times = List.rev (List.sort compare times) in @@ -319,11 +321,11 @@ and reload_files () = (* Unlink the older files. *) List.iter ( fun t -> - try unlink (dir // sprintf "jobs__%d%s" t suffix) + try unlink (dir // sprintf "jobs__%Ld%s" t suffix) with Unix_error _ -> () ) xs; (* Return the newest (highest numbered) file. *) - Some (dir // sprintf "jobs__%d%s" x suffix) in + Some (dir // sprintf "jobs__%Ld%s" x suffix) in (* As we are reloading the file, we want to create a new state * that has no jobs, but has all the variables from the previous -- 1.8.3.1