#include <stdio.h>
#include <stdarg.h>
+#include <stdint.h>
#include <errno.h>
#include <unistd.h>
#include <rpc/types.h>
#include <rpc/xdr.h>
-#include "../src/guestfs_protocol.h"
+#include "guestfs_protocol.h"
/*-- in guestfsd.c --*/
extern int verbose;
extern char *sysroot_path (const char *path);
+extern int is_root_device (const char *device);
+
extern int xwrite (int sock, const void *buf, size_t len)
__attribute__((__warn_unused_result__));
extern int xread (int sock, void *buf, size_t len)
/*-- in proto.c --*/
extern int proc_nr;
extern int serial;
+extern uint64_t progress_hint;
+extern uint64_t optargs_bitmask;
/*-- in mount.c --*/
extern int root_mounted;
/* Use this as a replacement for sync(2). */
extern int sync_disks (void);
+/*-- in lvm.c --*/
+extern int lv_canonical (const char *device, char **ret);
+
/*-- in proto.c --*/
extern void main_loop (int sock) __attribute__((noreturn));
/* only call this if there is a FileOut parameter */
extern void reply (xdrproc_t xdrp, char *ret);
+/* Notify progress to caller. This function is self-rate-limiting so
+ * you can call it as often as necessary. Actions which call this
+ * should add 'Progress' note in generator.
+ */
+extern void notify_progress (uint64_t position, uint64_t total);
+
/* Helper for functions that need a root filesystem mounted.
* NB. Cannot be used for FileIn functions.
*/
reply_with_error ("%s: %s: expecting a device name", __func__, (path)); \
fail_stmt; \
} \
+ if (is_root_device (path)) \
+ reply_with_error ("%s: %s: device not found", __func__, path); \
if (device_name_translation ((path)) == -1) { \
int err = errno; \
int r = cancel_stmt; \