On 5/14/07, Razvan Deaconescu <razvan@xxxxxxxxxxxxxxxxxx
> wrote:
You are right indeed, static does have internal linkage.
Messed that up though :-(.
But why would we want to issues warning only once and not each time the socket is created for SOCK_PAKCET type?
Thanks for correcting Razvan.
~psr
pradeep singh wrote:
> Hi All,
>
> the __sock_create in net/socket.c has the following code snippet.
>
> if (family == PF_INET && type == SOCK_PACKET) {
> static int warned;
> if (!warned) {
> warned = 1;
> printk(KERN_INFO "%s uses obsolete (PF_INET,SOCK_PACKET)\n",
> current->comm);
> }
> family = PF_PACKET;
> }
>
> this may be in place to emit a harmless warning , but why not change it
> to -
> if (family == PF_INET && type == SOCK_PACKET) {
>
> printk(KERN_INFO "%s uses obsolete (PF_INET,SOCK_PACKET)\n",
> current->comm);
>
> family = PF_PACKET;
> }
>
> Because anyway if(!warning) is going to result in true everytime we
> enter the function, as static int warning has scope limited to the outer
> if block.
Not quite so. The warning variable may only have scope within its block
,but (being static) is stored in a reserved memory area (I think this is
called linkage ... not sure though). The second time someone would try
creating a socket using PF_INET and SOCK_PACKET, he/she would not get
that warning as 'warning' is already set (warning = 1, that is).
You are right indeed, static does have internal linkage.
Messed that up though :-(.
But why would we want to issues warning only once and not each time the socket is created for SOCK_PAKCET type?
Thanks for correcting Razvan.
~psr
Razvan
--
play the game