Ownership using segment tree (not finished).
[virt-df.git] / lib / diskimage_lvm2_metadata.ml
1 (* 'df' command for virtual domains.
2    (C) Copyright 2007-2008 Richard W.M. Jones, Red Hat Inc.
3    http://libvirt.org/
4
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 2 of the License, or
8    (at your option) any later version.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program; if not, write to the Free Software
17    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  *)
19
20 (* Part of the parser for LVM2 metadata. *)
21
22 type metadata = metastmt list
23
24 and metastmt = string * metavalue
25
26 and metavalue =
27   | Metadata of metadata                (* name { ... } *)
28   | String of string                    (* name = "..." *)
29   | Int of Int63.t
30   | Float of float
31   | List of metavalue list              (* name = [...] *)
32
33 let rec output_metadata chan md =
34   _output_metadata chan "" md
35
36 and _output_metadata chan prefix = function
37   | [] -> ()
38   | (name, value) :: rest ->
39       output_string chan prefix;
40       output_string chan name;
41       output_string chan " = ";
42       output_metavalue chan prefix value;
43       output_string chan "\n";
44       _output_metadata chan prefix rest
45
46 and output_metavalue chan prefix = function
47   | Metadata md ->
48       output_string chan "{\n";
49       _output_metadata chan (prefix ^ "  ") md;
50       output_string chan prefix;
51       output_string chan "}";
52   | String str ->
53       output_char chan '"';
54       output_string chan str;
55       output_char chan '"';
56   | Int i ->
57       output_string chan (Int63.to_string i)
58   | Float f ->
59       output_string chan (string_of_float f)
60   | List [] -> ()
61   | List [x] -> output_metavalue chan prefix x
62   | List (x :: xs) ->
63       output_metavalue chan prefix x;
64       output_string chan ", ";
65       output_metavalue chan prefix (List xs)