X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=daemon%2Fdaemon.h;h=88d03065de3fcde6394b78d72e9e9d0589fe6e7e;hb=cb2ec65d5e4a4174b0f24635b971eeb2cdd964ff;hp=bfdde9d3282543fb914f2cb66dd3bcf49a95369b;hpb=3cf719bc077a5f0d4f1a79279a5ba6e41d53c9b9;p=libguestfs.git diff --git a/daemon/daemon.h b/daemon/daemon.h index bfdde9d..88d0306 100644 --- a/daemon/daemon.h +++ b/daemon/daemon.h @@ -19,6 +19,7 @@ #ifndef GUESTFSD_DAEMON_H #define GUESTFSD_DAEMON_H +#include #include #include #include @@ -55,13 +56,13 @@ extern void free_stringslen (char **argv, int len); #define COMMAND_FLAG_FOLD_STDOUT_ON_STDERR 1 extern int commandf (char **stdoutput, char **stderror, int flags, - const char *name, ...); + const char *name, ...); extern int commandrf (char **stdoutput, char **stderror, int flags, - const char *name, ...); + const char *name, ...); extern int commandvf (char **stdoutput, char **stderror, int flags, char const *const *argv); extern int commandrvf (char **stdoutput, char **stderror, int flags, - char const* const *argv); + char const* const *argv); extern char **split_lines (char *str); @@ -101,14 +102,26 @@ extern guestfs_int_lvm_pv_list *parse_command_line_pvs (void); extern guestfs_int_lvm_vg_list *parse_command_line_vgs (void); extern guestfs_int_lvm_lv_list *parse_command_line_lvs (void); +/*-- in optgroups.c (auto-generated) --*/ +struct optgroup { + const char *group; /* Name of the optional group. */ + int (*available) (void); /* Function to test availability. */ +}; +extern struct optgroup optgroups[]; + +/*-- in sync.c --*/ +/* Use this as a replacement for sync(2). */ +extern int sync_disks (void); + /*-- in proto.c --*/ extern void main_loop (int sock) __attribute__((noreturn)); /* ordinary daemon functions use these to indicate errors */ extern void reply_with_error (const char *fs, ...) __attribute__((format (printf,1,2))); -extern void reply_with_perror (const char *fs, ...) - __attribute__((format (printf,1,2))); +extern void reply_with_perror_errno (int err, const char *fs, ...) + __attribute__((format (printf,2,3))); +#define reply_with_perror(...) reply_with_perror_errno(errno, __VA_ARGS__) /* daemon functions that receive files (FileIn) should call * receive_file for each FileIn parameter. @@ -118,7 +131,7 @@ extern int receive_file (receive_cb cb, void *opaque); /* daemon functions that receive files (FileIn) can call this * to cancel incoming transfers (eg. if there is a local error), - * but they MUST then call reply_with_error or reply_with_perror. + * but they MUST then call reply_with_*. */ extern void cancel_receive (void); @@ -164,7 +177,7 @@ extern void reply (xdrproc_t xdrp, char *ret); */ #define RESOLVE_DEVICE(path,fail_stmt) \ do { \ - if (strncmp ((path), "/dev/", 5) != 0) { \ + if (STRNEQLEN ((path), "/dev/", 5)) { \ reply_with_error ("%s: %s: expecting a device name", __func__, (path)); \ fail_stmt; \ } \ @@ -184,7 +197,7 @@ extern void reply (xdrproc_t xdrp, char *ret); */ #define REQUIRE_ROOT_OR_RESOLVE_DEVICE(path,fail_stmt) \ do { \ - if (strncmp ((path), "/dev/", 5) == 0) \ + if (STREQLEN ((path), "/dev/", 5)) \ RESOLVE_DEVICE ((path), fail_stmt); \ else { \ NEED_ROOT (fail_stmt); \ @@ -224,6 +237,16 @@ extern void reply (xdrproc_t xdrp, char *ret); } \ while (0) +/* Marks functions which are not available. + * NB. Cannot be used for FileIn functions. + */ +#define NOT_AVAILABLE(errcode) \ + do { \ + reply_with_error ("%s: function not available", __func__); \ + return (errcode); \ + } \ + while (0) + #ifndef __attribute__ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) # define __attribute__(x) /* empty */ @@ -234,4 +257,14 @@ extern void reply (xdrproc_t xdrp, char *ret); # define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) #endif +#define STREQ(a,b) (strcmp((a),(b)) == 0) +#define STRCASEEQ(a,b) (strcasecmp((a),(b)) == 0) +#define STRNEQ(a,b) (strcmp((a),(b)) != 0) +#define STRCASENEQ(a,b) (strcasecmp((a),(b)) != 0) +#define STREQLEN(a,b,n) (strncmp((a),(b),(n)) == 0) +#define STRCASEEQLEN(a,b,n) (strncasecmp((a),(b),(n)) == 0) +#define STRNEQLEN(a,b,n) (strncmp((a),(b),(n)) != 0) +#define STRCASENEQLEN(a,b,n) (strncasecmp((a),(b),(n)) != 0) +#define STRPREFIX(a,b) (strncmp((a),(b),strlen((b))) == 0) + #endif /* GUESTFSD_DAEMON_H */