File: tmpfile.ml

package info (click to toggle)
camlimages 2.00-3
  • links: PTS
  • area: main
  • in suites: woody
  • size: 3,536 kB
  • ctags: 2,325
  • sloc: ml: 10,848; ansic: 2,396; makefile: 599; sh: 30
file content (37 lines) | stat: -rw-r--r-- 1,612 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
(***********************************************************************)
(*                                                                     *)
(*                           Objective Caml                            *)
(*                                                                     *)
(*            Franois Pessaux, projet Cristal, INRIA Rocquencourt     *)
(*            Pierre Weis, projet Cristal, INRIA Rocquencourt          *)
(*            Jun Furuse, projet Cristal, INRIA Rocquencourt           *)
(*                                                                     *)
(*  Copyright 1999,2000,2001,2002,2001,2002                            *)
(*  Institut National de Recherche en Informatique et en Automatique.  *)
(*  Distributed only by permission.                                    *)
(*                                                                     *)
(***********************************************************************)

(* temporary directory *)
let tmp_dir = 
  ref (try Sys.getenv "CAMLIMAGESTMPDIR" with Not_found -> "/tmp")

let cnter = ref 0

let new_tmp_file_name prefx =
  if not (Sys.file_exists !tmp_dir) then 
    raise (Failure ("Temporary directory " ^ !tmp_dir ^ " does not exist"));
  let rec fname () =
    incr cnter;
    let name =
      Filename.concat !tmp_dir (Printf.sprintf "camlimages-%s-%d" prefx !cnter)
    in
    if not (Sys.file_exists name) then name
    else begin
      prerr_endline ("Warning: tmp file "^name^" already exists");
      fname ()
    end
  in
  let f = fname () in
  at_exit (fun () -> try Sys.remove f with _ -> ());
  f