lkml.org 
[lkml]   [2008]   [Jul]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: the printk problem

On Saturday 2008-07-05 14:52, Vegard Nossum wrote:
>> On Saturday 2008-07-05 00:01, Andrew Morton wrote:
>>>
>>>We don't know how much interest there would be in churning NIPQUAD from
>>>the net guys. Interestingly, there's also %C (wint_t) which is a
>>>32-bit quantity. So we could just go and say "%C prints an ipv4
>>>address" and be done with it. But there's no way of doing that for
>>>ipv6 addresses so things would become asymmetrical there.
>>
>> struct in6_addr src;
>> printk("Source address: %p{ipv6}\n", &src);
>>
>> How about %p{feature}?
>
>Something like this?
>
>+static char *custom_format(char *buf, char *end,
>+ const char *fmt, unsigned int fmtlen, void *arg)

I'd use const void *arg here, so nobody gets the idea
that you could modify the argument while printing :)

>+{
>+ if (!strncmp(fmt, "sym", fmtlen)) {
>+ char name[KSYM_SYMBOL_LEN];
>+ int len;
>+ int i;
>+
>+ len = sprint_symbol(name, (unsigned long) arg);
>+ if (len < 0)
>+ return buf;
>+
>+ i = 0;
>+ while (i < len) {
>+ if (buf < end)
>+ *buf = name[i];
>+ ++buf;
>+ ++i;
>+ }
>+ }

And I assume it's then as simple as

} else if (strncmp(fmt, "nip6", fmtlen) == 0) {
snprintf(buf, end - buf (+1?), NIP6_FMT in expanded form,
NIP6 in expanded form(arg));
}

Hm, that's going to get a big function when everyone adds their
fmttypes.

>+
>+ return buf;
>+}
>+
> static char *number(char *buf, char *end, unsigned long long num, int base, int size, int precision, int type)
> {
> /* we are called with base 8, 10 or 16, only, thus don't need "G..." */
>@@ -648,6 +673,25 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
> continue;
>
> case 'p':
>+ if (fmt[1] == '{') {
>+ const char *cfmt;
>+
>+ /* Skip the '%{' */
>+ ++fmt;
>+ ++fmt;
>+

Not this?

/* Skip the '%p{' */
fmt += 3;


\
 
 \ /
  Last update: 2008-07-05 15:27    [W:0.426 / U:0.424 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site