On 10/25/2016 08:59 PM, Fam Zheng wrote: > Currently, the generated function body will do "strlen(arg)" but the > argument could be 'char **'. Avoid that by exclusding such cases in
s/exclusding/excluding/ > is_string check. > > Reported by patchew's "make docker-test-mingw@fedora". > > Signed-off-by: Fam Zheng <f...@redhat.com> > --- > scripts/tracetool/backend/simple.py | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/scripts/tracetool/backend/simple.py > b/scripts/tracetool/backend/simple.py > index 9885e83..2538795 100644 > --- a/scripts/tracetool/backend/simple.py > +++ b/scripts/tracetool/backend/simple.py > @@ -21,7 +21,9 @@ PUBLIC = True > > def is_string(arg): > strtype = ('const char*', 'char*', 'const char *', 'char *') > - if arg.lstrip().startswith(strtype): > + non_strtype = ('const char**', 'char**', 'const char **', 'char **') > + arg_strip = arg.lstrip() > + if arg_strip.startswith(strtype) and not > arg_strip.startswith(non_strtype): There may be a more compact way to write it, but I'm not enough of a python expert to know offhand what else to suggest (it's not as simple as string concatenation of strtype + '*', since strtype is a tuple rather than a string). What you have will fail to detect 'const char *const *' as a non-string (possible if we have some argv-like function that takes a constant array of constant strings), but I guess we can worry about that if we actually try to trace something with that signature. In the meantime, what you have solves the immediate failure, so: Reviewed-by: Eric Blake <ebl...@redhat.com> -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature