Rename the current available and feature_available into internal daemon
functions, and provide non-daemon functions wrapping them at library
side. This will make it possible to e.g. add caching for them.
Should be only refactoring, no actual behaviour change.
---
daemon/available.c | 4 +-
generator/actions.ml | 192 ++++++++++++++++++++++++++++-----------------------
po/POTFILES | 1 +
src/MAX_PROC_NR | 2 +-
src/Makefile.am | 1 +
src/available.c | 34 +++++++++
6 files changed, 143 insertions(+), 91 deletions(-)
create mode 100644 src/available.c
diff --git a/daemon/available.c b/daemon/available.c
index 54c6b9b..6409b90 100644
--- a/daemon/available.c
+++ b/daemon/available.c
@@ -67,13 +67,13 @@ available (char *const *groups, int error_on_unavailable)
}
int
-do_feature_available (char *const *groups)
+do_internal_feature_available (char *const *groups)
{
return available (groups, 0);
}
int
-do_available (char *const *groups)
+do_internal_available (char *const *groups)
{
if (available (groups, 1) == -1)
return -1;
diff --git a/generator/actions.ml b/generator/actions.ml
index 7ecd384..6348c88 100644
--- a/generator/actions.ml
+++ b/generator/actions.ml
@@ -3412,6 +3412,92 @@ C<guestfs_get_identifier>." };
longdesc = "\
Get the handle identifier. See C<guestfs_set_identifier>." };
+ { defaults with
+ name = "available"; added = (1, 0, 80);
+ style = RErr, [StringList "groups"], [];
+ tests = [
+ InitNone, Always, TestRun [["available"; ""]], []
+ ];
+ shortdesc = "test availability of some parts of the API";
+ longdesc = "\
+This command is used to check the availability of some
+groups of functionality in the appliance, which not all builds of
+the libguestfs appliance will be able to provide.
+
+The libguestfs groups, and the functions that those
+groups correspond to, are listed in L<guestfs(3)/AVAILABILITY>.
+You can also fetch this list at runtime by calling
+C<guestfs_available_all_groups>.
+
+The argument C<groups> is a list of group names, eg:
+C<[\"inotify\", \"augeas\"]> would check for the availability
of
+the Linux inotify functions and Augeas (configuration file
+editing) functions.
+
+The command returns no error if I<all> requested groups are available.
+
+It fails with an error if one or more of the requested
+groups is unavailable in the appliance.
+
+If an unknown group name is included in the
+list of groups then an error is always returned.
+
+I<Notes:>
+
+=over 4
+
+=item *
+
+C<guestfs_feature_available> is the same as this call, but
+with a slightly simpler to use API: that call returns a boolean
+true/false instead of throwing an error.
+
+=item *
+
+You must call C<guestfs_launch> before calling this function.
+
+The reason is because we don't know what groups are
+supported by the appliance/daemon until it is running and can
+be queried.
+
+=item *
+
+If a group of functions is available, this does not necessarily
+mean that they will work. You still have to check for errors
+when calling individual API functions even if they are
+available.
+
+=item *
+
+It is usually the job of distro packagers to build
+complete functionality into the libguestfs appliance.
+Upstream libguestfs, if built from source with all
+requirements satisfied, will support everything.
+
+=item *
+
+This call was added in version C<1.0.80>. In previous
+versions of libguestfs all you could do would be to speculatively
+execute a command to find out if the daemon implemented it.
+See also C<guestfs_version>.
+
+=back
+
+See also C<guestfs_filesystem_available>." };
+
+ { defaults with
+ name = "feature_available"; added = (1, 21, 26);
+ style = RBool "isavailable", [StringList "groups"], [];
+ tests = [
+ InitNone, Always, TestResultTrue [["feature_available"; ""]],
[]
+ ];
+ shortdesc = "test availability of some parts of the API";
+ longdesc = "\
+This is the same as C<guestfs_available>, but unlike that
+call it returns a simple true/false boolean result, instead
+of throwing an exception if a feature is not found. For
+other documentation see C<guestfs_available>." };
+
]
(* daemon_functions are any functions which cause some action
@@ -8031,80 +8117,6 @@ To create a file with a pattern of repeating bytes
use C<guestfs_fill_pattern>." };
{ defaults with
- name = "available"; added = (1, 0, 80);
- style = RErr, [StringList "groups"], [];
- proc_nr = Some 216;
- tests = [
- InitNone, Always, TestRun [["available"; ""]], []
- ];
- shortdesc = "test availability of some parts of the API";
- longdesc = "\
-This command is used to check the availability of some
-groups of functionality in the appliance, which not all builds of
-the libguestfs appliance will be able to provide.
-
-The libguestfs groups, and the functions that those
-groups correspond to, are listed in L<guestfs(3)/AVAILABILITY>.
-You can also fetch this list at runtime by calling
-C<guestfs_available_all_groups>.
-
-The argument C<groups> is a list of group names, eg:
-C<[\"inotify\", \"augeas\"]> would check for the availability
of
-the Linux inotify functions and Augeas (configuration file
-editing) functions.
-
-The command returns no error if I<all> requested groups are available.
-
-It fails with an error if one or more of the requested
-groups is unavailable in the appliance.
-
-If an unknown group name is included in the
-list of groups then an error is always returned.
-
-I<Notes:>
-
-=over 4
-
-=item *
-
-C<guestfs_feature_available> is the same as this call, but
-with a slightly simpler to use API: that call returns a boolean
-true/false instead of throwing an error.
-
-=item *
-
-You must call C<guestfs_launch> before calling this function.
-
-The reason is because we don't know what groups are
-supported by the appliance/daemon until it is running and can
-be queried.
-
-=item *
-
-If a group of functions is available, this does not necessarily
-mean that they will work. You still have to check for errors
-when calling individual API functions even if they are
-available.
-
-=item *
-
-It is usually the job of distro packagers to build
-complete functionality into the libguestfs appliance.
-Upstream libguestfs, if built from source with all
-requirements satisfied, will support everything.
-
-=item *
-
-This call was added in version C<1.0.80>. In previous
-versions of libguestfs all you could do would be to speculatively
-execute a command to find out if the daemon implemented it.
-See also C<guestfs_version>.
-
-=back
-
-See also C<guestfs_filesystem_available>." };
-
- { defaults with
name = "dd"; added = (1, 0, 80);
style = RErr, [Dev_or_Path "src"; Dev_or_Path "dest"], [];
proc_nr = Some 217;
@@ -11763,20 +11775,6 @@ This is only used to debug RHBZ#914931. Note that this
deliberately crashes guestfsd." };
{ defaults with
- name = "feature_available"; added = (1, 21, 26);
- style = RBool "isavailable", [StringList "groups"], [];
- proc_nr = Some 398;
- tests = [
- InitNone, Always, TestResultTrue [["feature_available"; ""]],
[]
- ];
- shortdesc = "test availability of some parts of the API";
- longdesc = "\
-This is the same as C<guestfs_available>, but unlike that
-call it returns a simple true/false boolean result, instead
-of throwing an exception if a feature is not found. For
-other documentation see C<guestfs_available>." };
-
- { defaults with
name = "syslinux"; added = (1, 21, 27);
style = RErr, [Device "device"], [OString "directory"];
proc_nr = Some 399;
@@ -12780,6 +12778,24 @@ this will fail and set errno as ENOTSUP.
See also L<ntfsresize(8)>, L<resize2fs(8)>, L<btrfs(8)>,
L<xfs_info(8)>." };
+ { defaults with
+ name = "internal_available"; added = (1, 31, 25);
+ style = RErr, [StringList "groups"], [];
+ proc_nr = Some 458;
+ visibility = VInternal;
+ shortdesc = "test availability of some parts of the API";
+ longdesc = "\
+This is the internal call which implements C<guestfs_available>." };
+
+ { defaults with
+ name = "internal_feature_available"; added = (1, 31, 25);
+ style = RBool "isavailable", [StringList "groups"], [];
+ proc_nr = Some 459;
+ visibility = VInternal;
+ shortdesc = "test availability of some parts of the API";
+ longdesc = "\
+This is the internal call which implements C<guestfs_feature_available>." };
+
]
(* Non-API meta-commands available only in guestfish.
diff --git a/po/POTFILES b/po/POTFILES
index 32f88a1..d87d668 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -300,6 +300,7 @@ src/actions-support.c
src/actions-variants.c
src/alloc.c
src/appliance.c
+src/available.c
src/bindtests.c
src/canonical-name.c
src/cleanup.c
diff --git a/src/MAX_PROC_NR b/src/MAX_PROC_NR
index de2a00c..658bd78 100644
--- a/src/MAX_PROC_NR
+++ b/src/MAX_PROC_NR
@@ -1 +1 @@
-457
+459
diff --git a/src/Makefile.am b/src/Makefile.am
index 4515c4d..25c6fa3 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -83,6 +83,7 @@ libguestfs_la_SOURCES = \
actions-variants.c \
alloc.c \
appliance.c \
+ available.c \
bindtests.c \
canonical-name.c \
command.c \
diff --git a/src/available.c b/src/available.c
new file mode 100644
index 0000000..6738449
--- /dev/null
+++ b/src/available.c
@@ -0,0 +1,34 @@
+/* libguestfs
+ * Copyright (C) 2015 Red Hat Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <config.h>
+
+#include "guestfs.h"
+#include "guestfs-internal-actions.h"
+
+int
+guestfs_impl_available (guestfs_h *g, char *const *groups)
+{
+ return guestfs_internal_available (g, groups);
+}
+
+int
+guestfs_impl_feature_available (guestfs_h *g, char *const *groups)
+{
+ return guestfs_internal_feature_available (g, groups);
+}
--
2.1.0