X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=generator%2Fgenerator_pr.ml;fp=generator%2Fgenerator_pr.ml;h=eef565e0c745aa32788e0a210cb6fc8a17ca62ab;hp=0000000000000000000000000000000000000000;hb=04d8209077d2227eb1d42695ba71147f78987050;hpb=264629b9f0ace1062b453b2d0ae55e48385189d3 diff --git a/generator/generator_pr.ml b/generator/generator_pr.ml new file mode 100644 index 0000000..eef565e --- /dev/null +++ b/generator/generator_pr.ml @@ -0,0 +1,56 @@ +(* libguestfs + * Copyright (C) 2009-2010 Red Hat Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + *) + +(* Please read generator/README first. *) + +open Unix +open Printf + +open Generator_utils + +(* 'pr' prints to the current output file. *) +let chan = ref Pervasives.stdout +let lines = ref 0 +let pr fs = + ksprintf + (fun str -> + let i = count_chars '\n' str in + lines := !lines + i; + output_string !chan str + ) fs + +let output_to filename k = + let filename_new = filename ^ ".new" in + chan := open_out filename_new; + k (); + close_out !chan; + chan := Pervasives.stdout; + + (* Is the new file different from the current file? *) + if Sys.file_exists filename && files_equal filename filename_new then + unlink filename_new (* same, so skip it *) + else ( + (* different, overwrite old one *) + (try chmod filename 0o644 with Unix_error _ -> ()); + rename filename_new filename; + chmod filename 0o444; + printf "written %s\n%!" filename; + ) + +let get_lines_generated () = + !lines