summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard Jones <rjones@redhat.com>2009-04-15 17:48:54 +0100
committerRichard Jones <rjones@redhat.com>2009-04-15 17:48:54 +0100
commitb348eacbc4d84337856cf7cca518d61c63e92631 (patch)
treead6cefaf75e05e6a4da9c9b18061222a3ba98727 /src
parente038597ebd1e43c83a8ddde21c4f1898eb7a9a98 (diff)
downloadlibguestfs-b348eacbc4d84337856cf7cca518d61c63e92631.tar.gz
libguestfs-b348eacbc4d84337856cf7cca518d61c63e92631.tar.xz
libguestfs-b348eacbc4d84337856cf7cca518d61c63e92631.zip
Generated code for blockdev_* calls, RInt64, enhanced tests.
Diffstat (limited to 'src')
-rw-r--r--src/guestfs-actions.c717
-rw-r--r--src/guestfs-actions.h10
-rw-r--r--src/guestfs_protocol.c152
-rw-r--r--src/guestfs_protocol.h118
-rw-r--r--src/guestfs_protocol.x71
5 files changed, 1067 insertions, 1 deletions
diff --git a/src/guestfs-actions.c b/src/guestfs-actions.c
index 0961df69..f516979f 100644
--- a/src/guestfs-actions.c
+++ b/src/guestfs-actions.c
@@ -4002,3 +4002,720 @@ char **guestfs_tune2fs_l (guestfs_h *g,
return rv.ret.superblock.superblock_val;
}
+struct blockdev_setro_rv {
+ int cb_done; /* flag to indicate callback was called */
+ struct guestfs_message_header hdr;
+ struct guestfs_message_error err;
+};
+
+static void blockdev_setro_cb (guestfs_h *g, void *data, XDR *xdr)
+{
+ struct blockdev_setro_rv *rv = (struct blockdev_setro_rv *) data;
+
+ if (!xdr_guestfs_message_header (xdr, &rv->hdr)) {
+ error (g, "guestfs_blockdev_setro: failed to parse reply header");
+ return;
+ }
+ if (rv->hdr.status == GUESTFS_STATUS_ERROR) {
+ if (!xdr_guestfs_message_error (xdr, &rv->err)) {
+ error (g, "guestfs_blockdev_setro: failed to parse reply error");
+ return;
+ }
+ goto done;
+ }
+ done:
+ rv->cb_done = 1;
+ main_loop.main_loop_quit (g);
+}
+
+int guestfs_blockdev_setro (guestfs_h *g,
+ const char *device)
+{
+ struct guestfs_blockdev_setro_args args;
+ struct blockdev_setro_rv rv;
+ int serial;
+
+ if (g->state != READY) {
+ error (g, "guestfs_blockdev_setro called from the wrong state, %d != READY",
+ g->state);
+ return -1;
+ }
+
+ memset (&rv, 0, sizeof rv);
+
+ args.device = (char *) device;
+ serial = dispatch (g, GUESTFS_PROC_BLOCKDEV_SETRO,
+ (xdrproc_t) xdr_guestfs_blockdev_setro_args, (char *) &args);
+ if (serial == -1)
+ return -1;
+
+ rv.cb_done = 0;
+ g->reply_cb_internal = blockdev_setro_cb;
+ g->reply_cb_internal_data = &rv;
+ main_loop.main_loop_run (g);
+ g->reply_cb_internal = NULL;
+ g->reply_cb_internal_data = NULL;
+ if (!rv.cb_done) {
+ error (g, "guestfs_blockdev_setro failed, see earlier error messages");
+ return -1;
+ }
+
+ if (check_reply_header (g, &rv.hdr, GUESTFS_PROC_BLOCKDEV_SETRO, serial) == -1)
+ return -1;
+
+ if (rv.hdr.status == GUESTFS_STATUS_ERROR) {
+ error (g, "%s", rv.err.error);
+ return -1;
+ }
+
+ return 0;
+}
+
+struct blockdev_setrw_rv {
+ int cb_done; /* flag to indicate callback was called */
+ struct guestfs_message_header hdr;
+ struct guestfs_message_error err;
+};
+
+static void blockdev_setrw_cb (guestfs_h *g, void *data, XDR *xdr)
+{
+ struct blockdev_setrw_rv *rv = (struct blockdev_setrw_rv *) data;
+
+ if (!xdr_guestfs_message_header (xdr, &rv->hdr)) {
+ error (g, "guestfs_blockdev_setrw: failed to parse reply header");
+ return;
+ }
+ if (rv->hdr.status == GUESTFS_STATUS_ERROR) {
+ if (!xdr_guestfs_message_error (xdr, &rv->err)) {
+ error (g, "guestfs_blockdev_setrw: failed to parse reply error");
+ return;
+ }
+ goto done;
+ }
+ done:
+ rv->cb_done = 1;
+ main_loop.main_loop_quit (g);
+}
+
+int guestfs_blockdev_setrw (guestfs_h *g,
+ const char *device)
+{
+ struct guestfs_blockdev_setrw_args args;
+ struct blockdev_setrw_rv rv;
+ int serial;
+
+ if (g->state != READY) {
+ error (g, "guestfs_blockdev_setrw called from the wrong state, %d != READY",
+ g->state);
+ return -1;
+ }
+
+ memset (&rv, 0, sizeof rv);
+
+ args.device = (char *) device;
+ serial = dispatch (g, GUESTFS_PROC_BLOCKDEV_SETRW,
+ (xdrproc_t) xdr_guestfs_blockdev_setrw_args, (char *) &args);
+ if (serial == -1)
+ return -1;
+
+ rv.cb_done = 0;
+ g->reply_cb_internal = blockdev_setrw_cb;
+ g->reply_cb_internal_data = &rv;
+ main_loop.main_loop_run (g);
+ g->reply_cb_internal = NULL;
+ g->reply_cb_internal_data = NULL;
+ if (!rv.cb_done) {
+ error (g, "guestfs_blockdev_setrw failed, see earlier error messages");
+ return -1;
+ }
+
+ if (check_reply_header (g, &rv.hdr, GUESTFS_PROC_BLOCKDEV_SETRW, serial) == -1)
+ return -1;
+
+ if (rv.hdr.status == GUESTFS_STATUS_ERROR) {
+ error (g, "%s", rv.err.error);
+ return -1;
+ }
+
+ return 0;
+}
+
+struct blockdev_getro_rv {
+ int cb_done; /* flag to indicate callback was called */
+ struct guestfs_message_header hdr;
+ struct guestfs_message_error err;
+ struct guestfs_blockdev_getro_ret ret;
+};
+
+static void blockdev_getro_cb (guestfs_h *g, void *data, XDR *xdr)
+{
+ struct blockdev_getro_rv *rv = (struct blockdev_getro_rv *) data;
+
+ if (!xdr_guestfs_message_header (xdr, &rv->hdr)) {
+ error (g, "guestfs_blockdev_getro: failed to parse reply header");
+ return;
+ }
+ if (rv->hdr.status == GUESTFS_STATUS_ERROR) {
+ if (!xdr_guestfs_message_error (xdr, &rv->err)) {
+ error (g, "guestfs_blockdev_getro: failed to parse reply error");
+ return;
+ }
+ goto done;
+ }
+ if (!xdr_guestfs_blockdev_getro_ret (xdr, &rv->ret)) {
+ error (g, "guestfs_blockdev_getro: failed to parse reply");
+ return;
+ }
+ done:
+ rv->cb_done = 1;
+ main_loop.main_loop_quit (g);
+}
+
+int guestfs_blockdev_getro (guestfs_h *g,
+ const char *device)
+{
+ struct guestfs_blockdev_getro_args args;
+ struct blockdev_getro_rv rv;
+ int serial;
+
+ if (g->state != READY) {
+ error (g, "guestfs_blockdev_getro called from the wrong state, %d != READY",
+ g->state);
+ return -1;
+ }
+
+ memset (&rv, 0, sizeof rv);
+
+ args.device = (char *) device;
+ serial = dispatch (g, GUESTFS_PROC_BLOCKDEV_GETRO,
+ (xdrproc_t) xdr_guestfs_blockdev_getro_args, (char *) &args);
+ if (serial == -1)
+ return -1;
+
+ rv.cb_done = 0;
+ g->reply_cb_internal = blockdev_getro_cb;
+ g->reply_cb_internal_data = &rv;
+ main_loop.main_loop_run (g);
+ g->reply_cb_internal = NULL;
+ g->reply_cb_internal_data = NULL;
+ if (!rv.cb_done) {
+ error (g, "guestfs_blockdev_getro failed, see earlier error messages");
+ return -1;
+ }
+
+ if (check_reply_header (g, &rv.hdr, GUESTFS_PROC_BLOCKDEV_GETRO, serial) == -1)
+ return -1;
+
+ if (rv.hdr.status == GUESTFS_STATUS_ERROR) {
+ error (g, "%s", rv.err.error);
+ return -1;
+ }
+
+ return rv.ret.ro;
+}
+
+struct blockdev_getss_rv {
+ int cb_done; /* flag to indicate callback was called */
+ struct guestfs_message_header hdr;
+ struct guestfs_message_error err;
+ struct guestfs_blockdev_getss_ret ret;
+};
+
+static void blockdev_getss_cb (guestfs_h *g, void *data, XDR *xdr)
+{
+ struct blockdev_getss_rv *rv = (struct blockdev_getss_rv *) data;
+
+ if (!xdr_guestfs_message_header (xdr, &rv->hdr)) {
+ error (g, "guestfs_blockdev_getss: failed to parse reply header");
+ return;
+ }
+ if (rv->hdr.status == GUESTFS_STATUS_ERROR) {
+ if (!xdr_guestfs_message_error (xdr, &rv->err)) {
+ error (g, "guestfs_blockdev_getss: failed to parse reply error");
+ return;
+ }
+ goto done;
+ }
+ if (!xdr_guestfs_blockdev_getss_ret (xdr, &rv->ret)) {
+ error (g, "guestfs_blockdev_getss: failed to parse reply");
+ return;
+ }
+ done:
+ rv->cb_done = 1;
+ main_loop.main_loop_quit (g);
+}
+
+int guestfs_blockdev_getss (guestfs_h *g,
+ const char *device)
+{
+ struct guestfs_blockdev_getss_args args;
+ struct blockdev_getss_rv rv;
+ int serial;
+
+ if (g->state != READY) {
+ error (g, "guestfs_blockdev_getss called from the wrong state, %d != READY",
+ g->state);
+ return -1;
+ }
+
+ memset (&rv, 0, sizeof rv);
+
+ args.device = (char *) device;
+ serial = dispatch (g, GUESTFS_PROC_BLOCKDEV_GETSS,
+ (xdrproc_t) xdr_guestfs_blockdev_getss_args, (char *) &args);
+ if (serial == -1)
+ return -1;
+
+ rv.cb_done = 0;
+ g->reply_cb_internal = blockdev_getss_cb;
+ g->reply_cb_internal_data = &rv;
+ main_loop.main_loop_run (g);
+ g->reply_cb_internal = NULL;
+ g->reply_cb_internal_data = NULL;
+ if (!rv.cb_done) {
+ error (g, "guestfs_blockdev_getss failed, see earlier error messages");
+ return -1;
+ }
+
+ if (check_reply_header (g, &rv.hdr, GUESTFS_PROC_BLOCKDEV_GETSS, serial) == -1)
+ return -1;
+
+ if (rv.hdr.status == GUESTFS_STATUS_ERROR) {
+ error (g, "%s", rv.err.error);
+ return -1;
+ }
+
+ return rv.ret.sectorsize;
+}
+
+struct blockdev_getbsz_rv {
+ int cb_done; /* flag to indicate callback was called */
+ struct guestfs_message_header hdr;
+ struct guestfs_message_error err;
+ struct guestfs_blockdev_getbsz_ret ret;
+};
+
+static void blockdev_getbsz_cb (guestfs_h *g, void *data, XDR *xdr)
+{
+ struct blockdev_getbsz_rv *rv = (struct blockdev_getbsz_rv *) data;
+
+ if (!xdr_guestfs_message_header (xdr, &rv->hdr)) {
+ error (g, "guestfs_blockdev_getbsz: failed to parse reply header");
+ return;
+ }
+ if (rv->hdr.status == GUESTFS_STATUS_ERROR) {
+ if (!xdr_guestfs_message_error (xdr, &rv->err)) {
+ error (g, "guestfs_blockdev_getbsz: failed to parse reply error");
+ return;
+ }
+ goto done;
+ }
+ if (!xdr_guestfs_blockdev_getbsz_ret (xdr, &rv->ret)) {
+ error (g, "guestfs_blockdev_getbsz: failed to parse reply");
+ return;
+ }
+ done:
+ rv->cb_done = 1;
+ main_loop.main_loop_quit (g);
+}
+
+int guestfs_blockdev_getbsz (guestfs_h *g,
+ const char *device)
+{
+ struct guestfs_blockdev_getbsz_args args;
+ struct blockdev_getbsz_rv rv;
+ int serial;
+
+ if (g->state != READY) {
+ error (g, "guestfs_blockdev_getbsz called from the wrong state, %d != READY",
+ g->state);
+ return -1;
+ }
+
+ memset (&rv, 0, sizeof rv);
+
+ args.device = (char *) device;
+ serial = dispatch (g, GUESTFS_PROC_BLOCKDEV_GETBSZ,
+ (xdrproc_t) xdr_guestfs_blockdev_getbsz_args, (char *) &args);
+ if (serial == -1)
+ return -1;
+
+ rv.cb_done = 0;
+ g->reply_cb_internal = blockdev_getbsz_cb;
+ g->reply_cb_internal_data = &rv;
+ main_loop.main_loop_run (g);
+ g->reply_cb_internal = NULL;
+ g->reply_cb_internal_data = NULL;
+ if (!rv.cb_done) {
+ error (g, "guestfs_blockdev_getbsz failed, see earlier error messages");
+ return -1;
+ }
+
+ if (check_reply_header (g, &rv.hdr, GUESTFS_PROC_BLOCKDEV_GETBSZ, serial) == -1)
+ return -1;
+
+ if (rv.hdr.status == GUESTFS_STATUS_ERROR) {
+ error (g, "%s", rv.err.error);
+ return -1;
+ }
+
+ return rv.ret.blocksize;
+}
+
+struct blockdev_setbsz_rv {
+ int cb_done; /* flag to indicate callback was called */
+ struct guestfs_message_header hdr;
+ struct guestfs_message_error err;
+};
+
+static void blockdev_setbsz_cb (guestfs_h *g, void *data, XDR *xdr)
+{
+ struct blockdev_setbsz_rv *rv = (struct blockdev_setbsz_rv *) data;
+
+ if (!xdr_guestfs_message_header (xdr, &rv->hdr)) {
+ error (g, "guestfs_blockdev_setbsz: failed to parse reply header");
+ return;
+ }
+ if (rv->hdr.status == GUESTFS_STATUS_ERROR) {
+ if (!xdr_guestfs_message_error (xdr, &rv->err)) {
+ error (g, "guestfs_blockdev_setbsz: failed to parse reply error");
+ return;
+ }
+ goto done;
+ }
+ done:
+ rv->cb_done = 1;
+ main_loop.main_loop_quit (g);
+}
+
+int guestfs_blockdev_setbsz (guestfs_h *g,
+ const char *device,
+ int blocksize)
+{
+ struct guestfs_blockdev_setbsz_args args;
+ struct blockdev_setbsz_rv rv;
+ int serial;
+
+ if (g->state != READY) {
+ error (g, "guestfs_blockdev_setbsz called from the wrong state, %d != READY",
+ g->state);
+ return -1;
+ }
+
+ memset (&rv, 0, sizeof rv);
+
+ args.device = (char *) device;
+ args.blocksize = blocksize;
+ serial = dispatch (g, GUESTFS_PROC_BLOCKDEV_SETBSZ,
+ (xdrproc_t) xdr_guestfs_blockdev_setbsz_args, (char *) &args);
+ if (serial == -1)
+ return -1;
+
+ rv.cb_done = 0;
+ g->reply_cb_internal = blockdev_setbsz_cb;
+ g->reply_cb_internal_data = &rv;
+ main_loop.main_loop_run (g);
+ g->reply_cb_internal = NULL;
+ g->reply_cb_internal_data = NULL;
+ if (!rv.cb_done) {
+ error (g, "guestfs_blockdev_setbsz failed, see earlier error messages");
+ return -1;
+ }
+
+ if (check_reply_header (g, &rv.hdr, GUESTFS_PROC_BLOCKDEV_SETBSZ, serial) == -1)
+ return -1;
+
+ if (rv.hdr.status == GUESTFS_STATUS_ERROR) {
+ error (g, "%s", rv.err.error);
+ return -1;
+ }
+
+ return 0;
+}
+
+struct blockdev_getsz_rv {
+ int cb_done; /* flag to indicate callback was called */
+ struct guestfs_message_header hdr;
+ struct guestfs_message_error err;
+ struct guestfs_blockdev_getsz_ret ret;
+};
+
+static void blockdev_getsz_cb (guestfs_h *g, void *data, XDR *xdr)
+{
+ struct blockdev_getsz_rv *rv = (struct blockdev_getsz_rv *) data;
+
+ if (!xdr_guestfs_message_header (xdr, &rv->hdr)) {
+ error (g, "guestfs_blockdev_getsz: failed to parse reply header");
+ return;
+ }
+ if (rv->hdr.status == GUESTFS_STATUS_ERROR) {
+ if (!xdr_guestfs_message_error (xdr, &rv->err)) {
+ error (g, "guestfs_blockdev_getsz: failed to parse reply error");
+ return;
+ }
+ goto done;
+ }
+ if (!xdr_guestfs_blockdev_getsz_ret (xdr, &rv->ret)) {
+ error (g, "guestfs_blockdev_getsz: failed to parse reply");
+ return;
+ }
+ done:
+ rv->cb_done = 1;
+ main_loop.main_loop_quit (g);
+}
+
+int64_t guestfs_blockdev_getsz (guestfs_h *g,
+ const char *device)
+{
+ struct guestfs_blockdev_getsz_args args;
+ struct blockdev_getsz_rv rv;
+ int serial;
+
+ if (g->state != READY) {
+ error (g, "guestfs_blockdev_getsz called from the wrong state, %d != READY",
+ g->state);
+ return -1;
+ }
+
+ memset (&rv, 0, sizeof rv);
+
+ args.device = (char *) device;
+ serial = dispatch (g, GUESTFS_PROC_BLOCKDEV_GETSZ,
+ (xdrproc_t) xdr_guestfs_blockdev_getsz_args, (char *) &args);
+ if (serial == -1)
+ return -1;
+
+ rv.cb_done = 0;
+ g->reply_cb_internal = blockdev_getsz_cb;
+ g->reply_cb_internal_data = &rv;
+ main_loop.main_loop_run (g);
+ g->reply_cb_internal = NULL;
+ g->reply_cb_internal_data = NULL;
+ if (!rv.cb_done) {
+ error (g, "guestfs_blockdev_getsz failed, see earlier error messages");
+ return -1;
+ }
+
+ if (check_reply_header (g, &rv.hdr, GUESTFS_PROC_BLOCKDEV_GETSZ, serial) == -1)
+ return -1;
+
+ if (rv.hdr.status == GUESTFS_STATUS_ERROR) {
+ error (g, "%s", rv.err.error);
+ return -1;
+ }
+
+ return rv.ret.sizeinsectors;
+}
+
+struct blockdev_getsize64_rv {
+ int cb_done; /* flag to indicate callback was called */
+ struct guestfs_message_header hdr;
+ struct guestfs_message_error err;
+ struct guestfs_blockdev_getsize64_ret ret;
+};
+
+static void blockdev_getsize64_cb (guestfs_h *g, void *data, XDR *xdr)
+{
+ struct blockdev_getsize64_rv *rv = (struct blockdev_getsize64_rv *) data;
+
+ if (!xdr_guestfs_message_header (xdr, &rv->hdr)) {
+ error (g, "guestfs_blockdev_getsize64: failed to parse reply header");
+ return;
+ }
+ if (rv->hdr.status == GUESTFS_STATUS_ERROR) {
+ if (!xdr_guestfs_message_error (xdr, &rv->err)) {
+ error (g, "guestfs_blockdev_getsize64: failed to parse reply error");
+ return;
+ }
+ goto done;
+ }
+ if (!xdr_guestfs_blockdev_getsize64_ret (xdr, &rv->ret)) {
+ error (g, "guestfs_blockdev_getsize64: failed to parse reply");
+ return;
+ }
+ done:
+ rv->cb_done = 1;
+ main_loop.main_loop_quit (g);
+}
+
+int64_t guestfs_blockdev_getsize64 (guestfs_h *g,
+ const char *device)
+{
+ struct guestfs_blockdev_getsize64_args args;
+ struct blockdev_getsize64_rv rv;
+ int serial;
+
+ if (g->state != READY) {
+ error (g, "guestfs_blockdev_getsize64 called from the wrong state, %d != READY",
+ g->state);
+ return -1;
+ }
+
+ memset (&rv, 0, sizeof rv);
+
+ args.device = (char *) device;
+ serial = dispatch (g, GUESTFS_PROC_BLOCKDEV_GETSIZE64,
+ (xdrproc_t) xdr_guestfs_blockdev_getsize64_args, (char *) &args);
+ if (serial == -1)
+ return -1;
+
+ rv.cb_done = 0;
+ g->reply_cb_internal = blockdev_getsize64_cb;
+ g->reply_cb_internal_data = &rv;
+ main_loop.main_loop_run (g);
+ g->reply_cb_internal = NULL;
+ g->reply_cb_internal_data = NULL;
+ if (!rv.cb_done) {
+ error (g, "guestfs_blockdev_getsize64 failed, see earlier error messages");
+ return -1;
+ }
+
+ if (check_reply_header (g, &rv.hdr, GUESTFS_PROC_BLOCKDEV_GETSIZE64, serial) == -1)
+ return -1;
+
+ if (rv.hdr.status == GUESTFS_STATUS_ERROR) {
+ error (g, "%s", rv.err.error);
+ return -1;
+ }
+
+ return rv.ret.sizeinbytes;
+}
+
+struct blockdev_flushbufs_rv {
+ int cb_done; /* flag to indicate callback was called */
+ struct guestfs_message_header hdr;
+ struct guestfs_message_error err;
+};
+
+static void blockdev_flushbufs_cb (guestfs_h *g, void *data, XDR *xdr)
+{
+ struct blockdev_flushbufs_rv *rv = (struct blockdev_flushbufs_rv *) data;
+
+ if (!xdr_guestfs_message_header (xdr, &rv->hdr)) {
+ error (g, "guestfs_blockdev_flushbufs: failed to parse reply header");
+ return;
+ }
+ if (rv->hdr.status == GUESTFS_STATUS_ERROR) {
+ if (!xdr_guestfs_message_error (xdr, &rv->err)) {
+ error (g, "guestfs_blockdev_flushbufs: failed to parse reply error");
+ return;
+ }
+ goto done;
+ }
+ done:
+ rv->cb_done = 1;
+ main_loop.main_loop_quit (g);
+}
+
+int guestfs_blockdev_flushbufs (guestfs_h *g,
+ const char *device)
+{
+ struct guestfs_blockdev_flushbufs_args args;
+ struct blockdev_flushbufs_rv rv;
+ int serial;
+
+ if (g->state != READY) {
+ error (g, "guestfs_blockdev_flushbufs called from the wrong state, %d != READY",
+ g->state);
+ return -1;
+ }
+
+ memset (&rv, 0, sizeof rv);
+
+ args.device = (char *) device;
+ serial = dispatch (g, GUESTFS_PROC_BLOCKDEV_FLUSHBUFS,
+ (xdrproc_t) xdr_guestfs_blockdev_flushbufs_args, (char *) &args);
+ if (serial == -1)
+ return -1;
+
+ rv.cb_done = 0;
+ g->reply_cb_internal = blockdev_flushbufs_cb;
+ g->reply_cb_internal_data = &rv;
+ main_loop.main_loop_run (g);
+ g->reply_cb_internal = NULL;
+ g->reply_cb_internal_data = NULL;
+ if (!rv.cb_done) {
+ error (g, "guestfs_blockdev_flushbufs failed, see earlier error messages");
+ return -1;
+ }
+
+ if (check_reply_header (g, &rv.hdr, GUESTFS_PROC_BLOCKDEV_FLUSHBUFS, serial) == -1)
+ return -1;
+
+ if (rv.hdr.status == GUESTFS_STATUS_ERROR) {
+ error (g, "%s", rv.err.error);
+ return -1;
+ }
+
+ return 0;
+}
+
+struct blockdev_rereadpt_rv {
+ int cb_done; /* flag to indicate callback was called */
+ struct guestfs_message_header hdr;
+ struct guestfs_message_error err;
+};
+
+static void blockdev_rereadpt_cb (guestfs_h *g, void *data, XDR *xdr)
+{
+ struct blockdev_rereadpt_rv *rv = (struct blockdev_rereadpt_rv *) data;
+
+ if (!xdr_guestfs_message_header (xdr, &rv->hdr)) {
+ error (g, "guestfs_blockdev_rereadpt: failed to parse reply header");
+ return;
+ }
+ if (rv->hdr.status == GUESTFS_STATUS_ERROR) {
+ if (!xdr_guestfs_message_error (xdr, &rv->err)) {
+ error (g, "guestfs_blockdev_rereadpt: failed to parse reply error");
+ return;
+ }
+ goto done;
+ }
+ done:
+ rv->cb_done = 1;
+ main_loop.main_loop_quit (g);
+}
+
+int guestfs_blockdev_rereadpt (guestfs_h *g,
+ const char *device)
+{
+ struct guestfs_blockdev_rereadpt_args args;
+ struct blockdev_rereadpt_rv rv;
+ int serial;
+
+ if (g->state != READY) {
+ error (g, "guestfs_blockdev_rereadpt called from the wrong state, %d != READY",
+ g->state);
+ return -1;
+ }
+
+ memset (&rv, 0, sizeof rv);
+
+ args.device = (char *) device;
+ serial = dispatch (g, GUESTFS_PROC_BLOCKDEV_REREADPT,
+ (xdrproc_t) xdr_guestfs_blockdev_rereadpt_args, (char *) &args);
+ if (serial == -1)
+ return -1;
+
+ rv.cb_done = 0;
+ g->reply_cb_internal = blockdev_rereadpt_cb;
+ g->reply_cb_internal_data = &rv;
+ main_loop.main_loop_run (g);
+ g->reply_cb_internal = NULL;
+ g->reply_cb_internal_data = NULL;
+ if (!rv.cb_done) {
+ error (g, "guestfs_blockdev_rereadpt failed, see earlier error messages");
+ return -1;
+ }
+
+ if (check_reply_header (g, &rv.hdr, GUESTFS_PROC_BLOCKDEV_REREADPT, serial) == -1)
+ return -1;
+
+ if (rv.hdr.status == GUESTFS_STATUS_ERROR) {
+ error (g, "%s", rv.err.error);
+ return -1;
+ }
+
+ return 0;
+}
+
diff --git a/src/guestfs-actions.h b/src/guestfs-actions.h
index 5f523c34..14ca54fc 100644
--- a/src/guestfs-actions.h
+++ b/src/guestfs-actions.h
@@ -86,3 +86,13 @@ extern struct guestfs_stat *guestfs_stat (guestfs_h *handle, const char *path);
extern struct guestfs_stat *guestfs_lstat (guestfs_h *handle, const char *path);
extern struct guestfs_statvfs *guestfs_statvfs (guestfs_h *handle, const char *path);
extern char **guestfs_tune2fs_l (guestfs_h *handle, const char *device);
+extern int guestfs_blockdev_setro (guestfs_h *handle, const char *device);
+extern int guestfs_blockdev_setrw (guestfs_h *handle, const char *device);
+extern int guestfs_blockdev_getro (guestfs_h *handle, const char *device);
+extern int guestfs_blockdev_getss (guestfs_h *handle, const char *device);
+extern int guestfs_blockdev_getbsz (guestfs_h *handle, const char *device);
+extern int guestfs_blockdev_setbsz (guestfs_h *handle, const char *device, int blocksize);
+extern int64_t guestfs_blockdev_getsz (guestfs_h *handle, const char *device);
+extern int64_t guestfs_blockdev_getsize64 (guestfs_h *handle, const char *device);
+extern int guestfs_blockdev_flushbufs (guestfs_h *handle, const char *device);
+extern int guestfs_blockdev_rereadpt (guestfs_h *handle, const char *device);
diff --git a/src/guestfs_protocol.c b/src/guestfs_protocol.c
index 33de1dc1..eb90d756 100644
--- a/src/guestfs_protocol.c
+++ b/src/guestfs_protocol.c
@@ -1035,6 +1035,158 @@ xdr_guestfs_tune2fs_l_ret (XDR *xdrs, guestfs_tune2fs_l_ret *objp)
}
bool_t
+xdr_guestfs_blockdev_setro_args (XDR *xdrs, guestfs_blockdev_setro_args *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_string (xdrs, &objp->device, ~0))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_guestfs_blockdev_setrw_args (XDR *xdrs, guestfs_blockdev_setrw_args *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_string (xdrs, &objp->device, ~0))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_guestfs_blockdev_getro_args (XDR *xdrs, guestfs_blockdev_getro_args *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_string (xdrs, &objp->device, ~0))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_guestfs_blockdev_getro_ret (XDR *xdrs, guestfs_blockdev_getro_ret *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_bool (xdrs, &objp->ro))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_guestfs_blockdev_getss_args (XDR *xdrs, guestfs_blockdev_getss_args *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_string (xdrs, &objp->device, ~0))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_guestfs_blockdev_getss_ret (XDR *xdrs, guestfs_blockdev_getss_ret *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_int (xdrs, &objp->sectorsize))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_guestfs_blockdev_getbsz_args (XDR *xdrs, guestfs_blockdev_getbsz_args *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_string (xdrs, &objp->device, ~0))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_guestfs_blockdev_getbsz_ret (XDR *xdrs, guestfs_blockdev_getbsz_ret *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_int (xdrs, &objp->blocksize))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_guestfs_blockdev_setbsz_args (XDR *xdrs, guestfs_blockdev_setbsz_args *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_string (xdrs, &objp->device, ~0))
+ return FALSE;
+ if (!xdr_int (xdrs, &objp->blocksize))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_guestfs_blockdev_getsz_args (XDR *xdrs, guestfs_blockdev_getsz_args *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_string (xdrs, &objp->device, ~0))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_guestfs_blockdev_getsz_ret (XDR *xdrs, guestfs_blockdev_getsz_ret *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_quad_t (xdrs, &objp->sizeinsectors))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_guestfs_blockdev_getsize64_args (XDR *xdrs, guestfs_blockdev_getsize64_args *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_string (xdrs, &objp->device, ~0))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_guestfs_blockdev_getsize64_ret (XDR *xdrs, guestfs_blockdev_getsize64_ret *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_quad_t (xdrs, &objp->sizeinbytes))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_guestfs_blockdev_flushbufs_args (XDR *xdrs, guestfs_blockdev_flushbufs_args *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_string (xdrs, &objp->device, ~0))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
+xdr_guestfs_blockdev_rereadpt_args (XDR *xdrs, guestfs_blockdev_rereadpt_args *objp)
+{
+ register int32_t *buf;
+
+ if (!xdr_string (xdrs, &objp->device, ~0))
+ return FALSE;
+ return TRUE;
+}
+
+bool_t
xdr_guestfs_procedure (XDR *xdrs, guestfs_procedure *objp)
{
register int32_t *buf;
diff --git a/src/guestfs_protocol.h b/src/guestfs_protocol.h
index 270571e5..822d9600 100644
--- a/src/guestfs_protocol.h
+++ b/src/guestfs_protocol.h
@@ -540,6 +540,82 @@ struct guestfs_tune2fs_l_ret {
};
typedef struct guestfs_tune2fs_l_ret guestfs_tune2fs_l_ret;
+struct guestfs_blockdev_setro_args {
+ char *device;
+};
+typedef struct guestfs_blockdev_setro_args guestfs_blockdev_setro_args;
+
+struct guestfs_blockdev_setrw_args {
+ char *device;
+};
+typedef struct guestfs_blockdev_setrw_args guestfs_blockdev_setrw_args;
+
+struct guestfs_blockdev_getro_args {
+ char *device;
+};
+typedef struct guestfs_blockdev_getro_args guestfs_blockdev_getro_args;
+
+struct guestfs_blockdev_getro_ret {
+ bool_t ro;
+};
+typedef struct guestfs_blockdev_getro_ret guestfs_blockdev_getro_ret;
+
+struct guestfs_blockdev_getss_args {
+ char *device;
+};
+typedef struct guestfs_blockdev_getss_args guestfs_blockdev_getss_args;
+
+struct guestfs_blockdev_getss_ret {
+ int sectorsize;
+};
+typedef struct guestfs_blockdev_getss_ret guestfs_blockdev_getss_ret;
+
+struct guestfs_blockdev_getbsz_args {
+ char *device;
+};
+typedef struct guestfs_blockdev_getbsz_args guestfs_blockdev_getbsz_args;
+
+struct guestfs_blockdev_getbsz_ret {
+ int blocksize;
+};
+typedef struct guestfs_blockdev_getbsz_ret guestfs_blockdev_getbsz_ret;
+
+struct guestfs_blockdev_setbsz_args {
+ char *device;
+ int blocksize;
+};
+typedef struct guestfs_blockdev_setbsz_args guestfs_blockdev_setbsz_args;
+
+struct guestfs_blockdev_getsz_args {
+ char *device;
+};
+typedef struct guestfs_blockdev_getsz_args guestfs_blockdev_getsz_args;
+
+struct guestfs_blockdev_getsz_ret {
+ quad_t sizeinsectors;
+};
+typedef struct guestfs_blockdev_getsz_ret guestfs_blockdev_getsz_ret;
+
+struct guestfs_blockdev_getsize64_args {
+ char *device;
+};
+typedef struct guestfs_blockdev_getsize64_args guestfs_blockdev_getsize64_args;
+
+struct guestfs_blockdev_getsize64_ret {
+ quad_t sizeinbytes;
+};
+typedef struct guestfs_blockdev_getsize64_ret guestfs_blockdev_getsize64_ret;
+
+struct guestfs_blockdev_flushbufs_args {
+ char *device;
+};
+typedef struct guestfs_blockdev_flushbufs_args guestfs_blockdev_flushbufs_args;
+
+struct guestfs_blockdev_rereadpt_args {
+ char *device;
+};
+typedef struct guestfs_blockdev_rereadpt_args guestfs_blockdev_rereadpt_args;
+
enum guestfs_procedure {
GUESTFS_PROC_MOUNT = 1,
GUESTFS_PROC_SYNC = 2,
@@ -596,7 +672,17 @@ enum guestfs_procedure {
GUESTFS_PROC_LSTAT = 53,
GUESTFS_PROC_STATVFS = 54,
GUESTFS_PROC_TUNE2FS_L = 55,
- GUESTFS_PROC_dummy = 55 + 1,
+ GUESTFS_PROC_BLOCKDEV_SETRO = 56,
+ GUESTFS_PROC_BLOCKDEV_SETRW = 57,
+ GUESTFS_PROC_BLOCKDEV_GETRO = 58,
+ GUESTFS_PROC_BLOCKDEV_GETSS = 59,
+ GUESTFS_PROC_BLOCKDEV_GETBSZ = 60,
+ GUESTFS_PROC_BLOCKDEV_SETBSZ = 61,
+ GUESTFS_PROC_BLOCKDEV_GETSZ = 62,
+ GUESTFS_PROC_BLOCKDEV_GETSIZE64 = 63,
+ GUESTFS_PROC_BLOCKDEV_FLUSHBUFS = 64,
+ GUESTFS_PROC_BLOCKDEV_REREADPT = 65,
+ GUESTFS_PROC_dummy = 65 + 1,
};
typedef enum guestfs_procedure guestfs_procedure;
#define GUESTFS_MESSAGE_MAX 4194304
@@ -712,6 +798,21 @@ extern bool_t xdr_guestfs_statvfs_args (XDR *, guestfs_statvfs_args*);
extern bool_t xdr_guestfs_statvfs_ret (XDR *, guestfs_statvfs_ret*);
extern bool_t xdr_guestfs_tune2fs_l_args (XDR *, guestfs_tune2fs_l_args*);
extern bool_t xdr_guestfs_tune2fs_l_ret (XDR *, guestfs_tune2fs_l_ret*);
+extern bool_t xdr_guestfs_blockdev_setro_args (XDR *, guestfs_blockdev_setro_args*);
+extern bool_t xdr_guestfs_blockdev_setrw_args (XDR *, guestfs_blockdev_setrw_args*);
+extern bool_t xdr_guestfs_blockdev_getro_args (XDR *, guestfs_blockdev_getro_args*);
+extern bool_t xdr_guestfs_blockdev_getro_ret (XDR *, guestfs_blockdev_getro_ret*);
+extern bool_t xdr_guestfs_blockdev_getss_args (XDR *, guestfs_blockdev_getss_args*);
+extern bool_t xdr_guestfs_blockdev_getss_ret (XDR *, guestfs_blockdev_getss_ret*);
+extern bool_t xdr_guestfs_blockdev_getbsz_args (XDR *, guestfs_blockdev_getbsz_args*);
+extern bool_t xdr_guestfs_blockdev_getbsz_ret (XDR *, guestfs_blockdev_getbsz_ret*);
+extern bool_t xdr_guestfs_blockdev_setbsz_args (XDR *, guestfs_blockdev_setbsz_args*);
+extern bool_t xdr_guestfs_blockdev_getsz_args (XDR *, guestfs_blockdev_getsz_args*);
+extern bool_t xdr_guestfs_blockdev_getsz_ret (XDR *, guestfs_blockdev_getsz_ret*);
+extern bool_t xdr_guestfs_blockdev_getsize64_args (XDR *, guestfs_blockdev_getsize64_args*);
+extern bool_t xdr_guestfs_blockdev_getsize64_ret (XDR *, guestfs_blockdev_getsize64_ret*);
+extern bool_t xdr_guestfs_blockdev_flushbufs_args (XDR *, guestfs_blockdev_flushbufs_args*);
+extern bool_t xdr_guestfs_blockdev_rereadpt_args (XDR *, guestfs_blockdev_rereadpt_args*);
extern bool_t xdr_guestfs_procedure (XDR *, guestfs_procedure*);
extern bool_t xdr_guestfs_message_direction (XDR *, guestfs_message_direction*);
extern bool_t xdr_guestfs_message_status (XDR *, guestfs_message_status*);
@@ -797,6 +898,21 @@ extern bool_t xdr_guestfs_statvfs_args ();
extern bool_t xdr_guestfs_statvfs_ret ();
extern bool_t xdr_guestfs_tune2fs_l_args ();
extern bool_t xdr_guestfs_tune2fs_l_ret ();
+extern bool_t xdr_guestfs_blockdev_setro_args ();
+extern bool_t xdr_guestfs_blockdev_setrw_args ();
+extern bool_t xdr_guestfs_blockdev_getro_args ();
+extern bool_t xdr_guestfs_blockdev_getro_ret ();
+extern bool_t xdr_guestfs_blockdev_getss_args ();
+extern bool_t xdr_guestfs_blockdev_getss_ret ();
+extern bool_t xdr_guestfs_blockdev_getbsz_args ();
+extern bool_t xdr_guestfs_blockdev_getbsz_ret ();
+extern bool_t xdr_guestfs_blockdev_setbsz_args ();
+extern bool_t xdr_guestfs_blockdev_getsz_args ();
+extern bool_t xdr_guestfs_blockdev_getsz_ret ();
+extern bool_t xdr_guestfs_blockdev_getsize64_args ();
+extern bool_t xdr_guestfs_blockdev_getsize64_ret ();
+extern bool_t xdr_guestfs_blockdev_flushbufs_args ();
+extern bool_t xdr_guestfs_blockdev_rereadpt_args ();
extern bool_t xdr_guestfs_procedure ();
extern bool_t xdr_guestfs_message_direction ();
extern bool_t xdr_guestfs_message_status ();
diff --git a/src/guestfs_protocol.x b/src/guestfs_protocol.x
index 1b6e7175..ba5d70cb 100644
--- a/src/guestfs_protocol.x
+++ b/src/guestfs_protocol.x
@@ -414,6 +414,67 @@ struct guestfs_tune2fs_l_ret {
str superblock<>;
};
+struct guestfs_blockdev_setro_args {
+ string device<>;
+};
+
+struct guestfs_blockdev_setrw_args {
+ string device<>;
+};
+
+struct guestfs_blockdev_getro_args {
+ string device<>;
+};
+
+struct guestfs_blockdev_getro_ret {
+ bool ro;
+};
+
+struct guestfs_blockdev_getss_args {
+ string device<>;
+};
+
+struct guestfs_blockdev_getss_ret {
+ int sectorsize;
+};
+
+struct guestfs_blockdev_getbsz_args {
+ string device<>;
+};
+
+struct guestfs_blockdev_getbsz_ret {
+ int blocksize;
+};
+
+struct guestfs_blockdev_setbsz_args {
+ string device<>;
+ int blocksize;
+};
+
+struct guestfs_blockdev_getsz_args {
+ string device<>;
+};
+
+struct guestfs_blockdev_getsz_ret {
+ hyper sizeinsectors;
+};
+
+struct guestfs_blockdev_getsize64_args {
+ string device<>;
+};
+
+struct guestfs_blockdev_getsize64_ret {
+ hyper sizeinbytes;
+};
+
+struct guestfs_blockdev_flushbufs_args {
+ string device<>;
+};
+
+struct guestfs_blockdev_rereadpt_args {
+ string device<>;
+};
+
enum guestfs_procedure {
GUESTFS_PROC_MOUNT = 1,
GUESTFS_PROC_SYNC = 2,
@@ -470,6 +531,16 @@ enum guestfs_procedure {
GUESTFS_PROC_LSTAT = 53,
GUESTFS_PROC_STATVFS = 54,
GUESTFS_PROC_TUNE2FS_L = 55,
+ GUESTFS_PROC_BLOCKDEV_SETRO = 56,
+ GUESTFS_PROC_BLOCKDEV_SETRW = 57,
+ GUESTFS_PROC_BLOCKDEV_GETRO = 58,
+ GUESTFS_PROC_BLOCKDEV_GETSS = 59,
+ GUESTFS_PROC_BLOCKDEV_GETBSZ = 60,
+ GUESTFS_PROC_BLOCKDEV_SETBSZ = 61,
+ GUESTFS_PROC_BLOCKDEV_GETSZ = 62,
+ GUESTFS_PROC_BLOCKDEV_GETSIZE64 = 63,
+ GUESTFS_PROC_BLOCKDEV_FLUSHBUFS = 64,
+ GUESTFS_PROC_BLOCKDEV_REREADPT = 65,
GUESTFS_PROC_dummy
};