Re: [PATCH 1/4] printk: add %I4, %I6, %i4, %i6 format specifiers
From: Harvey Harrison <hidden>
Date: 2008-10-31 00:00:02
On Thu, 2008-10-30 at 13:28 -0700, Joe Perches wrote:
On Wed, 2008-10-29 at 11:35 -0700, Harvey Harrison wrote:quoted
return ip6_addr_string(buf, end, ptr, field_width, precision, flags); + case 'i': + flags |= SPECIAL; + /* Fallthrough */ + case 'I': + if (fmt[1] == '6') + return ip6_addr_string(buf, end, ptr, field_width, precision, flags); + if (fmt[1] == '4') + return ip4_addr_string(buf, end, ptr, field_width, precision, flags); + flags &= ~SPECIAL; + break; } flags |= SMALL; if (field_width == -1) {Hi Harvey. I was thinking about extending %p<foo> to support struct task_struct * and noticed this code isn't really correct. SPECIAL should be cleared from flags only when *fmt is 'i' not 'I' and SPECIAL wasn't previously set.
SPECIAL is set when # is used with the p modifier...which warns as we've already seen. So the only way to set special in the %p case is to use i. Instead of having an if() I just unconditionally clear it (perhaps unnecessarily). Mind you, we only get here if you pass in %p[iI][not 4 or 6] Cheers, Harvey