32 bit: Fix for 31 bit int overflow in time_t.
authorRichard W.M. Jones <rjones@redhat.com>
Sat, 28 Apr 2012 19:40:39 +0000 (20:40 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Sat, 28 Apr 2012 19:40:39 +0000 (20:40 +0100)
daemon/daemon.ml

index 64d4012..bbaab13 100644 (file)
@@ -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