[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 18/32] libxl_qmp: Separate QMP message generation from qmp_send_prepare
On Fri, Jul 27, 2018 at 03:06:00PM +0100, Anthony PERARD wrote: > To be able to re-use qmp_prepare_qmp_cmd with libxl__ev_qmp. > > Also, add the QMP end of command '\r\n' into the generated string. > > Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx> > --- > tools/libxl/libxl_qmp.c | 62 +++++++++++++++++++++++++++++------------ > 1 file changed, 44 insertions(+), 18 deletions(-) > > diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c > index 665b6f5d05..38a4395266 100644 > --- a/tools/libxl/libxl_qmp.c > +++ b/tools/libxl/libxl_qmp.c > @@ -578,17 +578,17 @@ static int qmp_next(libxl__gc *gc, libxl__qmp_handler > *qmp) > return rc; > } > > -static char *qmp_send_prepare(libxl__gc *gc, libxl__qmp_handler *qmp, > - const char *cmd, libxl__json_object *args, > - qmp_callback_t callback, void *opaque, > - qmp_request_context *context) > -{ > - const unsigned char *buf = NULL; > - char *ret = NULL; > - libxl_yajl_length len = 0; > +static char *qmp_prepare_qmp_cmd(libxl__gc *gc, Is it really needed to have qmp twice in the function name? qmp_prepare_cmd LGTM. > + const char *cmd, > + const libxl__json_object *args, > + int id, > + size_t *len_r) > +{ > + const unsigned char *buf; While there I would drop the unsigned... > + libxl_yajl_length len; > yajl_gen_status s; > yajl_gen hand; > - callback_id_pair *elm = NULL; > + char *ret = NULL; > > hand = libxl_yajl_gen_alloc(NULL); > > @@ -600,7 +600,7 @@ static char *qmp_send_prepare(libxl__gc *gc, > libxl__qmp_handler *qmp, > libxl__yajl_gen_asciiz(hand, "execute"); > libxl__yajl_gen_asciiz(hand, cmd); > libxl__yajl_gen_asciiz(hand, "id"); > - yajl_gen_integer(hand, ++qmp->last_id_used); > + yajl_gen_integer(hand, id); > if (args) { > libxl__yajl_gen_asciiz(hand, "arguments"); > libxl__json_object_to_yajl_gen(gc, hand, args); > @@ -610,6 +610,36 @@ static char *qmp_send_prepare(libxl__gc *gc, > libxl__qmp_handler *qmp, > s = yajl_gen_get_buf(hand, &buf, &len); > > if (s) { > + goto out; > + } > + > + ret = libxl__malloc(NOGC, len + 3); > + strncpy(ret, (const char *)buf, len + 3); ... so that you can drop the cast from here. > + strncpy(ret + len, "\r\n", 3); > + len += 2; > + > + if (len_r) > + *len_r = len; > + > +out: > + yajl_gen_free(hand); > + return ret; > +} > + > +static char *qmp_send_prepare(libxl__gc *gc, libxl__qmp_handler *qmp, > + const char *cmd, libxl__json_object *args, > + qmp_callback_t callback, void *opaque, > + qmp_request_context *context, > + size_t *len_r) > +{ > + char *buf; > + callback_id_pair *elm; > + > + buf = qmp_prepare_qmp_cmd(gc, > + cmd, args, ++qmp->last_id_used, > + NULL); Indentation is very weird here. AFAICT it can fit in a single line? Thanks, Roger. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |