[Libguestfs] [PATCH 2/2] c: Allow NULL optargs to be passed to _argv calls

Richard W.M. Jones rjones at redhat.com
Tue Jan 17 14:02:34 UTC 2012


On Tue, Jan 17, 2012 at 01:48:48PM +0000, Matthew Booth wrote:
> Previously, passing NULL optargs to an _argv call resulted in a segfault. This
> change causes NULL optargs to be interpreted as no optargs, and to be correctly
> handled accordingly.
> ---
>  generator/generator_c.ml |   15 +++++++++++++++
>  1 files changed, 15 insertions(+), 0 deletions(-)
> 
> diff --git a/generator/generator_c.ml b/generator/generator_c.ml
> index 9cfb2b7..c6962f5 100644
> --- a/generator/generator_c.ml
> +++ b/generator/generator_c.ml
> @@ -994,6 +994,16 @@ trace_send_line (guestfs_h *g)
>        indent shortname (string_of_errcode errcode)
>    in
>  
> +  let handle_null_optargs optargs shortname =
> +    if optargs <> [] then (
> +      pr "  struct guestfs_%s_argv optargs_null;\n" shortname;
> +      pr "  if (!optargs) {\n";
> +      pr "    optargs_null.bitmask = 0;\n";
> +      pr "    optargs = &optargs_null;\n";
> +      pr "  }\n\n";
> +    )
> +  in
> +
>    (* For non-daemon functions, generate a wrapper around each function. *)
>    List.iter (
>      fun (shortname, (ret, _, optargs as style), _, _, _, _, _) ->
> @@ -1006,6 +1016,9 @@ trace_send_line (guestfs_h *g)
>            ~handle:"g" ~prefix:"guestfs_" ~suffix:"_argv" ~optarg_proto:Argv
>            shortname style;
>        pr "{\n";
> +
> +      handle_null_optargs optargs shortname;
> +
>        pr "  int trace_flag = g->trace;\n";
>        pr "  FILE *trace_fp;\n";
>        (match ret with
> @@ -1071,6 +1084,8 @@ trace_send_line (guestfs_h *g)
>  
>        pr "{\n";
>  
> +      handle_null_optargs optargs shortname;
> +
>        (match args with
>         | [] -> ()
>         | _ -> pr "  struct %s_args args;\n" name
> -- 
> 1.7.7.5
> 
> _______________________________________________
> Libguestfs mailing list
> Libguestfs at redhat.com
> https://www.redhat.com/mailman/listinfo/libguestfs

ACK.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
virt-p2v converts physical machines to virtual machines.  Boot with a
live CD or over the network (PXE) and turn machines into Xen guests.
http://et.redhat.com/~rjones/virt-p2v




More information about the Libguestfs mailing list