> char buf[SQUIGGLE];
> printk("%s", inet_ntoa(buf, in_addr));
This is one example which could actually benefit greatly from
alloca(), even though purists will hate me for that :-)
extern char *__inet_ntoa(char *buf, __u32 x); /* returns buf */
#define inet_ntoa(x) __inet_ntoa(__builtin_alloca(16), (x))
would solve the reentrance problem. (I have no idea if this is allowed
in the kernel and if not, why.)
> The canonical, definitive, best way to do this is within printk()
> itself, with a one-level recursive call to sprintf() from within
> vsprintf().
Looks like this could be done more efficiently though.
> printk("IP address is %lu\001 on Tuesdays\n", in_addr);
>
> Then you teach vsprintf to recognise '%lu\001' as a conversion for ipv4
> addresses. This will satisfy (and indeed leverage) gcc's arg checking.
Unfortunately this can't be expanded to other address families. IPv6
needs an address printing routine even more.
Olaf
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Sun Apr 30 2000 - 21:00:11 EST