On 02/03/2016 06:56 PM, Joe Perches wrote:
On Wed, 2016-02-03 at 13:13 +0100, Jason A. Donenfeld wrote:
Signed-off-by: Jason A. Donenfeld <[email protected]>
---
  lib/vsprintf.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 1b1b1c8..85e6645 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -1189,7 +1189,7 @@ char *ip6_addr_string_sa(char *buf, char *end, const 
struct sockaddr_in6 *sa,
                *p++ = ':';
                p = number(p, pend, ntohs(sa->sin6_port), spec);
        }
-       if (have_f) {
+       if (have_f && (sa->sin6_flowinfo & IPV6_FLOWINFO_MASK)) {
                *p++ = '/';
                p = number(p, pend, ntohl(sa->sin6_flowinfo &
                                          IPV6_FLOWINFO_MASK), spec);

Why does this matter at all?

The format string "%pIS[...]f" is not used currently in the kernel.

If one were to call out this 'f' qualifier to %pIS, wouldn't it
be better to show /0 than elide the / output completely?

+1

Another possibility also in regards to your other patch would be to have
a different format string char option instead of 'f'/'s' that would then
allow a developer for having both options to choose from. Dunno if it's
really worth it, but if you have a use case that definitely needs it, then
it'd be probably better. Less surprises during debugging, at least.

Reply via email to