|
From: | Don Slutz |
Subject: | Re: [Qemu-devel] [PATCH 13/22] add visitor for parsing hz[KMG] input string |
Date: | Fri, 07 Sep 2012 20:00:43 -0400 |
User-agent: | Thunderbird 2.0.0.23 (X11/20090825) |
Don Slutz wrote:
Opps, This is not correct. I was going too fast. After more thought, I will agree that C says that val will not be used un-initialized. So it looks to me like a compiler bug. Since the warning says "val' may be used uninitialized.." gcc is "not" reporting a real coding error.On 09/07/12 18:47, Igor Mammedov wrote:I am using CentOS 6.3 so a different compiler. This is the line that has the issue.On Fri, 7 Sep 2012 18:12:00 -0400 Don Slutz <address@hidden> wrote:On 09/07/12 16:55, Igor Mammedov wrote:Signed-off-by: Igor Mammedov <address@hidden> Acked-by: Andreas Färber <address@hidden> -- v2: * replaced _hz suffix for frequency visitor by _freq suffix suggested-by: Andreas Färber * fixed typo & extra space spotted-by: Andreas Färber --- qapi/qapi-visit-core.c | 11 +++++++++++ qapi/qapi-visit-core.h | 2 ++ qapi/string-input-visitor.c | 22 ++++++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/qapi/qapi-visit-core.c b/qapi/qapi-visit-core.c index 7a82b63..5c8705e 100644 --- a/qapi/qapi-visit-core.c +++ b/qapi/qapi-visit-core.c@@ -311,3 +311,14 @@ void input_type_enum(Visitor *v, int *obj, const char *strings[],g_free(enum_str); *obj = value; } ++void visit_type_freq(Visitor *v, int64_t *obj, const char *name, Error **errp)+{ + if (!error_is_set(errp)) { + if (v->type_freq) { + v->type_freq(v, obj, name, errp); + } else { + v->type_int(v, obj, name, errp); + } + } +} diff --git a/qapi/qapi-visit-core.h b/qapi/qapi-visit-core.h index 60aceda..e5e7dd7 100644 --- a/qapi/qapi-visit-core.h +++ b/qapi/qapi-visit-core.h @@ -62,6 +62,7 @@ struct Visitorvoid (*type_int64)(Visitor *v, int64_t *obj, const char *name, Error **errp); /* visit_type_size() falls back to (*type_uint64)() if type_size is unset */ void (*type_size)(Visitor *v, uint64_t *obj, const char *name, Error **errp); + void (*type_freq)(Visitor *v, int64_t *obj, const char *name, Error **errp);};void visit_start_handle(Visitor *v, void **obj, const char *kind, @@ -91,5 +92,6 @@ void visit_type_size(Visitor *v, uint64_t *obj, const char *name, Error **errp); void visit_type_bool(Visitor *v, bool *obj, const char *name, Error **errp); void visit_type_str(Visitor *v, char **obj, const char *name, Error **errp); void visit_type_number(Visitor *v, double *obj, const char *name, Error **errp); +void visit_type_freq(Visitor *v, int64_t *obj, const char *name, Error **errp);#endif diff --git a/qapi/string-input-visitor.c b/qapi/string-input-visitor.c index 497eb9a..47d2a84 100644 --- a/qapi/string-input-visitor.c +++ b/qapi/string-input-visitor.c@@ -110,6 +110,27 @@ static void parse_start_optional(Visitor *v, bool *present,*present = true; }+static void parse_type_freq(Visitor *v, int64_t *obj, const char *name,+ Error **errp) +{+ StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);+ char *endp = (char *) siv->string; + long long val;I get: cc1: warnings being treated as errors qapi/string-input-visitor.c: In function 'parse_type_freq': qapi/string-input-visitor.c:118: error: 'val' may be used uninitialized in this function make: *** [qapi/string-input-visitor.o] Error 1 make: *** Waiting for unfinished jobs....FC17 with default configure settings doesn't complain. And I really do not see how it could be.Which the change: diff --git a/qapi/string-input-visitor.c b/qapi/string-input-visitor.c index 47d2a84..74fe395 100644 --- a/qapi/string-input-visitor.c +++ b/qapi/string-input-visitor.c @@ -115,7 +115,7 @@ static void parse_type_freq(Visitor *v, int64_t *obj, const char *name, {StringInputVisitor *siv = DO_UPCAST(StringInputVisitor, visitor, v);char *endp = (char *) siv->string; - long long val; + long long val = 0; errno = 0; if (siv->string) { Fixes it for me.+ + errno = 0; + if (siv->string) { + val = strtosz_suffix_unit(siv->string, &endp, + STRTOSZ_DEFSUFFIX_B, 1000); + } + if (!siv->string || val == -1 || *endp) {If !siv->string is true the 1st if does not set val. val is then checked for -1.
This all said, I think the extra init of val (to 0 or -1) is better then requiring a compiler upgrade.
+ error_set(errp, QERR_INVALID_PARAMETER_VALUE, name, + "a value representable as a non-negative int64"); + return; + } + + *obj = val; +} + Visitor *string_input_get_visitor(StringInputVisitor *v) { return &v->visitor;@@ -132,6 +153,7 @@ StringInputVisitor *string_input_visitor_new(const char *str)v->visitor.type_str = parse_type_str; v->visitor.type_number = parse_type_number; v->visitor.start_optional = parse_start_optional; + v->visitor.type_freq = parse_type_freq; v->string = str; return v;-Don Slutz-Don Slutz
-Don Slutz
[Prev in Thread] | Current Thread | [Next in Thread] |