On Mon, Oct 12, 2020 at 05:19:46PM +0100, Andre Przywara wrote: > With -Wsign-compare, compilers warn about a mismatching signedness > in comparisons in the function get_node_by_path(). > > Taking the difference between two pointers results in a signed ptrdiff_t > type, which mismatches the unsigned type returned by strlen(). > Since "p" has been returned by a call to strchr() with "path" as its > argument, we know for sure that it's bigger than "path", so the > difference must be positive. So a cast to an unsigned type is valid. > > Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx> Again, (size_t) would be more strictly correct, I think. > --- > livetree.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/livetree.c b/livetree.c > index 8393637..b8d0745 100644 > --- a/livetree.c > +++ b/livetree.c > @@ -526,7 +526,7 @@ struct node *get_node_by_path(struct node *tree, const char *path) > p = strchr(path, '/'); > > for_each_child(tree, child) { > - if (p && strprefixeq(path, p - path, child->name)) > + if (p && strprefixeq(path, (unsigned)(p - path), child->name)) > return get_node_by_path(child, p+1); > else if (!p && streq(path, child->name)) > return child; -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
Attachment:
signature.asc
Description: PGP signature