From: Richard W.M. Jones Date: Sat, 28 Apr 2012 19:40:39 +0000 (+0100) Subject: 32 bit: Fix for 31 bit int overflow in time_t. X-Git-Tag: 0.7.3~3 X-Git-Url: http://git.annexia.org/?p=whenjobs.git;a=commitdiff_plain;h=d6da1b74e241e79eb0af9c01e390e98ceead3a49;ds=sidebyside 32 bit: Fix for 31 bit int overflow in time_t. --- 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