> 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
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.
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to firstname.lastname@example.org
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