diff options
author | Richard Jones <rjones@redhat.com> | 2009-04-08 23:47:31 +0100 |
---|---|---|
committer | Richard Jones <rjones@redhat.com> | 2009-04-08 23:47:31 +0100 |
commit | c168ce1c91c8f4f615ec53e140970e0017ad750d (patch) | |
tree | a4d3c6b3cbf4a42f5fa9cf6fdb33ecda27a2bfd6 /src | |
parent | f4299f7ea55c4bbc9302e102d2fc801829e75ef6 (diff) | |
download | libguestfs-c168ce1c91c8f4f615ec53e140970e0017ad750d.tar.gz libguestfs-c168ce1c91c8f4f615ec53e140970e0017ad750d.tar.xz libguestfs-c168ce1c91c8f4f615ec53e140970e0017ad750d.zip |
Generated code for new guestfs_read_lines API call.
Diffstat (limited to 'src')
-rw-r--r-- | src/guestfs-actions.c | 78 | ||||
-rw-r--r-- | src/guestfs-actions.h | 1 | ||||
-rw-r--r-- | src/guestfs_protocol.c | 21 | ||||
-rw-r--r-- | src/guestfs_protocol.h | 20 | ||||
-rw-r--r-- | src/guestfs_protocol.x | 11 |
5 files changed, 130 insertions, 1 deletions
diff --git a/src/guestfs-actions.c b/src/guestfs-actions.c index 44d7e1ed..ebde5fca 100644 --- a/src/guestfs-actions.c +++ b/src/guestfs-actions.c @@ -1033,3 +1033,81 @@ struct guestfs_lvm_lv_list *guestfs_lvs_full (guestfs_h *g) return safe_memdup (g, &rv.ret.logvols, sizeof (rv.ret.logvols)); } +struct read_lines_rv { + int cb_done; /* flag to indicate callback was called */ + struct guestfs_message_header hdr; + struct guestfs_message_error err; + struct guestfs_read_lines_ret ret; +}; + +static void read_lines_cb (guestfs_h *g, void *data, XDR *xdr) +{ + struct read_lines_rv *rv = (struct read_lines_rv *) data; + + if (!xdr_guestfs_message_header (xdr, &rv->hdr)) { + error (g, "guestfs_read_lines: failed to parse reply header"); + return; + } + if (rv->hdr.status == GUESTFS_STATUS_ERROR) { + if (!xdr_guestfs_message_error (xdr, &rv->err)) { + error (g, "guestfs_read_lines: failed to parse reply error"); + return; + } + goto done; + } + if (!xdr_guestfs_read_lines_ret (xdr, &rv->ret)) { + error (g, "guestfs_read_lines: failed to parse reply"); + return; + } + done: + rv->cb_done = 1; + main_loop.main_loop_quit (g); +} + +char **guestfs_read_lines (guestfs_h *g, + const char *path) +{ + struct guestfs_read_lines_args args; + struct read_lines_rv rv; + int serial; + + if (g->state != READY) { + error (g, "guestfs_read_lines called from the wrong state, %d != READY", + g->state); + return NULL; + } + + memset (&rv, 0, sizeof rv); + + args.path = (char *) path; + serial = dispatch (g, GUESTFS_PROC_READ_LINES, + (xdrproc_t) xdr_guestfs_read_lines_args, (char *) &args); + if (serial == -1) + return NULL; + + rv.cb_done = 0; + g->reply_cb_internal = read_lines_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_read_lines failed, see earlier error messages"); + return NULL; + } + + if (check_reply_header (g, &rv.hdr, GUESTFS_PROC_READ_LINES, serial) == -1) + return NULL; + + if (rv.hdr.status == GUESTFS_STATUS_ERROR) { + error (g, "%s", rv.err.error); + return NULL; + } + + /* caller will free this, but we need to add a NULL entry */ + rv.ret.lines.lines_val = safe_realloc (g, rv.ret.lines.lines_val, + sizeof (char *) * (rv.ret.lines.lines_len + 1)); + rv.ret.lines.lines_val[rv.ret.lines.lines_len] = NULL; + return rv.ret.lines.lines_val; +} + diff --git a/src/guestfs-actions.h b/src/guestfs-actions.h index 4b65f3cd..a84488d6 100644 --- a/src/guestfs-actions.h +++ b/src/guestfs-actions.h @@ -45,3 +45,4 @@ extern char **guestfs_lvs (guestfs_h *handle); extern struct guestfs_lvm_pv_list *guestfs_pvs_full (guestfs_h *handle); extern struct guestfs_lvm_vg_list *guestfs_vgs_full (guestfs_h *handle); extern struct guestfs_lvm_lv_list *guestfs_lvs_full (guestfs_h *handle); +extern char **guestfs_read_lines (guestfs_h *handle, const char *path); diff --git a/src/guestfs_protocol.c b/src/guestfs_protocol.c index 2a194a71..31034e54 100644 --- a/src/guestfs_protocol.c +++ b/src/guestfs_protocol.c @@ -342,6 +342,27 @@ xdr_guestfs_lvs_full_ret (XDR *xdrs, guestfs_lvs_full_ret *objp) } bool_t +xdr_guestfs_read_lines_args (XDR *xdrs, guestfs_read_lines_args *objp) +{ + register int32_t *buf; + + if (!xdr_string (xdrs, &objp->path, ~0)) + return FALSE; + return TRUE; +} + +bool_t +xdr_guestfs_read_lines_ret (XDR *xdrs, guestfs_read_lines_ret *objp) +{ + register int32_t *buf; + + if (!xdr_array (xdrs, (char **)&objp->lines.lines_val, (u_int *) &objp->lines.lines_len, ~0, + sizeof (str), (xdrproc_t) xdr_str)) + 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 9a7187dd..a2bf0c13 100644 --- a/src/guestfs_protocol.h +++ b/src/guestfs_protocol.h @@ -191,6 +191,19 @@ struct guestfs_lvs_full_ret { }; typedef struct guestfs_lvs_full_ret guestfs_lvs_full_ret; +struct guestfs_read_lines_args { + char *path; +}; +typedef struct guestfs_read_lines_args guestfs_read_lines_args; + +struct guestfs_read_lines_ret { + struct { + u_int lines_len; + str *lines_val; + } lines; +}; +typedef struct guestfs_read_lines_ret guestfs_read_lines_ret; + enum guestfs_procedure { GUESTFS_PROC_MOUNT = 1, GUESTFS_PROC_SYNC = 2, @@ -206,7 +219,8 @@ enum guestfs_procedure { GUESTFS_PROC_PVS_FULL = 12, GUESTFS_PROC_VGS_FULL = 13, GUESTFS_PROC_LVS_FULL = 14, - GUESTFS_PROC_dummy = 14 + 1, + GUESTFS_PROC_READ_LINES = 15, + GUESTFS_PROC_dummy = 15 + 1, }; typedef enum guestfs_procedure guestfs_procedure; #define GUESTFS_MESSAGE_MAX 4194304 @@ -267,6 +281,8 @@ extern bool_t xdr_guestfs_lvs_ret (XDR *, guestfs_lvs_ret*); extern bool_t xdr_guestfs_pvs_full_ret (XDR *, guestfs_pvs_full_ret*); extern bool_t xdr_guestfs_vgs_full_ret (XDR *, guestfs_vgs_full_ret*); extern bool_t xdr_guestfs_lvs_full_ret (XDR *, guestfs_lvs_full_ret*); +extern bool_t xdr_guestfs_read_lines_args (XDR *, guestfs_read_lines_args*); +extern bool_t xdr_guestfs_read_lines_ret (XDR *, guestfs_read_lines_ret*); 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*); @@ -297,6 +313,8 @@ extern bool_t xdr_guestfs_lvs_ret (); extern bool_t xdr_guestfs_pvs_full_ret (); extern bool_t xdr_guestfs_vgs_full_ret (); extern bool_t xdr_guestfs_lvs_full_ret (); +extern bool_t xdr_guestfs_read_lines_args (); +extern bool_t xdr_guestfs_read_lines_ret (); 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 b2fe5351..c00c4c4d 100644 --- a/src/guestfs_protocol.x +++ b/src/guestfs_protocol.x @@ -178,6 +178,16 @@ struct guestfs_lvs_full_ret { guestfs_lvm_int_lv_list logvols; }; +/* guestfs_read_lines */ + +struct guestfs_read_lines_args { + string path<>; +}; + +struct guestfs_read_lines_ret { + str lines<>; +}; + enum guestfs_procedure { GUESTFS_PROC_MOUNT = 1, GUESTFS_PROC_SYNC = 2, @@ -193,6 +203,7 @@ enum guestfs_procedure { GUESTFS_PROC_PVS_FULL = 12, GUESTFS_PROC_VGS_FULL = 13, GUESTFS_PROC_LVS_FULL = 14, + GUESTFS_PROC_READ_LINES = 15, GUESTFS_PROC_dummy }; |