diff options
author | Richard Jones <rjones@redhat.com> | 2009-11-20 14:10:06 +0000 |
---|---|---|
committer | Richard Jones <rjones@redhat.com> | 2009-11-20 18:03:36 +0000 |
commit | 2d9953097b6d3b71122d444a4550047e97aee009 (patch) | |
tree | 6737890f7e75cc83b635eccf2fb839b5cec3c616 /daemon/augeas.c | |
parent | 8fd7f255d611d2092a244c4a48c6b7b4529e98b1 (diff) | |
download | libguestfs-2d9953097b6d3b71122d444a4550047e97aee009.tar.gz libguestfs-2d9953097b6d3b71122d444a4550047e97aee009.tar.xz libguestfs-2d9953097b6d3b71122d444a4550047e97aee009.zip |
availability: Add optional groups and implement guestfs_available call.
The current groups are defined very conservatively using the
following criteria:
(a) Would be impossible to implement on Windows because of
sheer architectural differences (eg: mknod).
(b) Already optional (augeas, inotify).
(c) Not currently optional but not implemented on older RHEL and
Debian releases (ntfs-3g.probe, scrub, zerofree).
The optional groups I've defined according to these criteria are:
. augeas
. inotify
. linuxfsuuid
. linuxmodules
. linuxxattrs
. lvm2
. mknod
. ntfs3g
. scrub
. selinux
. zerofree
(Note that these choices don't prevent us from adding more
optional groups in future. On the other hand to avoid breaking
ABIs we would not wish to change the above groups).
The rest of this large commit is really just implementation:
Each optional function is classified using Optional "group"
flag in the generator.
The daemon has to implement a function
int optgroup_<name>_available (void);
for each optional group. Some of these functions are fixed at
compile time, and some do simple run-time tests.
The do_available implementation in the daemon looks up the correct
function in a table and runs it.
We document the optional groups in the guestfs(3) man page.
Also: I added a NOT_AVAILABLE macro in order to unify all the
existing places where we had a message equivalent to
"function __func__ is not available".
Diffstat (limited to 'daemon/augeas.c')
-rw-r--r-- | daemon/augeas.c | 52 |
1 files changed, 26 insertions, 26 deletions
diff --git a/daemon/augeas.c b/daemon/augeas.c index b56012cd..be53d294 100644 --- a/daemon/augeas.c +++ b/daemon/augeas.c @@ -29,6 +29,7 @@ #include "daemon.h" #include "actions.h" +#include "optgroups.h" #ifdef HAVE_AUGEAS /* The Augeas handle. We maintain a single handle per daemon, which @@ -45,6 +46,18 @@ static augeas *aug = NULL; } \ } \ while (0) + +int +optgroup_augeas_available (void) +{ + return 1; +} +#else /* !HAVE_AUGEAS */ +int +optgroup_augeas_available (void) +{ + return 0; +} #endif /* We need to rewrite the root path so it is based at /sysroot. */ @@ -75,8 +88,7 @@ do_aug_init (const char *root, int flags) return 0; #else - reply_with_error ("%s is not available", __func__); - return -1; + NOT_AVAILABLE (-1); #endif } @@ -91,8 +103,7 @@ do_aug_close (void) return 0; #else - reply_with_error ("%s is not available", __func__); - return -1; + NOT_AVAILABLE (-1); #endif } @@ -111,8 +122,7 @@ do_aug_defvar (const char *name, const char *expr) } return r; #else - reply_with_error ("%s is not available", __func__); - return -1; + NOT_AVAILABLE (-1); #endif } @@ -133,8 +143,7 @@ do_aug_defnode (const char *name, const char *expr, const char *val) r.b = created; return &r; #else - reply_with_error ("%s is not available", __func__); - return NULL; + NOT_AVAILABLE (-1); #endif } @@ -176,8 +185,7 @@ do_aug_get (const char *path) return v; /* Caller frees. */ #else - reply_with_error ("%s is not available", __func__); - return NULL; + NOT_AVAILABLE (NULL); #endif } @@ -197,8 +205,7 @@ do_aug_set (const char *path, const char *val) return 0; #else - reply_with_error ("%s is not available", __func__); - return -1; + NOT_AVAILABLE (-1); #endif } @@ -218,8 +225,7 @@ do_aug_insert (const char *path, const char *label, int before) return 0; #else - reply_with_error ("%s is not available", __func__); - return -1; + NOT_AVAILABLE (-1); #endif } @@ -239,8 +245,7 @@ do_aug_rm (const char *path) return r; #else - reply_with_error ("%s is not available", __func__); - return -1; + NOT_AVAILABLE (-1); #endif } @@ -260,8 +265,7 @@ do_aug_mv (const char *src, const char *dest) return 0; #else - reply_with_error ("%s is not available", __func__); - return -1; + NOT_AVAILABLE (-1); #endif } @@ -295,8 +299,7 @@ do_aug_match (const char *path) return matches; /* Caller frees. */ #else - reply_with_error ("%s is not available", __func__); - return NULL; + NOT_AVAILABLE (NULL); #endif } @@ -313,8 +316,7 @@ do_aug_save (void) return 0; #else - reply_with_error ("%s is not available", __func__); - return -1; + NOT_AVAILABLE (-1); #endif } @@ -331,8 +333,7 @@ do_aug_load (void) return 0; #else - reply_with_error ("%s is not available", __func__); - return -1; + NOT_AVAILABLE (-1); #endif } @@ -379,7 +380,6 @@ do_aug_ls (const char *path) sort_strings (matches, count_strings ((void *) matches)); return matches; /* Caller frees. */ #else - reply_with_error ("%s is not available", __func__); - return NULL; + NOT_AVAILABLE (NULL); #endif } |