let files_diffs f1 f2 =
  let com = Printf.sprintf "diff %s %s"
      (Filename.quote f1) (Filename.quote f2)
  in
  let ic =
    try Unix.open_process_in com
    with
      Unix.Unix_error (e,s1,s2) ->
        failwith (Printf.sprintf "%s: %s %s" (Unix.error_message e) s1 s2)
  in
  let final () = try ignore(Unix.close_process_in ic) with _ -> () in
  try_finalize from_channel ic final ()