Generated code for grub-install command.
[libguestfs.git] / daemon / stubs.c
index a6175cb..ee27997 100644 (file)
@@ -19,7 +19,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#define _GNU_SOURCE // for strchrnul
+#include <config.h>
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -940,9 +940,14 @@ static void vgcreate_stub (XDR *xdr_in)
     return;
   }
   volgroup = args.volgroup;
-  args.physvols.physvols_val = realloc (args.physvols.physvols_val, sizeof (char *) * (args.physvols.physvols_len+1));
-  args.physvols.physvols_val[args.physvols.physvols_len] = NULL;
-  physvols = args.physvols.physvols_val;
+  physvols = realloc (args.physvols.physvols_val,
+                sizeof (char *) * (args.physvols.physvols_len+1));
+  if (physvols == NULL) {
+    reply_with_perror ("realloc");
+    goto done;
+  }
+  physvols[args.physvols.physvols_len] = NULL;
+  args.physvols.physvols_val = physvols;
 
   r = do_vgcreate (volgroup, physvols);
   if (r == -1)
@@ -1028,9 +1033,14 @@ static void sfdisk_stub (XDR *xdr_in)
   cyls = args.cyls;
   heads = args.heads;
   sectors = args.sectors;
-  args.lines.lines_val = realloc (args.lines.lines_val, sizeof (char *) * (args.lines.lines_len+1));
-  args.lines.lines_val[args.lines.lines_len] = NULL;
-  lines = args.lines.lines_val;
+  lines = realloc (args.lines.lines_val,
+                sizeof (char *) * (args.lines.lines_len+1));
+  if (lines == NULL) {
+    reply_with_perror ("realloc");
+    goto done;
+  }
+  lines[args.lines.lines_len] = NULL;
+  args.lines.lines_val = lines;
 
   r = do_sfdisk (device, cyls, heads, sectors, lines);
   if (r == -1)
@@ -1176,9 +1186,14 @@ static void command_stub (XDR *xdr_in)
     reply_with_error ("%s: daemon failed to decode procedure arguments", "command");
     return;
   }
-  args.arguments.arguments_val = realloc (args.arguments.arguments_val, sizeof (char *) * (args.arguments.arguments_len+1));
-  args.arguments.arguments_val[args.arguments.arguments_len] = NULL;
-  arguments = args.arguments.arguments_val;
+  arguments = realloc (args.arguments.arguments_val,
+                sizeof (char *) * (args.arguments.arguments_len+1));
+  if (arguments == NULL) {
+    reply_with_perror ("realloc");
+    goto done;
+  }
+  arguments[args.arguments.arguments_len] = NULL;
+  args.arguments.arguments_val = arguments;
 
   r = do_command (arguments);
   if (r == NULL)
@@ -1205,9 +1220,14 @@ static void command_lines_stub (XDR *xdr_in)
     reply_with_error ("%s: daemon failed to decode procedure arguments", "command_lines");
     return;
   }
-  args.arguments.arguments_val = realloc (args.arguments.arguments_val, sizeof (char *) * (args.arguments.arguments_len+1));
-  args.arguments.arguments_val[args.arguments.arguments_len] = NULL;
-  arguments = args.arguments.arguments_val;
+  arguments = realloc (args.arguments.arguments_val,
+                sizeof (char *) * (args.arguments.arguments_len+1));
+  if (arguments == NULL) {
+    reply_with_perror ("realloc");
+    goto done;
+  }
+  arguments[args.arguments.arguments_len] = NULL;
+  args.arguments.arguments_val = arguments;
 
   r = do_command_lines (arguments);
   if (r == NULL)
@@ -1332,173 +1352,1067 @@ done:
   xdr_free ((xdrproc_t) xdr_guestfs_tune2fs_l_args, (char *) &args);
 }
 
-void dispatch_incoming_message (XDR *xdr_in)
+static void blockdev_setro_stub (XDR *xdr_in)
 {
-  switch (proc_nr) {
-    case GUESTFS_PROC_MOUNT:
-      mount_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_SYNC:
-      sync_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_TOUCH:
-      touch_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_CAT:
-      cat_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_LL:
-      ll_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_LS:
-      ls_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_LIST_DEVICES:
-      list_devices_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_LIST_PARTITIONS:
-      list_partitions_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_PVS:
-      pvs_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_VGS:
-      vgs_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_LVS:
-      lvs_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_PVS_FULL:
-      pvs_full_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_VGS_FULL:
-      vgs_full_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_LVS_FULL:
-      lvs_full_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_READ_LINES:
-      read_lines_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_AUG_INIT:
-      aug_init_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_AUG_CLOSE:
-      aug_close_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_AUG_DEFVAR:
-      aug_defvar_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_AUG_DEFNODE:
-      aug_defnode_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_AUG_GET:
-      aug_get_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_AUG_SET:
-      aug_set_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_AUG_INSERT:
-      aug_insert_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_AUG_RM:
-      aug_rm_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_AUG_MV:
-      aug_mv_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_AUG_MATCH:
-      aug_match_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_AUG_SAVE:
-      aug_save_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_AUG_LOAD:
-      aug_load_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_AUG_LS:
-      aug_ls_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_RM:
-      rm_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_RMDIR:
-      rmdir_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_RM_RF:
-      rm_rf_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_MKDIR:
-      mkdir_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_MKDIR_P:
-      mkdir_p_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_CHMOD:
-      chmod_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_CHOWN:
-      chown_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_EXISTS:
-      exists_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_IS_FILE:
-      is_file_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_IS_DIR:
-      is_dir_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_PVCREATE:
-      pvcreate_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_VGCREATE:
-      vgcreate_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_LVCREATE:
-      lvcreate_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_MKFS:
-      mkfs_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_SFDISK:
-      sfdisk_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_WRITE_FILE:
-      write_file_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_UMOUNT:
-      umount_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_MOUNTS:
-      mounts_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_UMOUNT_ALL:
-      umount_all_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_LVM_REMOVE_ALL:
-      lvm_remove_all_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_FILE:
-      file_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_COMMAND:
-      command_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_COMMAND_LINES:
-      command_lines_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_STAT:
-      stat_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_LSTAT:
-      lstat_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_STATVFS:
-      statvfs_stub (xdr_in);
-      break;
-    case GUESTFS_PROC_TUNE2FS_L:
-      tune2fs_l_stub (xdr_in);
+  int r;
+  struct guestfs_blockdev_setro_args args;
+  const char *device;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_blockdev_setro_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_setro");
+    return;
+  }
+  device = args.device;
+
+  r = do_blockdev_setro (device);
+  if (r == -1)
+    /* do_blockdev_setro has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_blockdev_setro_args, (char *) &args);
+}
+
+static void blockdev_setrw_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_blockdev_setrw_args args;
+  const char *device;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_blockdev_setrw_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_setrw");
+    return;
+  }
+  device = args.device;
+
+  r = do_blockdev_setrw (device);
+  if (r == -1)
+    /* do_blockdev_setrw has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_blockdev_setrw_args, (char *) &args);
+}
+
+static void blockdev_getro_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_blockdev_getro_args args;
+  const char *device;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_blockdev_getro_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_getro");
+    return;
+  }
+  device = args.device;
+
+  r = do_blockdev_getro (device);
+  if (r == -1)
+    /* do_blockdev_getro has already called reply_with_error */
+    goto done;
+
+  struct guestfs_blockdev_getro_ret ret;
+  ret.ro = r;
+  reply ((xdrproc_t) &xdr_guestfs_blockdev_getro_ret, (char *) &ret);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_blockdev_getro_args, (char *) &args);
+}
+
+static void blockdev_getss_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_blockdev_getss_args args;
+  const char *device;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_blockdev_getss_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_getss");
+    return;
+  }
+  device = args.device;
+
+  r = do_blockdev_getss (device);
+  if (r == -1)
+    /* do_blockdev_getss has already called reply_with_error */
+    goto done;
+
+  struct guestfs_blockdev_getss_ret ret;
+  ret.sectorsize = r;
+  reply ((xdrproc_t) &xdr_guestfs_blockdev_getss_ret, (char *) &ret);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_blockdev_getss_args, (char *) &args);
+}
+
+static void blockdev_getbsz_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_blockdev_getbsz_args args;
+  const char *device;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_blockdev_getbsz_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_getbsz");
+    return;
+  }
+  device = args.device;
+
+  r = do_blockdev_getbsz (device);
+  if (r == -1)
+    /* do_blockdev_getbsz has already called reply_with_error */
+    goto done;
+
+  struct guestfs_blockdev_getbsz_ret ret;
+  ret.blocksize = r;
+  reply ((xdrproc_t) &xdr_guestfs_blockdev_getbsz_ret, (char *) &ret);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_blockdev_getbsz_args, (char *) &args);
+}
+
+static void blockdev_setbsz_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_blockdev_setbsz_args args;
+  const char *device;
+  int blocksize;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_blockdev_setbsz_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_setbsz");
+    return;
+  }
+  device = args.device;
+  blocksize = args.blocksize;
+
+  r = do_blockdev_setbsz (device, blocksize);
+  if (r == -1)
+    /* do_blockdev_setbsz has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_blockdev_setbsz_args, (char *) &args);
+}
+
+static void blockdev_getsz_stub (XDR *xdr_in)
+{
+  int64_t r;
+  struct guestfs_blockdev_getsz_args args;
+  const char *device;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_blockdev_getsz_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_getsz");
+    return;
+  }
+  device = args.device;
+
+  r = do_blockdev_getsz (device);
+  if (r == -1)
+    /* do_blockdev_getsz has already called reply_with_error */
+    goto done;
+
+  struct guestfs_blockdev_getsz_ret ret;
+  ret.sizeinsectors = r;
+  reply ((xdrproc_t) &xdr_guestfs_blockdev_getsz_ret, (char *) &ret);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_blockdev_getsz_args, (char *) &args);
+}
+
+static void blockdev_getsize64_stub (XDR *xdr_in)
+{
+  int64_t r;
+  struct guestfs_blockdev_getsize64_args args;
+  const char *device;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_blockdev_getsize64_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_getsize64");
+    return;
+  }
+  device = args.device;
+
+  r = do_blockdev_getsize64 (device);
+  if (r == -1)
+    /* do_blockdev_getsize64 has already called reply_with_error */
+    goto done;
+
+  struct guestfs_blockdev_getsize64_ret ret;
+  ret.sizeinbytes = r;
+  reply ((xdrproc_t) &xdr_guestfs_blockdev_getsize64_ret, (char *) &ret);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_blockdev_getsize64_args, (char *) &args);
+}
+
+static void blockdev_flushbufs_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_blockdev_flushbufs_args args;
+  const char *device;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_blockdev_flushbufs_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_flushbufs");
+    return;
+  }
+  device = args.device;
+
+  r = do_blockdev_flushbufs (device);
+  if (r == -1)
+    /* do_blockdev_flushbufs has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_blockdev_flushbufs_args, (char *) &args);
+}
+
+static void blockdev_rereadpt_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_blockdev_rereadpt_args args;
+  const char *device;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_blockdev_rereadpt_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "blockdev_rereadpt");
+    return;
+  }
+  device = args.device;
+
+  r = do_blockdev_rereadpt (device);
+  if (r == -1)
+    /* do_blockdev_rereadpt has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_blockdev_rereadpt_args, (char *) &args);
+}
+
+static void upload_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_upload_args args;
+  const char *remotefilename;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_upload_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "upload");
+    return;
+  }
+  remotefilename = args.remotefilename;
+
+  r = do_upload (remotefilename);
+  if (r == -1)
+    /* do_upload has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_upload_args, (char *) &args);
+}
+
+static void download_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_download_args args;
+  const char *remotefilename;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_download_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "download");
+    return;
+  }
+  remotefilename = args.remotefilename;
+
+  r = do_download (remotefilename);
+  if (r == -1)
+    /* do_download has already called reply_with_error */
+    goto done;
+
+  /* do_download has already sent a reply */
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_download_args, (char *) &args);
+}
+
+static void checksum_stub (XDR *xdr_in)
+{
+  char *r;
+  struct guestfs_checksum_args args;
+  const char *csumtype;
+  const char *path;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_checksum_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "checksum");
+    return;
+  }
+  csumtype = args.csumtype;
+  path = args.path;
+
+  r = do_checksum (csumtype, path);
+  if (r == NULL)
+    /* do_checksum has already called reply_with_error */
+    goto done;
+
+  struct guestfs_checksum_ret ret;
+  ret.checksum = r;
+  reply ((xdrproc_t) &xdr_guestfs_checksum_ret, (char *) &ret);
+  free (r);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_checksum_args, (char *) &args);
+}
+
+static void tar_in_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_tar_in_args args;
+  const char *directory;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_tar_in_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "tar_in");
+    return;
+  }
+  directory = args.directory;
+
+  r = do_tar_in (directory);
+  if (r == -1)
+    /* do_tar_in has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_tar_in_args, (char *) &args);
+}
+
+static void tar_out_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_tar_out_args args;
+  const char *directory;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_tar_out_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "tar_out");
+    return;
+  }
+  directory = args.directory;
+
+  r = do_tar_out (directory);
+  if (r == -1)
+    /* do_tar_out has already called reply_with_error */
+    goto done;
+
+  /* do_tar_out has already sent a reply */
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_tar_out_args, (char *) &args);
+}
+
+static void tgz_in_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_tgz_in_args args;
+  const char *directory;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_tgz_in_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "tgz_in");
+    return;
+  }
+  directory = args.directory;
+
+  r = do_tgz_in (directory);
+  if (r == -1)
+    /* do_tgz_in has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_tgz_in_args, (char *) &args);
+}
+
+static void tgz_out_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_tgz_out_args args;
+  const char *directory;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_tgz_out_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "tgz_out");
+    return;
+  }
+  directory = args.directory;
+
+  r = do_tgz_out (directory);
+  if (r == -1)
+    /* do_tgz_out has already called reply_with_error */
+    goto done;
+
+  /* do_tgz_out has already sent a reply */
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_tgz_out_args, (char *) &args);
+}
+
+static void mount_ro_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_mount_ro_args args;
+  const char *device;
+  const char *mountpoint;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_mount_ro_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "mount_ro");
+    return;
+  }
+  device = args.device;
+  mountpoint = args.mountpoint;
+
+  r = do_mount_ro (device, mountpoint);
+  if (r == -1)
+    /* do_mount_ro has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_mount_ro_args, (char *) &args);
+}
+
+static void mount_options_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_mount_options_args args;
+  const char *options;
+  const char *device;
+  const char *mountpoint;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_mount_options_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "mount_options");
+    return;
+  }
+  options = args.options;
+  device = args.device;
+  mountpoint = args.mountpoint;
+
+  r = do_mount_options (options, device, mountpoint);
+  if (r == -1)
+    /* do_mount_options has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_mount_options_args, (char *) &args);
+}
+
+static void mount_vfs_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_mount_vfs_args args;
+  const char *options;
+  const char *vfstype;
+  const char *device;
+  const char *mountpoint;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_mount_vfs_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "mount_vfs");
+    return;
+  }
+  options = args.options;
+  vfstype = args.vfstype;
+  device = args.device;
+  mountpoint = args.mountpoint;
+
+  r = do_mount_vfs (options, vfstype, device, mountpoint);
+  if (r == -1)
+    /* do_mount_vfs has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_mount_vfs_args, (char *) &args);
+}
+
+static void debug_stub (XDR *xdr_in)
+{
+  char *r;
+  struct guestfs_debug_args args;
+  const char *subcmd;
+  char **extraargs;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_debug_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "debug");
+    return;
+  }
+  subcmd = args.subcmd;
+  extraargs = realloc (args.extraargs.extraargs_val,
+                sizeof (char *) * (args.extraargs.extraargs_len+1));
+  if (extraargs == NULL) {
+    reply_with_perror ("realloc");
+    goto done;
+  }
+  extraargs[args.extraargs.extraargs_len] = NULL;
+  args.extraargs.extraargs_val = extraargs;
+
+  r = do_debug (subcmd, extraargs);
+  if (r == NULL)
+    /* do_debug has already called reply_with_error */
+    goto done;
+
+  struct guestfs_debug_ret ret;
+  ret.result = r;
+  reply ((xdrproc_t) &xdr_guestfs_debug_ret, (char *) &ret);
+  free (r);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_debug_args, (char *) &args);
+}
+
+static void lvremove_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_lvremove_args args;
+  const char *device;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_lvremove_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "lvremove");
+    return;
+  }
+  device = args.device;
+
+  r = do_lvremove (device);
+  if (r == -1)
+    /* do_lvremove has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_lvremove_args, (char *) &args);
+}
+
+static void vgremove_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_vgremove_args args;
+  const char *vgname;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_vgremove_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "vgremove");
+    return;
+  }
+  vgname = args.vgname;
+
+  r = do_vgremove (vgname);
+  if (r == -1)
+    /* do_vgremove has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_vgremove_args, (char *) &args);
+}
+
+static void pvremove_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_pvremove_args args;
+  const char *device;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_pvremove_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "pvremove");
+    return;
+  }
+  device = args.device;
+
+  r = do_pvremove (device);
+  if (r == -1)
+    /* do_pvremove has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_pvremove_args, (char *) &args);
+}
+
+static void set_e2label_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_set_e2label_args args;
+  const char *device;
+  const char *label;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_set_e2label_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "set_e2label");
+    return;
+  }
+  device = args.device;
+  label = args.label;
+
+  r = do_set_e2label (device, label);
+  if (r == -1)
+    /* do_set_e2label has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_set_e2label_args, (char *) &args);
+}
+
+static void get_e2label_stub (XDR *xdr_in)
+{
+  char *r;
+  struct guestfs_get_e2label_args args;
+  const char *device;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_get_e2label_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "get_e2label");
+    return;
+  }
+  device = args.device;
+
+  r = do_get_e2label (device);
+  if (r == NULL)
+    /* do_get_e2label has already called reply_with_error */
+    goto done;
+
+  struct guestfs_get_e2label_ret ret;
+  ret.label = r;
+  reply ((xdrproc_t) &xdr_guestfs_get_e2label_ret, (char *) &ret);
+  free (r);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_get_e2label_args, (char *) &args);
+}
+
+static void set_e2uuid_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_set_e2uuid_args args;
+  const char *device;
+  const char *uuid;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_set_e2uuid_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "set_e2uuid");
+    return;
+  }
+  device = args.device;
+  uuid = args.uuid;
+
+  r = do_set_e2uuid (device, uuid);
+  if (r == -1)
+    /* do_set_e2uuid has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_set_e2uuid_args, (char *) &args);
+}
+
+static void get_e2uuid_stub (XDR *xdr_in)
+{
+  char *r;
+  struct guestfs_get_e2uuid_args args;
+  const char *device;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_get_e2uuid_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "get_e2uuid");
+    return;
+  }
+  device = args.device;
+
+  r = do_get_e2uuid (device);
+  if (r == NULL)
+    /* do_get_e2uuid has already called reply_with_error */
+    goto done;
+
+  struct guestfs_get_e2uuid_ret ret;
+  ret.uuid = r;
+  reply ((xdrproc_t) &xdr_guestfs_get_e2uuid_ret, (char *) &ret);
+  free (r);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_get_e2uuid_args, (char *) &args);
+}
+
+static void fsck_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_fsck_args args;
+  const char *fstype;
+  const char *device;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_fsck_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "fsck");
+    return;
+  }
+  fstype = args.fstype;
+  device = args.device;
+
+  r = do_fsck (fstype, device);
+  if (r == -1)
+    /* do_fsck has already called reply_with_error */
+    goto done;
+
+  struct guestfs_fsck_ret ret;
+  ret.status = r;
+  reply ((xdrproc_t) &xdr_guestfs_fsck_ret, (char *) &ret);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_fsck_args, (char *) &args);
+}
+
+static void zero_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_zero_args args;
+  const char *device;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_zero_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "zero");
+    return;
+  }
+  device = args.device;
+
+  r = do_zero (device);
+  if (r == -1)
+    /* do_zero has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_zero_args, (char *) &args);
+}
+
+static void grub_install_stub (XDR *xdr_in)
+{
+  int r;
+  struct guestfs_grub_install_args args;
+  const char *root;
+  const char *device;
+
+  memset (&args, 0, sizeof args);
+
+  if (!xdr_guestfs_grub_install_args (xdr_in, &args)) {
+    reply_with_error ("%s: daemon failed to decode procedure arguments", "grub_install");
+    return;
+  }
+  root = args.root;
+  device = args.device;
+
+  r = do_grub_install (root, device);
+  if (r == -1)
+    /* do_grub_install has already called reply_with_error */
+    goto done;
+
+  reply (NULL, NULL);
+done:
+  xdr_free ((xdrproc_t) xdr_guestfs_grub_install_args, (char *) &args);
+}
+
+void dispatch_incoming_message (XDR *xdr_in)
+{
+  switch (proc_nr) {
+    case GUESTFS_PROC_MOUNT:
+      mount_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_SYNC:
+      sync_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_TOUCH:
+      touch_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_CAT:
+      cat_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_LL:
+      ll_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_LS:
+      ls_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_LIST_DEVICES:
+      list_devices_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_LIST_PARTITIONS:
+      list_partitions_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_PVS:
+      pvs_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_VGS:
+      vgs_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_LVS:
+      lvs_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_PVS_FULL:
+      pvs_full_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_VGS_FULL:
+      vgs_full_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_LVS_FULL:
+      lvs_full_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_READ_LINES:
+      read_lines_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_AUG_INIT:
+      aug_init_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_AUG_CLOSE:
+      aug_close_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_AUG_DEFVAR:
+      aug_defvar_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_AUG_DEFNODE:
+      aug_defnode_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_AUG_GET:
+      aug_get_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_AUG_SET:
+      aug_set_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_AUG_INSERT:
+      aug_insert_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_AUG_RM:
+      aug_rm_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_AUG_MV:
+      aug_mv_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_AUG_MATCH:
+      aug_match_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_AUG_SAVE:
+      aug_save_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_AUG_LOAD:
+      aug_load_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_AUG_LS:
+      aug_ls_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_RM:
+      rm_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_RMDIR:
+      rmdir_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_RM_RF:
+      rm_rf_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_MKDIR:
+      mkdir_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_MKDIR_P:
+      mkdir_p_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_CHMOD:
+      chmod_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_CHOWN:
+      chown_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_EXISTS:
+      exists_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_IS_FILE:
+      is_file_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_IS_DIR:
+      is_dir_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_PVCREATE:
+      pvcreate_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_VGCREATE:
+      vgcreate_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_LVCREATE:
+      lvcreate_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_MKFS:
+      mkfs_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_SFDISK:
+      sfdisk_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_WRITE_FILE:
+      write_file_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_UMOUNT:
+      umount_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_MOUNTS:
+      mounts_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_UMOUNT_ALL:
+      umount_all_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_LVM_REMOVE_ALL:
+      lvm_remove_all_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_FILE:
+      file_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_COMMAND:
+      command_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_COMMAND_LINES:
+      command_lines_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_STAT:
+      stat_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_LSTAT:
+      lstat_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_STATVFS:
+      statvfs_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_TUNE2FS_L:
+      tune2fs_l_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_BLOCKDEV_SETRO:
+      blockdev_setro_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_BLOCKDEV_SETRW:
+      blockdev_setrw_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_BLOCKDEV_GETRO:
+      blockdev_getro_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_BLOCKDEV_GETSS:
+      blockdev_getss_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_BLOCKDEV_GETBSZ:
+      blockdev_getbsz_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_BLOCKDEV_SETBSZ:
+      blockdev_setbsz_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_BLOCKDEV_GETSZ:
+      blockdev_getsz_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_BLOCKDEV_GETSIZE64:
+      blockdev_getsize64_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_BLOCKDEV_FLUSHBUFS:
+      blockdev_flushbufs_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_BLOCKDEV_REREADPT:
+      blockdev_rereadpt_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_UPLOAD:
+      upload_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_DOWNLOAD:
+      download_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_CHECKSUM:
+      checksum_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_TAR_IN:
+      tar_in_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_TAR_OUT:
+      tar_out_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_TGZ_IN:
+      tgz_in_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_TGZ_OUT:
+      tgz_out_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_MOUNT_RO:
+      mount_ro_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_MOUNT_OPTIONS:
+      mount_options_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_MOUNT_VFS:
+      mount_vfs_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_DEBUG:
+      debug_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_LVREMOVE:
+      lvremove_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_VGREMOVE:
+      vgremove_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_PVREMOVE:
+      pvremove_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_SET_E2LABEL:
+      set_e2label_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_GET_E2LABEL:
+      get_e2label_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_SET_E2UUID:
+      set_e2uuid_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_GET_E2UUID:
+      get_e2uuid_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_FSCK:
+      fsck_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_ZERO:
+      zero_stub (xdr_in);
+      break;
+    case GUESTFS_PROC_GRUB_INSTALL:
+      grub_install_stub (xdr_in);
       break;
     default:
       reply_with_error ("dispatch_incoming_message: unknown procedure number %d", proc_nr);
@@ -1729,6 +2643,7 @@ parse_command_line_pvs (void)
     reply_with_error ("%s", err);
     free (out);
     free (err);
+    free (ret);
     return NULL;
   }
 
@@ -2068,6 +2983,7 @@ parse_command_line_vgs (void)
     reply_with_error ("%s", err);
     free (out);
     free (err);
+    free (ret);
     return NULL;
   }
 
@@ -2377,6 +3293,7 @@ parse_command_line_lvs (void)
     reply_with_error ("%s", err);
     free (out);
     free (err);
+    free (ret);
     return NULL;
   }