+/*-- in sync.c --*/
+/* Use this as a replacement for sync(2). */
+extern int sync_disks (void);
+
+/*-- in ext2.c --*/
+extern int e2prog (char *name); /* Massive hack for RHEL 5. */
+
+/*-- in lvm.c --*/
+extern int lv_canonical (const char *device, char **ret);
+
+/*-- in lvm-filter.c --*/
+extern void copy_lvm (void);
+
+/*-- in proto.c --*/
+extern void main_loop (int sock) __attribute__((noreturn));
+
+/* ordinary daemon functions use these to indicate errors
+ * NB: you don't need to prefix the string with the current command,
+ * it is added automatically by the client-side RPC stubs.
+ */
+extern void reply_with_error (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.
+ */
+typedef int (*receive_cb) (void *opaque, const void *buf, size_t len);
+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).
+ */
+extern int cancel_receive (void);
+
+/* daemon functions that return files (FileOut) should call
+ * reply, then send_file_* for each FileOut parameter.
+ * Note max write size if GUESTFS_MAX_CHUNK_SIZE.
+ */
+extern int send_file_write (const void *buf, int len);
+extern int send_file_end (int cancel);
+
+/* only call this if there is a FileOut parameter */