Compiles, works as expected, looks good to me. Push it, please!

On Wednesday 22 of August 2012 16:38:52 Michal Toman wrote:
> ---
>  src/plugins/ureport.c |   79
> +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 79
> insertions(+), 0 deletions(-)
> 
> diff --git a/src/plugins/ureport.c b/src/plugins/ureport.c
> index 96c7878..b48cabb 100644
> --- a/src/plugins/ureport.c
> +++ b/src/plugins/ureport.c
> @@ -58,8 +58,69 @@ struct ureport_server_response {
>      const char *value;
>      const char *message;
>      const char *bthash;
> +    GList *reported_to_list;
>  };
> 
> +/* reported_to json element should be a list of structures
> +{ "reporter": "Bugzilla",
> +  "type": "url",
> +  "value": "https://bugzilla.redhat.com/show_bug.cgi?id=XYZ"; } */
> +static GList *parse_reported_to_from_json_list(struct json_object *list)
> +{
> +    int i;
> +    json_object *list_elem, *struct_elem;
> +    const char *reporter, *value, *type;
> +    char *reported_to_line, *prefix;
> +    GList *result = NULL;
> +
> +    for (i = 0; i < json_object_array_length(list); ++i)
> +    {
> +        prefix = NULL;
> +        list_elem = json_object_array_get_idx(list, i);
> +        if (!list_elem)
> +            continue;
> +
> +        struct_elem = json_object_object_get(list_elem, "reporter");
> +        if (!struct_elem)
> +            continue;
> +
> +        reporter = json_object_get_string(struct_elem);
> +        if (!reporter)
> +            continue;
> +
> +        struct_elem = json_object_object_get(list_elem, "value");
> +        if (!struct_elem)
> +            continue;
> +
> +        value = json_object_get_string(struct_elem);
> +        if (!value)
> +            continue;
> +
> +        struct_elem = json_object_object_get(list_elem, "type");
> +        if (!struct_elem)
> +            continue;
> +
> +        type = json_object_get_string(struct_elem);
> +        if (type)
> +        {
> +            if (strcasecmp("url", type) == 0)
> +                prefix = xstrdup("URL=");
> +            else if (strcasecmp("bthash", type) == 0)
> +                prefix = xstrdup("BTHASH=");
> +        }
> +
> +        if (!prefix)
> +            prefix = xstrdup("");
> +
> +        reported_to_line = xasprintf("%s: %s%s", reporter, prefix, value);
> +        free(prefix);
> +
> +        result = g_list_append(result, reported_to_line);
> +    }
> +
> +    return result;
> +}
> +
>  /*
>   * Reponse samples:
>   * {"error":"field 'foo' is required"}
> @@ -92,6 +153,10 @@ static bool ureport_server_parse_json(json_object *json,
> struct ureport_server_r if (bthash)
>              out_response->bthash = json_object_get_string(bthash);
> 
> +        json_object *reported_to_list = json_object_object_get(json,
> "reported_to"); +        if (reported_to_list)
> +            out_response->reported_to_list =
> parse_reported_to_from_json_list(reported_to_list); +
>          return true;
>      }
> 
> @@ -276,6 +341,20 @@ int main(int argc, char **argv)
>                  char *msg = xasprintf("uReport: BTHASH=%s",
> response.bthash); add_reported_to(dd, msg);
>                  free(msg);
> +
> +                if (response.reported_to_list)
> +                {
> +                    GList *elem = response.reported_to_list;
> +                    while (elem)
> +                    {
> +                        add_reported_to(dd, elem->data);
> +                        free(elem->data);
> +                        elem = g_list_next(elem);
> +                    }
> +
> +                    g_list_free(response.reported_to_list);
> +                }
> +
>                  dd_close(dd);
>              }

Reply via email to