[Libguestfs] [PATCH 3/3] builder: show the application name in errors of the index parser

Richard W.M. Jones rjones at redhat.com
Wed Mar 19 22:17:09 UTC 2014


On Wed, Mar 19, 2014 at 05:53:11PM +0100, Pino Toscano wrote:
> ---
>  builder/index-parse.y    | 4 +++-
>  builder/index-parser-c.c | 5 +++--
>  builder/index-struct.h   | 1 +
>  builder/index_parser.ml  | 2 +-
>  builder/ini_reader.ml    | 6 +++---
>  builder/ini_reader.mli   | 2 +-
>  builder/sources.ml       | 2 +-
>  7 files changed, 13 insertions(+), 9 deletions(-)
> 
> diff --git a/builder/index-parse.y b/builder/index-parse.y
> index 9c75f71..5554e53 100644
> --- a/builder/index-parse.y
> +++ b/builder/index-parse.y
> @@ -143,7 +143,9 @@ emptylines:
>  void
>  yyerror (YYLTYPE * yylloc, yyscan_t scanner, struct parse_context *context, const char *msg)
>  {
> -  fprintf (stderr, "%s%ssyntax error at line %d: %s\n",
> +  fprintf (stderr, "%s%s%s%ssyntax error at line %d: %s\n",
> +           context->program_name ? context->program_name : "",
> +           context->program_name ? ": " : "",
>             context->input_file ? context->input_file : "",
>             context->input_file ? ": " : "",
>             yylloc->first_line, msg);
> diff --git a/builder/index-parser-c.c b/builder/index-parser-c.c
> index 8cae7b8..5dcc82f 100644
> --- a/builder/index-parser-c.c
> +++ b/builder/index-parser-c.c
> @@ -46,9 +46,9 @@ extern void unix_error (int errcode, char * cmdname, value arg) Noreturn;
>  extern int do_parse (struct parse_context *context, FILE *in);
>  
>  value
> -virt_builder_parse_index (value filenamev)
> +virt_builder_parse_index (value progv, value filenamev)
>  {
> -  CAMLparam1 (filenamev);
> +  CAMLparam2 (progv, filenamev);
>    CAMLlocal5 (rv, v, sv, sv2, fv);
>    struct section *sections;
>    size_t i, nr_sections;
> @@ -56,6 +56,7 @@ virt_builder_parse_index (value filenamev)
>    FILE *in;
>  
>    parse_context_init (&context);
> +  context.program_name = String_val (progv);
>    context.input_file = String_val (filenamev);
>  
>    in = fopen (String_val (filenamev), "r");
> diff --git a/builder/index-struct.h b/builder/index-struct.h
> index 7d4b8e0..7e16637 100644
> --- a/builder/index-struct.h
> +++ b/builder/index-struct.h
> @@ -44,6 +44,7 @@ struct parse_context {
>     */
>    int seen_comments;
>    const char *input_file;
> +  const char *program_name;
>  };
>  
>  /* Initialize the content of a parse_context. */
> diff --git a/builder/index_parser.ml b/builder/index_parser.ml
> index 472a6c7..5d566f9 100644
> --- a/builder/index_parser.ml
> +++ b/builder/index_parser.ml
> @@ -119,7 +119,7 @@ let get_index ~prog ~debug ~downloader ~sigchecker source =
>      Sigchecker.verify sigchecker tmpfile;
>  
>      (* Try parsing the file. *)
> -    let sections = Ini_reader.read_ini tmpfile in
> +    let sections = Ini_reader.read_ini ~prog tmpfile in
>      if delete_tmpfile then
>        (try Unix.unlink tmpfile with _ -> ());
>  
> diff --git a/builder/ini_reader.ml b/builder/ini_reader.ml
> index fbd4d2f..68e3863 100644
> --- a/builder/ini_reader.ml
> +++ b/builder/ini_reader.ml
> @@ -27,10 +27,10 @@ and c_section = string * c_fields             (* [name] + fields *)
>  and c_fields = field array
>  
>  (* Calls yyparse in the C code. *)
> -external parse_index : string -> c_sections = "virt_builder_parse_index"
> +external parse_index : prog:string -> string -> c_sections = "virt_builder_parse_index"
>  
> -let read_ini file =
> -  let sections = parse_index file in
> +let read_ini ~prog file =
> +  let sections = parse_index ~prog file in
>    let sections = Array.to_list sections in
>    List.map (
>      fun (n, fields) ->
> diff --git a/builder/ini_reader.mli b/builder/ini_reader.mli
> index 992a1cb..ac3bebe 100644
> --- a/builder/ini_reader.mli
> +++ b/builder/ini_reader.mli
> @@ -21,4 +21,4 @@ and section = string * fields                (* [name] + fields *)
>  and fields = field list
>  and field = string * string option * string  (* key + subkey + value *)
>  
> -val read_ini : string -> sections
> +val read_ini : prog:string -> string -> sections
> diff --git a/builder/sources.ml b/builder/sources.ml
> index 016adc4..1fee65e 100644
> --- a/builder/sources.ml
> +++ b/builder/sources.ml
> @@ -32,7 +32,7 @@ let parse_conf ~prog ~debug file =
>    if debug then (
>      eprintf (f_"%s: trying to read %s\n") prog file;
>    );
> -  let sections = Ini_reader.read_ini file in
> +  let sections = Ini_reader.read_ini ~prog file in
>  
>    let sources = List.fold_right (
>      fun (n, fields) acc ->

ACK.

Thanks, Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/




More information about the Libguestfs mailing list