generator: Put all the daemon procedure numbers (proc_nr) into a single table.

Daemon 'proc_nr's have to be assigned monotonically and uniquely to
each daemon function.  However in practice it can be difficult to work
out which is the next free proc_nr.  Placing all of them into a single
table in a new file (proc_nr.ml) should make this easier.
This commit is contained in:
Richard W.M. Jones
2017-02-21 10:58:41 +00:00
parent cf3001c2ed
commit 3a4a491712
16 changed files with 583 additions and 512 deletions

View File

@@ -349,7 +349,8 @@ To add a new API action there are two changes:
=item 1. =item 1.
You need to add a description of the call (name, parameters, return You need to add a description of the call (name, parameters, return
type, tests, documentation) to F<generator/actions_*.ml>. type, tests, documentation) to F<generator/actions_*.ml> and
possibly F<generator/proc_nr.ml>.
There are two sorts of API action, depending on whether the call goes There are two sorts of API action, depending on whether the call goes
through to the daemon in the appliance, or is serviced entirely by the through to the daemon in the appliance, or is serviced entirely by the

View File

@@ -93,6 +93,8 @@ sources = \
pr.mli \ pr.mli \
prepopts.ml \ prepopts.ml \
prepopts.mli \ prepopts.mli \
proc_nr.ml \
proc_nr.mli \
python.ml \ python.ml \
python.mli \ python.mli \
ruby.ml \ ruby.ml \
@@ -116,6 +118,7 @@ objects = \
common_utils.cmo \ common_utils.cmo \
types.cmo \ types.cmo \
utils.cmo \ utils.cmo \
proc_nr.cmo \
actions_augeas.cmo \ actions_augeas.cmo \
actions_core.cmo \ actions_core.cmo \
actions_core_deprecated.cmo \ actions_core_deprecated.cmo \

View File

@@ -28,6 +28,7 @@ everything is exported.
Some notable files in this directory: Some notable files in this directory:
actions_*.ml The libguestfs API. actions_*.ml The libguestfs API.
proc_nr.ml Procedure numbers associated with each API.
structs.ml Structures returned by the API. structs.ml Structures returned by the API.
c.ml Generate C API. c.ml Generate C API.
<lang>.ml Generate bindings for <lang>. <lang>.ml Generate bindings for <lang>.

View File

@@ -187,7 +187,7 @@ let generate_xdr () =
pr "};\n"; pr "};\n";
pr "\n"; pr "\n";
pr "const GUESTFS_MAX_PROC_NR = %d;\n" max_proc_nr; pr "const GUESTFS_MAX_PROC_NR = %d;\n" Proc_nr.max_proc_nr;
pr "\n"; pr "\n";
pr "/* The remote procedure call protocol. */\n"; pr "/* The remote procedure call protocol. */\n";

View File

@@ -108,37 +108,43 @@ let non_daemon_functions, daemon_functions =
List.map make_camel_case_if_not_set daemon_functions in List.map make_camel_case_if_not_set daemon_functions in
non_daemon_functions, daemon_functions non_daemon_functions, daemon_functions
(* Before we add the non_daemon_functions and daemon_functions to (* Verify that no proc_nr field is set. These are added from
* a single list, verify the proc_nr field which should be the only * [proc_nr.ml] and must not be present in the [actions_*.ml] files.
* difference between them. (Note more detailed checking is done *)
* in checks.ml). let () =
let check_no_proc_nr = function
| { proc_nr = None } -> ()
| { name = name; proc_nr = Some _ } ->
failwithf "definition of %s must not include proc_nr, use proc_nr.ml to define procedure numbers" name
in
List.iter check_no_proc_nr non_daemon_functions;
List.iter check_no_proc_nr daemon_functions
(* Now add proc_nr to all daemon functions using the mapping table
* from [proc_nr.ml].
*)
let daemon_functions =
let assoc =
let map = List.map (fun (nr, name) -> (name, nr)) Proc_nr.proc_nr in
fun name ->
try List.assoc name map
with Not_found ->
failwithf "no proc_nr listed for %s" name
in
List.map (
fun f -> { f with proc_nr = Some (assoc f.name) }
) daemon_functions
(* Check there are no entries in the proc_nr table which aren't
* associated with a daemon function.
*) *)
let () = let () =
List.iter ( List.iter (
function fun (_, name) ->
| { name = name; proc_nr = None } -> if not (List.exists (fun { name = n } -> name = n) daemon_functions) then
failwithf "daemon function %s should have proc_nr = Some n > 0" name failwithf "proc_nr entry for %s does not correspond to a daemon function"
| { name = name; proc_nr = Some n } when n <= 0 -> name
failwithf "daemon function %s should have proc_nr = Some n > 0" name ) Proc_nr.proc_nr
| { proc_nr = Some _ } -> ()
) daemon_functions;
List.iter (
function
| { name = name; proc_nr = Some _ } ->
failwithf "non-daemon function %s should have proc_nr = None" name
| { proc_nr = None } -> ()
) non_daemon_functions
(* This is used to generate the lib/MAX_PROC_NR file which
* contains the maximum procedure number, a surrogate for the
* ABI version number. See lib/Makefile.am for the details.
*)
let max_proc_nr =
let proc_nrs = List.map (
function { proc_nr = Some n } -> n | { proc_nr = None } -> assert false
) daemon_functions in
List.fold_left max 0 proc_nrs
(* All functions. *) (* All functions. *)
let actions = non_daemon_functions @ daemon_functions let actions = non_daemon_functions @ daemon_functions

View File

@@ -52,7 +52,3 @@ val is_documented : Types.action -> bool
val test_functions : Types.action list val test_functions : Types.action list
(** Internal test functions used to test the language bindings. *) (** Internal test functions used to test the language bindings. *)
val max_proc_nr : int
(** The largest procedure number used (also saved in [lib/MAX_PROC_NR] and
used as the minor version number of the shared library). *)

View File

@@ -26,7 +26,6 @@ let daemon_functions = [
{ defaults with { defaults with
name = "aug_init"; added = (0, 0, 7); name = "aug_init"; added = (0, 0, 7);
style = RErr, [Pathname "root"; Int "flags"], []; style = RErr, [Pathname "root"; Int "flags"], [];
proc_nr = Some 16;
tests = [ tests = [
InitBasicFS, Always, TestResultString ( InitBasicFS, Always, TestResultString (
[["mkdir"; "/etc"]; [["mkdir"; "/etc"];
@@ -91,7 +90,6 @@ To find out more about Augeas, see L<http://augeas.net/>." };
{ defaults with { defaults with
name = "aug_close"; added = (0, 0, 7); name = "aug_close"; added = (0, 0, 7);
style = RErr, [], []; style = RErr, [], [];
proc_nr = Some 26;
shortdesc = "close the current Augeas handle"; shortdesc = "close the current Augeas handle";
longdesc = "\ longdesc = "\
Close the current Augeas handle and free up any resources Close the current Augeas handle and free up any resources
@@ -102,7 +100,6 @@ Augeas functions." };
{ defaults with { defaults with
name = "aug_defvar"; added = (0, 0, 7); name = "aug_defvar"; added = (0, 0, 7);
style = RInt "nrnodes", [String "name"; OptString "expr"], []; style = RInt "nrnodes", [String "name"; OptString "expr"], [];
proc_nr = Some 17;
shortdesc = "define an Augeas variable"; shortdesc = "define an Augeas variable";
longdesc = "\ longdesc = "\
Defines an Augeas variable C<name> whose value is the result Defines an Augeas variable C<name> whose value is the result
@@ -115,7 +112,6 @@ C<0> if C<expr> evaluates to something which is not a nodeset." };
{ defaults with { defaults with
name = "aug_defnode"; added = (0, 0, 7); name = "aug_defnode"; added = (0, 0, 7);
style = RStruct ("nrnodescreated", "int_bool"), [String "name"; String "expr"; String "val"], []; style = RStruct ("nrnodescreated", "int_bool"), [String "name"; String "expr"; String "val"], [];
proc_nr = Some 18;
shortdesc = "define an Augeas node"; shortdesc = "define an Augeas node";
longdesc = "\ longdesc = "\
Defines a variable C<name> whose value is the result of Defines a variable C<name> whose value is the result of
@@ -132,7 +128,6 @@ if a node was created." };
{ defaults with { defaults with
name = "aug_get"; added = (0, 0, 7); name = "aug_get"; added = (0, 0, 7);
style = RString "val", [String "augpath"], []; style = RString "val", [String "augpath"], [];
proc_nr = Some 19;
shortdesc = "look up the value of an Augeas path"; shortdesc = "look up the value of an Augeas path";
longdesc = "\ longdesc = "\
Look up the value associated with C<path>. If C<path> Look up the value associated with C<path>. If C<path>
@@ -141,7 +136,6 @@ matches exactly one node, the C<value> is returned." };
{ defaults with { defaults with
name = "aug_set"; added = (0, 0, 7); name = "aug_set"; added = (0, 0, 7);
style = RErr, [String "augpath"; String "val"], []; style = RErr, [String "augpath"; String "val"], [];
proc_nr = Some 20;
tests = [ tests = [
InitBasicFS, Always, TestResultString ( InitBasicFS, Always, TestResultString (
[["mkdir"; "/etc"]; [["mkdir"; "/etc"];
@@ -162,7 +156,6 @@ C<guestfs_aug_clear> call." };
{ defaults with { defaults with
name = "aug_insert"; added = (0, 0, 7); name = "aug_insert"; added = (0, 0, 7);
style = RErr, [String "augpath"; String "label"; Bool "before"], []; style = RErr, [String "augpath"; String "label"; Bool "before"], [];
proc_nr = Some 21;
tests = [ tests = [
InitBasicFS, Always, TestResultString ( InitBasicFS, Always, TestResultString (
[["mkdir"; "/etc"]; [["mkdir"; "/etc"];
@@ -189,7 +182,6 @@ with a bracketed index C<[N]>." };
{ defaults with { defaults with
name = "aug_rm"; added = (0, 0, 7); name = "aug_rm"; added = (0, 0, 7);
style = RInt "nrnodes", [String "augpath"], []; style = RInt "nrnodes", [String "augpath"], [];
proc_nr = Some 22;
shortdesc = "remove an Augeas path"; shortdesc = "remove an Augeas path";
longdesc = "\ longdesc = "\
Remove C<path> and all of its children. Remove C<path> and all of its children.
@@ -199,7 +191,6 @@ On success this returns the number of entries which were removed." };
{ defaults with { defaults with
name = "aug_mv"; added = (0, 0, 7); name = "aug_mv"; added = (0, 0, 7);
style = RErr, [String "src"; String "dest"], []; style = RErr, [String "src"; String "dest"], [];
proc_nr = Some 23;
shortdesc = "move Augeas node"; shortdesc = "move Augeas node";
longdesc = "\ longdesc = "\
Move the node C<src> to C<dest>. C<src> must match exactly Move the node C<src> to C<dest>. C<src> must match exactly
@@ -208,7 +199,6 @@ one node. C<dest> is overwritten if it exists." };
{ defaults with { defaults with
name = "aug_match"; added = (0, 0, 7); name = "aug_match"; added = (0, 0, 7);
style = RStringList "matches", [String "augpath"], []; style = RStringList "matches", [String "augpath"], [];
proc_nr = Some 24;
shortdesc = "return Augeas nodes which match augpath"; shortdesc = "return Augeas nodes which match augpath";
longdesc = "\ longdesc = "\
Returns a list of paths which match the path expression C<path>. Returns a list of paths which match the path expression C<path>.
@@ -218,7 +208,6 @@ exactly one node in the current tree." };
{ defaults with { defaults with
name = "aug_save"; added = (0, 0, 7); name = "aug_save"; added = (0, 0, 7);
style = RErr, [], []; style = RErr, [], [];
proc_nr = Some 25;
shortdesc = "write all pending Augeas changes to disk"; shortdesc = "write all pending Augeas changes to disk";
longdesc = "\ longdesc = "\
This writes all pending changes to disk. This writes all pending changes to disk.
@@ -229,7 +218,6 @@ how files are saved." };
{ defaults with { defaults with
name = "aug_load"; added = (0, 0, 7); name = "aug_load"; added = (0, 0, 7);
style = RErr, [], []; style = RErr, [], [];
proc_nr = Some 27;
shortdesc = "load files into the tree"; shortdesc = "load files into the tree";
longdesc = "\ longdesc = "\
Load files into the tree. Load files into the tree.
@@ -240,7 +228,6 @@ details." };
{ defaults with { defaults with
name = "aug_ls"; added = (0, 0, 8); name = "aug_ls"; added = (0, 0, 8);
style = RStringList "matches", [String "augpath"], []; style = RStringList "matches", [String "augpath"], [];
proc_nr = Some 28;
tests = [ tests = [
InitBasicFS, Always, TestResult ( InitBasicFS, Always, TestResult (
[["mkdir"; "/etc"]; [["mkdir"; "/etc"];
@@ -257,7 +244,6 @@ C<path/*> and sorting the resulting nodes into alphabetical order." };
{ defaults with { defaults with
name = "aug_clear"; added = (1, 3, 4); name = "aug_clear"; added = (1, 3, 4);
style = RErr, [String "augpath"], []; style = RErr, [String "augpath"], [];
proc_nr = Some 239;
shortdesc = "clear Augeas path"; shortdesc = "clear Augeas path";
longdesc = "\ longdesc = "\
Set the value associated with C<path> to C<NULL>. This Set the value associated with C<path> to C<NULL>. This
@@ -266,7 +252,6 @@ is the same as the L<augtool(1)> C<clear> command." };
{ defaults with { defaults with
name = "aug_transform"; added = (1, 35, 2); name = "aug_transform"; added = (1, 35, 2);
style = RErr, [String "lens"; String "file"], [ OBool "remove"]; style = RErr, [String "lens"; String "file"], [ OBool "remove"];
proc_nr = Some 469;
shortdesc = "add/remove an Augeas lens transformation"; shortdesc = "add/remove an Augeas lens transformation";
longdesc = "\ longdesc = "\
Add an Augeas transformation for the specified C<lens> so it can Add an Augeas transformation for the specified C<lens> so it can

File diff suppressed because it is too large Load Diff

View File

@@ -113,7 +113,6 @@ let daemon_functions = [
style = RErr, [Device "device"; style = RErr, [Device "device";
Int "cyls"; Int "heads"; Int "sectors"; Int "cyls"; Int "heads"; Int "sectors";
StringList "lines"], []; StringList "lines"], [];
proc_nr = Some 43;
deprecated_by = Some "part_add"; deprecated_by = Some "part_add";
shortdesc = "create partitions on a block device"; shortdesc = "create partitions on a block device";
longdesc = "\ longdesc = "\
@@ -143,7 +142,6 @@ C<guestfs_part_init>" };
{ defaults with { defaults with
name = "blockdev_setbsz"; added = (1, 9, 3); name = "blockdev_setbsz"; added = (1, 9, 3);
style = RErr, [Device "device"; Int "blocksize"], []; style = RErr, [Device "device"; Int "blocksize"], [];
proc_nr = Some 61;
deprecated_by = Some "mkfs"; deprecated_by = Some "mkfs";
shortdesc = "set blocksize of block device"; shortdesc = "set blocksize of block device";
longdesc = "\ longdesc = "\
@@ -156,7 +154,6 @@ C<blocksize> option of C<guestfs_mkfs>." };
{ defaults with { defaults with
name = "tgz_in"; added = (1, 0, 3); name = "tgz_in"; added = (1, 0, 3);
style = RErr, [FileIn "tarball"; Pathname "directory"], []; style = RErr, [FileIn "tarball"; Pathname "directory"], [];
proc_nr = Some 71;
deprecated_by = Some "tar_in"; deprecated_by = Some "tar_in";
cancellable = true; cancellable = true;
tests = [ tests = [
@@ -173,7 +170,6 @@ I<gzip compressed> tar file) into F<directory>." };
{ defaults with { defaults with
name = "tgz_out"; added = (1, 0, 3); name = "tgz_out"; added = (1, 0, 3);
style = RErr, [Pathname "directory"; FileOut "tarball"], []; style = RErr, [Pathname "directory"; FileOut "tarball"], [];
proc_nr = Some 72;
deprecated_by = Some "tar_out"; deprecated_by = Some "tar_out";
cancellable = true; cancellable = true;
shortdesc = "pack directory into compressed tarball"; shortdesc = "pack directory into compressed tarball";
@@ -184,7 +180,6 @@ it to local file C<tarball>." };
{ defaults with { defaults with
name = "set_e2label"; added = (1, 0, 15); name = "set_e2label"; added = (1, 0, 15);
style = RErr, [Device "device"; String "label"], []; style = RErr, [Device "device"; String "label"], [];
proc_nr = Some 80;
deprecated_by = Some "set_label"; deprecated_by = Some "set_label";
tests = [ tests = [
InitBasicFS, Always, TestResultString ( InitBasicFS, Always, TestResultString (
@@ -203,7 +198,6 @@ to return the existing label on a filesystem." };
{ defaults with { defaults with
name = "get_e2label"; added = (1, 0, 15); name = "get_e2label"; added = (1, 0, 15);
style = RString "label", [Device "device"], []; style = RString "label", [Device "device"], [];
proc_nr = Some 81;
deprecated_by = Some "vfs_label"; deprecated_by = Some "vfs_label";
shortdesc = "get the ext2/3/4 filesystem label"; shortdesc = "get the ext2/3/4 filesystem label";
longdesc = "\ longdesc = "\
@@ -213,7 +207,6 @@ C<device>." };
{ defaults with { defaults with
name = "set_e2uuid"; added = (1, 0, 15); name = "set_e2uuid"; added = (1, 0, 15);
style = RErr, [Device "device"; String "uuid"], []; style = RErr, [Device "device"; String "uuid"], [];
proc_nr = Some 82;
deprecated_by = Some "set_uuid"; deprecated_by = Some "set_uuid";
tests = [ tests = [
InitBasicFS, Always, TestResultString ( InitBasicFS, Always, TestResultString (
@@ -242,7 +235,6 @@ of a filesystem." };
{ defaults with { defaults with
name = "get_e2uuid"; added = (1, 0, 15); name = "get_e2uuid"; added = (1, 0, 15);
style = RString "uuid", [Device "device"], []; style = RString "uuid", [Device "device"], [];
proc_nr = Some 83;
deprecated_by = Some "vfs_uuid"; deprecated_by = Some "vfs_uuid";
tests = [ tests = [
(* We can't predict what UUID will be, so just check (* We can't predict what UUID will be, so just check
@@ -261,7 +253,6 @@ C<device>." };
style = RErr, [Device "device"; Int "partnum"; style = RErr, [Device "device"; Int "partnum";
Int "cyls"; Int "heads"; Int "sectors"; Int "cyls"; Int "heads"; Int "sectors";
String "line"], []; String "line"], [];
proc_nr = Some 99;
deprecated_by = Some "part_add"; deprecated_by = Some "part_add";
shortdesc = "modify a single partition on a block device"; shortdesc = "modify a single partition on a block device";
longdesc = "\ longdesc = "\
@@ -276,7 +267,6 @@ See also: C<guestfs_part_add>" };
{ defaults with { defaults with
name = "sfdisk_l"; added = (1, 0, 26); name = "sfdisk_l"; added = (1, 0, 26);
style = RString "partitions", [Device "device"], []; style = RString "partitions", [Device "device"], [];
proc_nr = Some 100;
deprecated_by = Some "part_list"; deprecated_by = Some "part_list";
shortdesc = "display the partition table"; shortdesc = "display the partition table";
longdesc = "\ longdesc = "\
@@ -289,7 +279,6 @@ See also: C<guestfs_part_list>" };
{ defaults with { defaults with
name = "e2fsck_f"; added = (1, 0, 29); name = "e2fsck_f"; added = (1, 0, 29);
style = RErr, [Device "device"], []; style = RErr, [Device "device"], [];
proc_nr = Some 108;
deprecated_by = Some "e2fsck"; deprecated_by = Some "e2fsck";
shortdesc = "check an ext2/ext3 filesystem"; shortdesc = "check an ext2/ext3 filesystem";
longdesc = "\ longdesc = "\
@@ -300,7 +289,6 @@ even if the filesystem appears to be clean (I<-f>)." };
{ defaults with { defaults with
name = "mkswap_L"; added = (1, 0, 55); name = "mkswap_L"; added = (1, 0, 55);
style = RErr, [String "label"; Device "device"], []; style = RErr, [String "label"; Device "device"], [];
proc_nr = Some 131;
deprecated_by = Some "mkswap"; deprecated_by = Some "mkswap";
tests = [ tests = [
InitEmpty, Always, TestRun ( InitEmpty, Always, TestRun (
@@ -318,7 +306,6 @@ a limitation of the kernel or swap tools." };
{ defaults with { defaults with
name = "mkswap_U"; added = (1, 0, 55); name = "mkswap_U"; added = (1, 0, 55);
style = RErr, [String "uuid"; Device "device"], []; style = RErr, [String "uuid"; Device "device"], [];
proc_nr = Some 132;
deprecated_by = Some "mkswap"; deprecated_by = Some "mkswap";
optional = Some "linuxfsuuid"; optional = Some "linuxfsuuid";
tests = [ tests = [
@@ -333,7 +320,6 @@ Create a swap partition on C<device> with UUID C<uuid>." };
{ defaults with { defaults with
name = "sfdiskM"; added = (1, 0, 55); name = "sfdiskM"; added = (1, 0, 55);
style = RErr, [Device "device"; StringList "lines"], []; style = RErr, [Device "device"; StringList "lines"], [];
proc_nr = Some 139;
deprecated_by = Some "part_add"; deprecated_by = Some "part_add";
shortdesc = "create partitions on a block device"; shortdesc = "create partitions on a block device";
longdesc = "\ longdesc = "\
@@ -349,7 +335,6 @@ and C<guestfs_part_disk>" };
{ defaults with { defaults with
name = "zfile"; added = (1, 0, 59); name = "zfile"; added = (1, 0, 59);
style = RString "description", [String "meth"; Pathname "path"], []; style = RString "description", [String "meth"; Pathname "path"], [];
proc_nr = Some 140;
deprecated_by = Some "file"; deprecated_by = Some "file";
shortdesc = "determine file type inside a compressed file"; shortdesc = "determine file type inside a compressed file";
longdesc = "\ longdesc = "\
@@ -364,7 +349,6 @@ process compressed files." };
{ defaults with { defaults with
name = "egrep"; added = (1, 0, 66); name = "egrep"; added = (1, 0, 66);
style = RStringList "lines", [String "regex"; Pathname "path"], []; style = RStringList "lines", [String "regex"; Pathname "path"], [];
proc_nr = Some 152;
protocol_limit_warning = true; protocol_limit_warning = true;
deprecated_by = Some "grep"; deprecated_by = Some "grep";
tests = [ tests = [
@@ -380,7 +364,6 @@ matching lines." };
{ defaults with { defaults with
name = "fgrep"; added = (1, 0, 66); name = "fgrep"; added = (1, 0, 66);
style = RStringList "lines", [String "pattern"; Pathname "path"], []; style = RStringList "lines", [String "pattern"; Pathname "path"], [];
proc_nr = Some 153;
protocol_limit_warning = true; protocol_limit_warning = true;
deprecated_by = Some "grep"; deprecated_by = Some "grep";
tests = [ tests = [
@@ -396,7 +379,6 @@ matching lines." };
{ defaults with { defaults with
name = "grepi"; added = (1, 0, 66); name = "grepi"; added = (1, 0, 66);
style = RStringList "lines", [String "regex"; Pathname "path"], []; style = RStringList "lines", [String "regex"; Pathname "path"], [];
proc_nr = Some 154;
protocol_limit_warning = true; protocol_limit_warning = true;
deprecated_by = Some "grep"; deprecated_by = Some "grep";
tests = [ tests = [
@@ -412,7 +394,6 @@ matching lines." };
{ defaults with { defaults with
name = "egrepi"; added = (1, 0, 66); name = "egrepi"; added = (1, 0, 66);
style = RStringList "lines", [String "regex"; Pathname "path"], []; style = RStringList "lines", [String "regex"; Pathname "path"], [];
proc_nr = Some 155;
protocol_limit_warning = true; protocol_limit_warning = true;
deprecated_by = Some "grep"; deprecated_by = Some "grep";
tests = [ tests = [
@@ -428,7 +409,6 @@ matching lines." };
{ defaults with { defaults with
name = "fgrepi"; added = (1, 0, 66); name = "fgrepi"; added = (1, 0, 66);
style = RStringList "lines", [String "pattern"; Pathname "path"], []; style = RStringList "lines", [String "pattern"; Pathname "path"], [];
proc_nr = Some 156;
protocol_limit_warning = true; protocol_limit_warning = true;
deprecated_by = Some "grep"; deprecated_by = Some "grep";
tests = [ tests = [
@@ -444,7 +424,6 @@ matching lines." };
{ defaults with { defaults with
name = "zgrep"; added = (1, 0, 66); name = "zgrep"; added = (1, 0, 66);
style = RStringList "lines", [String "regex"; Pathname "path"], []; style = RStringList "lines", [String "regex"; Pathname "path"], [];
proc_nr = Some 157;
protocol_limit_warning = true; protocol_limit_warning = true;
deprecated_by = Some "grep"; deprecated_by = Some "grep";
tests = [ tests = [
@@ -460,7 +439,6 @@ matching lines." };
{ defaults with { defaults with
name = "zegrep"; added = (1, 0, 66); name = "zegrep"; added = (1, 0, 66);
style = RStringList "lines", [String "regex"; Pathname "path"], []; style = RStringList "lines", [String "regex"; Pathname "path"], [];
proc_nr = Some 158;
protocol_limit_warning = true; protocol_limit_warning = true;
deprecated_by = Some "grep"; deprecated_by = Some "grep";
tests = [ tests = [
@@ -476,7 +454,6 @@ matching lines." };
{ defaults with { defaults with
name = "zfgrep"; added = (1, 0, 66); name = "zfgrep"; added = (1, 0, 66);
style = RStringList "lines", [String "pattern"; Pathname "path"], []; style = RStringList "lines", [String "pattern"; Pathname "path"], [];
proc_nr = Some 159;
protocol_limit_warning = true; protocol_limit_warning = true;
deprecated_by = Some "grep"; deprecated_by = Some "grep";
tests = [ tests = [
@@ -492,7 +469,7 @@ matching lines." };
{ defaults with { defaults with
name = "zgrepi"; added = (1, 0, 66); name = "zgrepi"; added = (1, 0, 66);
style = RStringList "lines", [String "regex"; Pathname "path"], []; style = RStringList "lines", [String "regex"; Pathname "path"], [];
proc_nr = Some 160;
protocol_limit_warning = true; protocol_limit_warning = true;
deprecated_by = Some "grep"; deprecated_by = Some "grep";
tests = [ tests = [
@@ -508,7 +485,6 @@ matching lines." };
{ defaults with { defaults with
name = "zegrepi"; added = (1, 0, 66); name = "zegrepi"; added = (1, 0, 66);
style = RStringList "lines", [String "regex"; Pathname "path"], []; style = RStringList "lines", [String "regex"; Pathname "path"], [];
proc_nr = Some 161;
protocol_limit_warning = true; protocol_limit_warning = true;
deprecated_by = Some "grep"; deprecated_by = Some "grep";
tests = [ tests = [
@@ -524,7 +500,6 @@ matching lines." };
{ defaults with { defaults with
name = "zfgrepi"; added = (1, 0, 66); name = "zfgrepi"; added = (1, 0, 66);
style = RStringList "lines", [String "pattern"; Pathname "path"], []; style = RStringList "lines", [String "pattern"; Pathname "path"], [];
proc_nr = Some 162;
protocol_limit_warning = true; protocol_limit_warning = true;
deprecated_by = Some "grep"; deprecated_by = Some "grep";
tests = [ tests = [
@@ -540,7 +515,6 @@ matching lines." };
{ defaults with { defaults with
name = "fallocate"; added = (1, 0, 66); name = "fallocate"; added = (1, 0, 66);
style = RErr, [Pathname "path"; Int "len"], []; style = RErr, [Pathname "path"; Int "len"], [];
proc_nr = Some 169;
deprecated_by = Some "fallocate64"; deprecated_by = Some "fallocate64";
tests = [ tests = [
InitScratchFS, Always, TestResult ( InitScratchFS, Always, TestResult (
@@ -560,7 +534,6 @@ attaches it as a device." };
{ defaults with { defaults with
name = "setcon"; added = (1, 0, 67); name = "setcon"; added = (1, 0, 67);
style = RErr, [String "context"], []; style = RErr, [String "context"], [];
proc_nr = Some 185;
optional = Some "selinux"; optional = Some "selinux";
deprecated_by = Some "selinux_relabel"; deprecated_by = Some "selinux_relabel";
shortdesc = "set SELinux security context"; shortdesc = "set SELinux security context";
@@ -573,7 +546,6 @@ See the documentation about SELINUX in L<guestfs(3)>." };
{ defaults with { defaults with
name = "getcon"; added = (1, 0, 67); name = "getcon"; added = (1, 0, 67);
style = RString "context", [], []; style = RString "context", [], [];
proc_nr = Some 186;
optional = Some "selinux"; optional = Some "selinux";
deprecated_by = Some "selinux_relabel"; deprecated_by = Some "selinux_relabel";
shortdesc = "get SELinux security context"; shortdesc = "get SELinux security context";
@@ -586,7 +558,6 @@ and C<guestfs_setcon>" };
{ defaults with { defaults with
name = "mkfs_b"; added = (1, 0, 68); name = "mkfs_b"; added = (1, 0, 68);
style = RErr, [String "fstype"; Int "blocksize"; Device "device"], []; style = RErr, [String "fstype"; Int "blocksize"; Device "device"], [];
proc_nr = Some 187;
deprecated_by = Some "mkfs"; deprecated_by = Some "mkfs";
tests = [ tests = [
InitEmpty, Always, TestResultString ( InitEmpty, Always, TestResultString (
@@ -624,7 +595,6 @@ the requested cluster size." };
{ defaults with { defaults with
name = "mke2journal"; added = (1, 0, 68); name = "mke2journal"; added = (1, 0, 68);
style = RErr, [Int "blocksize"; Device "device"], []; style = RErr, [Int "blocksize"; Device "device"], [];
proc_nr = Some 188;
deprecated_by = Some "mke2fs"; deprecated_by = Some "mke2fs";
tests = [ tests = [
InitEmpty, Always, TestResultString ( InitEmpty, Always, TestResultString (
@@ -647,7 +617,6 @@ to the command:
{ defaults with { defaults with
name = "mke2journal_L"; added = (1, 0, 68); name = "mke2journal_L"; added = (1, 0, 68);
style = RErr, [Int "blocksize"; String "label"; Device "device"], []; style = RErr, [Int "blocksize"; String "label"; Device "device"], [];
proc_nr = Some 189;
deprecated_by = Some "mke2fs"; deprecated_by = Some "mke2fs";
tests = [ tests = [
InitEmpty, Always, TestResultString ( InitEmpty, Always, TestResultString (
@@ -667,7 +636,6 @@ This creates an ext2 external journal on C<device> with label C<label>." };
{ defaults with { defaults with
name = "mke2journal_U"; added = (1, 0, 68); name = "mke2journal_U"; added = (1, 0, 68);
style = RErr, [Int "blocksize"; String "uuid"; Device "device"], []; style = RErr, [Int "blocksize"; String "uuid"; Device "device"], [];
proc_nr = Some 190;
deprecated_by = Some "mke2fs"; deprecated_by = Some "mke2fs";
optional = Some "linuxfsuuid"; optional = Some "linuxfsuuid";
tests = [ tests = [
@@ -688,7 +656,6 @@ This creates an ext2 external journal on C<device> with UUID C<uuid>." };
{ defaults with { defaults with
name = "mke2fs_J"; added = (1, 0, 68); name = "mke2fs_J"; added = (1, 0, 68);
style = RErr, [String "fstype"; Int "blocksize"; Device "device"; Device "journal"], []; style = RErr, [String "fstype"; Int "blocksize"; Device "device"; Device "journal"], [];
proc_nr = Some 191;
deprecated_by = Some "mke2fs"; deprecated_by = Some "mke2fs";
shortdesc = "make ext2/3/4 filesystem with external journal"; shortdesc = "make ext2/3/4 filesystem with external journal";
longdesc = "\ longdesc = "\
@@ -703,7 +670,6 @@ See also C<guestfs_mke2journal>." };
{ defaults with { defaults with
name = "mke2fs_JL"; added = (1, 0, 68); name = "mke2fs_JL"; added = (1, 0, 68);
style = RErr, [String "fstype"; Int "blocksize"; Device "device"; String "label"], []; style = RErr, [String "fstype"; Int "blocksize"; Device "device"; String "label"], [];
proc_nr = Some 192;
deprecated_by = Some "mke2fs"; deprecated_by = Some "mke2fs";
shortdesc = "make ext2/3/4 filesystem with external journal"; shortdesc = "make ext2/3/4 filesystem with external journal";
longdesc = "\ longdesc = "\
@@ -715,7 +681,6 @@ See also C<guestfs_mke2journal_L>." };
{ defaults with { defaults with
name = "mke2fs_JU"; added = (1, 0, 68); name = "mke2fs_JU"; added = (1, 0, 68);
style = RErr, [String "fstype"; Int "blocksize"; Device "device"; String "uuid"], []; style = RErr, [String "fstype"; Int "blocksize"; Device "device"; String "uuid"], [];
proc_nr = Some 193;
deprecated_by = Some "mke2fs"; deprecated_by = Some "mke2fs";
optional = Some "linuxfsuuid"; optional = Some "linuxfsuuid";
shortdesc = "make ext2/3/4 filesystem with external journal"; shortdesc = "make ext2/3/4 filesystem with external journal";
@@ -728,7 +693,6 @@ See also C<guestfs_mke2journal_U>." };
{ defaults with { defaults with
name = "dd"; added = (1, 0, 80); name = "dd"; added = (1, 0, 80);
style = RErr, [Dev_or_Path "src"; Dev_or_Path "dest"], []; style = RErr, [Dev_or_Path "src"; Dev_or_Path "dest"], [];
proc_nr = Some 217;
deprecated_by = Some "copy_device_to_device"; deprecated_by = Some "copy_device_to_device";
tests = [ tests = [
InitScratchFS, Always, TestResult ( InitScratchFS, Always, TestResult (
@@ -753,7 +717,6 @@ This command cannot do partial copies
{ defaults with { defaults with
name = "txz_in"; added = (1, 3, 2); name = "txz_in"; added = (1, 3, 2);
style = RErr, [FileIn "tarball"; Pathname "directory"], []; style = RErr, [FileIn "tarball"; Pathname "directory"], [];
proc_nr = Some 229;
deprecated_by = Some "tar_in"; deprecated_by = Some "tar_in";
optional = Some "xz"; cancellable = true; optional = Some "xz"; cancellable = true;
tests = [ tests = [
@@ -770,7 +733,6 @@ I<xz compressed> tar file) into F<directory>." };
{ defaults with { defaults with
name = "txz_out"; added = (1, 3, 2); name = "txz_out"; added = (1, 3, 2);
style = RErr, [Pathname "directory"; FileOut "tarball"], []; style = RErr, [Pathname "directory"; FileOut "tarball"], [];
proc_nr = Some 230;
deprecated_by = Some "tar_out"; deprecated_by = Some "tar_out";
optional = Some "xz"; cancellable = true; optional = Some "xz"; cancellable = true;
shortdesc = "pack directory into compressed tarball"; shortdesc = "pack directory into compressed tarball";
@@ -781,7 +743,6 @@ it to local file C<tarball> (as an xz compressed tar archive)." };
{ defaults with { defaults with
name = "llz"; added = (1, 17, 6); name = "llz"; added = (1, 17, 6);
style = RString "listing", [Pathname "directory"], []; style = RString "listing", [Pathname "directory"], [];
proc_nr = Some 305;
deprecated_by = Some "lgetxattrs"; deprecated_by = Some "lgetxattrs";
shortdesc = "list the files in a directory (long format with SELinux contexts)"; shortdesc = "list the files in a directory (long format with SELinux contexts)";
longdesc = "\ longdesc = "\

View File

@@ -39,7 +39,6 @@ let daemon_functions = [
{ defaults with { defaults with
name = "debug"; added = (1, 0, 11); name = "debug"; added = (1, 0, 11);
style = RString "result", [String "subcmd"; StringList "extraargs"], []; style = RString "result", [String "subcmd"; StringList "extraargs"], [];
proc_nr = Some 76;
visibility = VDebug; visibility = VDebug;
shortdesc = "debugging and internals"; shortdesc = "debugging and internals";
longdesc = "\ longdesc = "\
@@ -54,7 +53,6 @@ to find out what you can do." };
{ defaults with { defaults with
name = "debug_upload"; added = (1, 3, 5); name = "debug_upload"; added = (1, 3, 5);
style = RErr, [FileIn "filename"; String "tmpname"; Int "mode"], []; style = RErr, [FileIn "filename"; String "tmpname"; Int "mode"], [];
proc_nr = Some 241;
visibility = VDebug; visibility = VDebug;
cancellable = true; cancellable = true;
shortdesc = "upload a file to the appliance (internal use only)"; shortdesc = "upload a file to the appliance (internal use only)";

View File

@@ -45,7 +45,6 @@ let daemon_functions = [
{ defaults with { defaults with
name = "hivex_open"; added = (1, 19, 35); name = "hivex_open"; added = (1, 19, 35);
style = RErr, [Pathname "filename"], [OBool "verbose"; OBool "debug"; OBool "write"; OBool "unsafe"]; style = RErr, [Pathname "filename"], [OBool "verbose"; OBool "debug"; OBool "write"; OBool "unsafe"];
proc_nr = Some 350;
optional = Some "hivex"; optional = Some "hivex";
tests = [ tests = [
InitScratchFS, Always, TestRun ( InitScratchFS, Always, TestRun (
@@ -67,7 +66,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
{ defaults with { defaults with
name = "hivex_close"; added = (1, 19, 35); name = "hivex_close"; added = (1, 19, 35);
style = RErr, [], []; style = RErr, [], [];
proc_nr = Some 351;
optional = Some "hivex"; optional = Some "hivex";
shortdesc = "close the current hivex handle"; shortdesc = "close the current hivex handle";
longdesc = "\ longdesc = "\
@@ -78,7 +76,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
{ defaults with { defaults with
name = "hivex_root"; added = (1, 19, 35); name = "hivex_root"; added = (1, 19, 35);
style = RInt64 "nodeh", [], []; style = RInt64 "nodeh", [], [];
proc_nr = Some 352;
optional = Some "hivex"; optional = Some "hivex";
shortdesc = "return the root node of the hive"; shortdesc = "return the root node of the hive";
longdesc = "\ longdesc = "\
@@ -89,7 +86,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
{ defaults with { defaults with
name = "hivex_node_name"; added = (1, 19, 35); name = "hivex_node_name"; added = (1, 19, 35);
style = RString "name", [Int64 "nodeh"], []; style = RString "name", [Int64 "nodeh"], [];
proc_nr = Some 353;
optional = Some "hivex"; optional = Some "hivex";
shortdesc = "return the name of the node"; shortdesc = "return the name of the node";
longdesc = "\ longdesc = "\
@@ -100,7 +96,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
{ defaults with { defaults with
name = "hivex_node_children"; added = (1, 19, 35); name = "hivex_node_children"; added = (1, 19, 35);
style = RStructList ("nodehs", "hivex_node"), [Int64 "nodeh"], []; style = RStructList ("nodehs", "hivex_node"), [Int64 "nodeh"], [];
proc_nr = Some 354;
optional = Some "hivex"; optional = Some "hivex";
shortdesc = "return list of nodes which are subkeys of node"; shortdesc = "return list of nodes which are subkeys of node";
longdesc = "\ longdesc = "\
@@ -111,7 +106,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
{ defaults with { defaults with
name = "hivex_node_get_child"; added = (1, 19, 35); name = "hivex_node_get_child"; added = (1, 19, 35);
style = RInt64 "child", [Int64 "nodeh"; String "name"], []; style = RInt64 "child", [Int64 "nodeh"; String "name"], [];
proc_nr = Some 355;
optional = Some "hivex"; optional = Some "hivex";
shortdesc = "return the named child of node"; shortdesc = "return the named child of node";
longdesc = "\ longdesc = "\
@@ -123,7 +117,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
{ defaults with { defaults with
name = "hivex_node_parent"; added = (1, 19, 35); name = "hivex_node_parent"; added = (1, 19, 35);
style = RInt64 "parent", [Int64 "nodeh"], []; style = RInt64 "parent", [Int64 "nodeh"], [];
proc_nr = Some 356;
optional = Some "hivex"; optional = Some "hivex";
shortdesc = "return the parent of node"; shortdesc = "return the parent of node";
longdesc = "\ longdesc = "\
@@ -134,7 +127,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
{ defaults with { defaults with
name = "hivex_node_values"; added = (1, 19, 35); name = "hivex_node_values"; added = (1, 19, 35);
style = RStructList ("valuehs", "hivex_value"), [Int64 "nodeh"], []; style = RStructList ("valuehs", "hivex_value"), [Int64 "nodeh"], [];
proc_nr = Some 357;
optional = Some "hivex"; optional = Some "hivex";
shortdesc = "return list of values attached to node"; shortdesc = "return list of values attached to node";
longdesc = "\ longdesc = "\
@@ -145,7 +137,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
{ defaults with { defaults with
name = "hivex_node_get_value"; added = (1, 19, 35); name = "hivex_node_get_value"; added = (1, 19, 35);
style = RInt64 "valueh", [Int64 "nodeh"; String "key"], []; style = RInt64 "valueh", [Int64 "nodeh"; String "key"], [];
proc_nr = Some 358;
optional = Some "hivex"; optional = Some "hivex";
shortdesc = "return the named value"; shortdesc = "return the named value";
longdesc = "\ longdesc = "\
@@ -158,7 +149,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
{ defaults with { defaults with
name = "hivex_value_key"; added = (1, 19, 35); name = "hivex_value_key"; added = (1, 19, 35);
style = RString "key", [Int64 "valueh"], []; style = RString "key", [Int64 "valueh"], [];
proc_nr = Some 359;
optional = Some "hivex"; optional = Some "hivex";
shortdesc = "return the key field from the (key, datatype, data) tuple"; shortdesc = "return the key field from the (key, datatype, data) tuple";
longdesc = "\ longdesc = "\
@@ -169,7 +159,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
{ defaults with { defaults with
name = "hivex_value_type"; added = (1, 19, 35); name = "hivex_value_type"; added = (1, 19, 35);
style = RInt64 "datatype", [Int64 "valueh"], []; style = RInt64 "datatype", [Int64 "valueh"], [];
proc_nr = Some 360;
optional = Some "hivex"; optional = Some "hivex";
shortdesc = "return the data type from the (key, datatype, data) tuple"; shortdesc = "return the data type from the (key, datatype, data) tuple";
longdesc = "\ longdesc = "\
@@ -180,7 +169,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
{ defaults with { defaults with
name = "hivex_value_value"; added = (1, 19, 35); name = "hivex_value_value"; added = (1, 19, 35);
style = RBufferOut "databuf", [Int64 "valueh"], []; style = RBufferOut "databuf", [Int64 "valueh"], [];
proc_nr = Some 361;
optional = Some "hivex"; optional = Some "hivex";
shortdesc = "return the data field from the (key, datatype, data) tuple"; shortdesc = "return the data field from the (key, datatype, data) tuple";
longdesc = "\ longdesc = "\
@@ -193,7 +181,6 @@ See also: C<guestfs_hivex_value_utf8>." };
{ defaults with { defaults with
name = "hivex_commit"; added = (1, 19, 35); name = "hivex_commit"; added = (1, 19, 35);
style = RErr, [OptString "filename"], []; style = RErr, [OptString "filename"], [];
proc_nr = Some 362;
optional = Some "hivex"; optional = Some "hivex";
tests = [ tests = [
InitScratchFS, Always, TestRun ( InitScratchFS, Always, TestRun (
@@ -220,7 +207,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
{ defaults with { defaults with
name = "hivex_node_add_child"; added = (1, 19, 35); name = "hivex_node_add_child"; added = (1, 19, 35);
style = RInt64 "nodeh", [Int64 "parent"; String "name"], []; style = RInt64 "nodeh", [Int64 "parent"; String "name"], [];
proc_nr = Some 363;
optional = Some "hivex"; optional = Some "hivex";
shortdesc = "add a child node"; shortdesc = "add a child node";
longdesc = "\ longdesc = "\
@@ -231,7 +217,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
{ defaults with { defaults with
name = "hivex_node_delete_child"; added = (1, 19, 35); name = "hivex_node_delete_child"; added = (1, 19, 35);
style = RErr, [Int64 "nodeh"], []; style = RErr, [Int64 "nodeh"], [];
proc_nr = Some 364;
optional = Some "hivex"; optional = Some "hivex";
shortdesc = "delete a node (recursively)"; shortdesc = "delete a node (recursively)";
longdesc = "\ longdesc = "\
@@ -242,7 +227,6 @@ This is a wrapper around the L<hivex(3)> call of the same name." };
{ defaults with { defaults with
name = "hivex_node_set_value"; added = (1, 19, 35); name = "hivex_node_set_value"; added = (1, 19, 35);
style = RErr, [Int64 "nodeh"; String "key"; Int64 "t"; BufferIn "val"], []; style = RErr, [Int64 "nodeh"; String "key"; Int64 "t"; BufferIn "val"], [];
proc_nr = Some 365;
optional = Some "hivex"; optional = Some "hivex";
shortdesc = "set or replace a single value in a node"; shortdesc = "set or replace a single value in a node";
longdesc = "\ longdesc = "\

View File

@@ -189,7 +189,6 @@ let daemon_functions = [
{ defaults with { defaults with
name = "download_inode"; added = (1, 33, 14); name = "download_inode"; added = (1, 33, 14);
style = RErr, [Mountable "device"; Int64 "inode"; FileOut "filename"], []; style = RErr, [Mountable "device"; Int64 "inode"; FileOut "filename"], [];
proc_nr = Some 464;
optional = Some "sleuthkit"; optional = Some "sleuthkit";
progress = true; cancellable = true; progress = true; cancellable = true;
shortdesc = "download a file to the local machine given its inode"; shortdesc = "download a file to the local machine given its inode";
@@ -204,7 +203,6 @@ The command is capable of downloading deleted or inaccessible files." };
{ defaults with { defaults with
name = "internal_filesystem_walk"; added = (1, 33, 39); name = "internal_filesystem_walk"; added = (1, 33, 39);
style = RErr, [Mountable "device"; FileOut "filename"], []; style = RErr, [Mountable "device"; FileOut "filename"], [];
proc_nr = Some 466;
visibility = VInternal; visibility = VInternal;
optional = Some "libtsk"; optional = Some "libtsk";
shortdesc = "walk through the filesystem content"; shortdesc = "walk through the filesystem content";
@@ -213,7 +211,6 @@ The command is capable of downloading deleted or inaccessible files." };
{ defaults with { defaults with
name = "download_blocks"; added = (1, 33, 45); name = "download_blocks"; added = (1, 33, 45);
style = RErr, [Mountable "device"; Int64 "start"; Int64 "stop"; FileOut "filename"], [OBool "unallocated"]; style = RErr, [Mountable "device"; Int64 "start"; Int64 "stop"; FileOut "filename"], [OBool "unallocated"];
proc_nr = Some 468;
optional = Some "sleuthkit"; optional = Some "sleuthkit";
progress = true; cancellable = true; progress = true; cancellable = true;
shortdesc = "download the given data units from the disk"; shortdesc = "download the given data units from the disk";
@@ -237,7 +234,6 @@ which data units have not been overwritten yet." };
{ defaults with { defaults with
name = "internal_find_inode"; added = (1, 35, 6); name = "internal_find_inode"; added = (1, 35, 6);
style = RErr, [Mountable "device"; Int64 "inode"; FileOut "filename";], []; style = RErr, [Mountable "device"; Int64 "inode"; FileOut "filename";], [];
proc_nr = Some 470;
visibility = VInternal; visibility = VInternal;
optional = Some "libtsk"; optional = Some "libtsk";
shortdesc = "search the entries associated to the given inode"; shortdesc = "search the entries associated to the given inode";

View File

@@ -2367,4 +2367,4 @@ and generate_linker_script () =
pr "};\n" pr "};\n"
and generate_max_proc_nr () = and generate_max_proc_nr () =
pr "%d\n" max_proc_nr pr "%d\n" Proc_nr.max_proc_nr

View File

@@ -173,26 +173,6 @@ let () =
failwithf "long description of %s should begin with uppercase." name failwithf "long description of %s should begin with uppercase." name
) (actions @ fish_commands); ) (actions @ fish_commands);
(* Check proc_nrs don't overlap. *)
let proc_nrs =
List.map (
function
| { name = name; proc_nr = Some proc_nr } -> (name, proc_nr)
| _ -> assert false
) (actions |> daemon_functions) in
let proc_nrs =
List.sort (fun (_,nr1) (_,nr2) -> compare nr1 nr2) proc_nrs in
let rec loop = function
| [] -> ()
| [_] -> ()
| (name1,nr1) :: ((name2,nr2) :: _ as rest) when nr1 < nr2 ->
loop rest
| (name1,nr1) :: (name2,nr2) :: _ ->
failwithf "%s and %s have conflicting procedure numbers (%d, %d)"
name1 name2 nr1 nr2
in
loop proc_nrs;
(* Check flags. *) (* Check flags. *)
List.iter ( List.iter (
fun ({ name = name; style = ret, _, _ } as f) -> fun ({ name = name; style = ret, _, _ } as f) ->

515
generator/proc_nr.ml Normal file
View File

@@ -0,0 +1,515 @@
(* libguestfs
* Copyright (C) 2009-2017 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. *)
(* Each daemon function must have a unique procedure number. Add
* new functions at the end.
*)
let proc_nr = [
1, "mount";
2, "sync";
3, "touch";
5, "ll";
7, "list_devices";
8, "list_partitions";
9, "pvs";
10, "vgs";
11, "lvs";
12, "pvs_full";
13, "vgs_full";
14, "lvs_full";
16, "aug_init";
17, "aug_defvar";
18, "aug_defnode";
19, "aug_get";
20, "aug_set";
21, "aug_insert";
22, "aug_rm";
23, "aug_mv";
24, "aug_match";
25, "aug_save";
26, "aug_close";
27, "aug_load";
28, "aug_ls";
29, "rm";
30, "rmdir";
31, "rm_rf";
32, "mkdir";
33, "mkdir_p";
34, "chmod";
35, "chown";
36, "exists";
37, "is_file";
38, "is_dir";
39, "pvcreate";
40, "vgcreate";
41, "lvcreate";
43, "sfdisk";
44, "write_file";
45, "umount";
46, "mounts";
47, "umount_all";
48, "lvm_remove_all";
49, "file";
50, "command";
51, "command_lines";
54, "statvfs";
55, "tune2fs_l";
56, "blockdev_setro";
57, "blockdev_setrw";
58, "blockdev_getro";
59, "blockdev_getss";
60, "blockdev_getbsz";
61, "blockdev_setbsz";
62, "blockdev_getsz";
63, "blockdev_getsize64";
64, "blockdev_flushbufs";
65, "blockdev_rereadpt";
66, "upload";
67, "download";
68, "checksum";
69, "tar_in";
70, "tar_out";
71, "tgz_in";
72, "tgz_out";
73, "mount_ro";
74, "mount_options";
75, "mount_vfs";
76, "debug";
77, "lvremove";
78, "vgremove";
79, "pvremove";
80, "set_e2label";
81, "get_e2label";
82, "set_e2uuid";
83, "get_e2uuid";
84, "fsck";
85, "zero";
86, "grub_install";
87, "cp";
88, "cp_a";
89, "mv";
90, "drop_caches";
91, "dmesg";
92, "ping_daemon";
93, "equal";
94, "strings";
95, "strings_e";
96, "hexdump";
97, "zerofree";
98, "pvresize";
99, "sfdisk_N";
100, "sfdisk_l";
101, "sfdisk_kernel_geometry";
102, "sfdisk_disk_geometry";
103, "vg_activate_all";
104, "vg_activate";
105, "lvresize";
106, "resize2fs";
108, "e2fsck_f";
109, "sleep";
110, "ntfs_3g_probe";
111, "sh";
112, "sh_lines";
113, "glob_expand";
114, "scrub_device";
115, "scrub_file";
116, "scrub_freespace";
117, "mkdtemp";
118, "wc_l";
119, "wc_w";
120, "wc_c";
121, "head";
122, "head_n";
123, "tail";
124, "tail_n";
125, "df";
126, "df_h";
127, "du";
128, "initrd_list";
129, "mount_loop";
130, "mkswap";
131, "mkswap_L";
132, "mkswap_U";
133, "mknod";
134, "mkfifo";
135, "mknod_b";
136, "mknod_c";
137, "umask";
138, "readdir";
139, "sfdiskM";
140, "zfile";
141, "getxattrs";
142, "lgetxattrs";
143, "setxattr";
144, "lsetxattr";
145, "removexattr";
146, "lremovexattr";
147, "mountpoints";
148, "mkmountpoint";
149, "rmmountpoint";
151, "grep";
152, "egrep";
153, "fgrep";
154, "grepi";
155, "egrepi";
156, "fgrepi";
157, "zgrep";
158, "zegrep";
159, "zfgrep";
160, "zgrepi";
161, "zegrepi";
162, "zfgrepi";
163, "realpath";
164, "ln";
165, "ln_f";
166, "ln_s";
167, "ln_sf";
168, "readlink";
169, "fallocate";
170, "swapon_device";
171, "swapoff_device";
172, "swapon_file";
173, "swapoff_file";
174, "swapon_label";
175, "swapoff_label";
176, "swapon_uuid";
177, "swapoff_uuid";
178, "mkswap_file";
179, "inotify_init";
180, "inotify_add_watch";
181, "inotify_rm_watch";
182, "inotify_read";
183, "inotify_files";
184, "inotify_close";
185, "setcon";
186, "getcon";
187, "mkfs_b";
188, "mke2journal";
189, "mke2journal_L";
190, "mke2journal_U";
191, "mke2fs_J";
192, "mke2fs_JL";
193, "mke2fs_JU";
194, "modprobe";
195, "echo_daemon";
196, "find0";
197, "case_sensitive_path";
198, "vfs_type";
199, "truncate";
200, "truncate_size";
201, "utimens";
202, "mkdir_mode";
203, "lchown";
205, "internal_lxattrlist";
206, "internal_readlinklist";
207, "pread";
208, "part_init";
209, "part_add";
210, "part_disk";
211, "part_set_bootable";
212, "part_set_name";
213, "part_list";
214, "part_get_parttype";
215, "fill";
217, "dd";
218, "filesize";
219, "lvrename";
220, "vgrename";
221, "initrd_cat";
222, "pvuuid";
223, "vguuid";
224, "lvuuid";
225, "vgpvuuids";
226, "vglvuuids";
227, "copy_size";
228, "zero_device";
229, "txz_in";
230, "txz_out";
232, "vgscan";
233, "part_del";
234, "part_get_bootable";
235, "part_get_mbr_id";
236, "part_set_mbr_id";
237, "checksum_device";
238, "lvresize_free";
239, "aug_clear";
240, "get_umask";
241, "debug_upload";
242, "base64_in";
243, "base64_out";
244, "checksums_out";
245, "fill_pattern";
246, "internal_write";
247, "pwrite";
248, "resize2fs_size";
249, "pvresize_size";
250, "ntfsresize_size";
251, "available_all_groups";
252, "fallocate64";
253, "vfs_label";
254, "vfs_uuid";
255, "lvm_set_filter";
256, "lvm_clear_filter";
257, "luks_open";
258, "luks_open_ro";
259, "luks_close";
260, "luks_format";
261, "luks_format_cipher";
262, "luks_add_key";
263, "luks_kill_slot";
264, "is_lv";
265, "findfs_uuid";
266, "findfs_label";
267, "is_chardev";
268, "is_blockdev";
269, "is_fifo";
270, "is_symlink";
271, "is_socket";
272, "part_to_dev";
273, "upload_offset";
274, "download_offset";
275, "pwrite_device";
276, "pread_device";
277, "lvm_canonical_lv_name";
278, "mkfs";
279, "getxattr";
280, "lgetxattr";
281, "resize2fs_M";
282, "internal_autosync";
283, "is_zero";
284, "is_zero_device";
285, "list_9p";
286, "mount_9p";
287, "list_dm_devices";
288, "ntfsresize";
289, "btrfs_filesystem_resize";
290, "internal_write_append";
291, "compress_out";
292, "compress_device_out";
293, "part_to_partnum";
294, "copy_device_to_device";
295, "copy_device_to_file";
296, "copy_file_to_device";
297, "copy_file_to_file";
298, "tune2fs";
299, "md_create";
300, "list_md_devices";
301, "md_detail";
302, "md_stop";
303, "blkid";
304, "e2fsck";
305, "llz";
306, "wipefs";
307, "ntfsfix";
308, "ntfsclone_out";
309, "ntfsclone_in";
310, "set_label";
311, "zero_free_space";
312, "lvcreate_free";
313, "isoinfo_device";
314, "isoinfo";
315, "vgmeta";
316, "md_stat";
317, "mkfs_btrfs";
318, "get_e2attrs";
319, "set_e2attrs";
320, "get_e2generation";
321, "set_e2generation";
322, "btrfs_subvolume_snapshot";
323, "btrfs_subvolume_delete";
324, "btrfs_subvolume_create";
325, "btrfs_subvolume_list";
326, "btrfs_subvolume_set_default";
327, "btrfs_filesystem_sync";
328, "btrfs_filesystem_balance";
329, "btrfs_device_add";
330, "btrfs_device_delete";
331, "btrfs_set_seeding";
332, "btrfs_fsck";
333, "filesystem_available";
334, "fstrim";
335, "device_index";
336, "nr_devices";
337, "xfs_info";
338, "pvchange_uuid";
339, "pvchange_uuid_all";
340, "vgchange_uuid";
341, "vgchange_uuid_all";
342, "utsname";
343, "xfs_growfs";
344, "rsync";
345, "rsync_in";
346, "rsync_out";
347, "ls0";
348, "fill_dir";
349, "xfs_admin";
350, "hivex_open";
351, "hivex_close";
352, "hivex_root";
353, "hivex_node_name";
354, "hivex_node_children";
355, "hivex_node_get_child";
356, "hivex_node_parent";
357, "hivex_node_values";
358, "hivex_node_get_value";
359, "hivex_value_key";
360, "hivex_value_type";
361, "hivex_value_value";
362, "hivex_commit";
363, "hivex_node_add_child";
364, "hivex_node_delete_child";
365, "hivex_node_set_value";
366, "xfs_repair";
367, "rm_f";
368, "mke2fs";
369, "list_disk_labels";
370, "internal_hot_add_drive";
371, "internal_hot_remove_drive_precheck";
372, "internal_hot_remove_drive";
373, "mktemp";
374, "mklost_and_found";
375, "acl_get_file";
376, "acl_set_file";
377, "acl_delete_def_file";
378, "cap_get_file";
379, "cap_set_file";
380, "list_ldm_volumes";
381, "list_ldm_partitions";
382, "ldmtool_create_all";
383, "ldmtool_remove_all";
384, "ldmtool_scan";
385, "ldmtool_scan_devices";
386, "ldmtool_diskgroup_name";
387, "ldmtool_diskgroup_volumes";
388, "ldmtool_diskgroup_disks";
389, "ldmtool_volume_type";
390, "ldmtool_volume_hint";
391, "ldmtool_volume_partitions";
392, "part_set_gpt_type";
393, "part_get_gpt_type";
394, "rename";
395, "is_whole_device";
396, "internal_parse_mountable";
397, "internal_rhbz914931";
399, "syslinux";
400, "extlinux";
401, "cp_r";
402, "remount";
403, "set_uuid";
404, "journal_open";
405, "journal_close";
406, "journal_next";
407, "journal_skip";
408, "internal_journal_get";
409, "journal_get_data_threshold";
410, "journal_set_data_threshold";
411, "aug_setm";
412, "aug_label";
413, "internal_upload";
414, "internal_exit";
415, "copy_attributes";
416, "part_get_name";
417, "blkdiscard";
418, "blkdiscardzeroes";
419, "cpio_out";
420, "journal_get_realtime_usec";
421, "statns";
422, "lstatns";
423, "internal_lstatnslist";
424, "blockdev_setra";
425, "btrfs_subvolume_get_default";
426, "btrfs_subvolume_show";
427, "btrfs_quota_enable";
428, "btrfs_quota_rescan";
429, "btrfs_qgroup_limit";
430, "btrfs_qgroup_create";
431, "btrfs_qgroup_destroy";
432, "btrfs_qgroup_show";
433, "btrfs_qgroup_assign";
434, "btrfs_qgroup_remove";
435, "btrfs_scrub_start";
436, "btrfs_scrub_cancel";
437, "btrfs_scrub_resume";
438, "btrfs_balance_pause";
439, "btrfs_balance_cancel";
440, "btrfs_balance_resume";
443, "btrfs_filesystem_defragment";
444, "btrfs_rescue_chunk_recover";
445, "btrfs_rescue_super_recover";
446, "part_set_gpt_guid";
447, "part_get_gpt_guid";
448, "btrfs_balance_status";
449, "btrfs_scrub_status";
450, "btrfstune_seeding";
451, "btrfstune_enable_extended_inode_refs";
452, "btrfstune_enable_skinny_metadata_extent_refs";
453, "btrfs_image";
454, "part_get_mbr_part_type";
455, "btrfs_replace";
456, "set_uuid_random";
457, "vfs_minimum_size";
458, "internal_feature_available";
459, "part_set_disk_guid";
460, "part_get_disk_guid";
461, "part_set_disk_guid_random";
462, "part_expand_gpt";
463, "ntfscat_i";
464, "download_inode";
465, "btrfs_filesystem_show";
466, "internal_filesystem_walk";
467, "selinux_relabel";
468, "download_blocks";
469, "aug_transform";
470, "internal_find_inode";
471, "mksquashfs";
]
(* End of list. If adding a new entry, add it at the end of the list
* above. Do not modify anything below this line.
*----------------------------------------------------------------------
*)
let max_proc_nr =
(* Checks the list of procedure numbers is monotonically increasing,
* which guarantees there are no duplicates.
*)
let v = ref (fst (List.hd proc_nr) - 1) in
List.iter (
fun (v', _) ->
if !v >= v' then
failwith "proc_nr.ml: list of procedure numbers is not monotonically increasing";
v := v'
) proc_nr;
(* This is used to generate the lib/MAX_PROC_NR file which
* contains the maximum procedure number, a surrogate for the
* ABI version number. See lib/Makefile.am for the details.
*)
!v
let () =
(* Check there are no duplicate names. *)
let h = Hashtbl.create (List.length proc_nr) in
List.iter (
fun (_, name) ->
if Hashtbl.mem h name then
failwith "proc_nr.ml: duplicate name in procedure table";
Hashtbl.add h name true
) proc_nr

25
generator/proc_nr.mli Normal file
View File

@@ -0,0 +1,25 @@
(* libguestfs
* Copyright (C) 2009-2017 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
*)
val proc_nr : (int * string) list
(** The mapping of function names to procedure numbers, used for
daemon functions only. *)
val max_proc_nr : int
(** The largest procedure number used (also saved in [lib/MAX_PROC_NR] and
used as the minor version number of the shared library). *)