Question regarding strange-looking code in drivers/isdn/i4l/isdn_ppp.c
Hi, I was checking some code in drivers/isdn/isdn_pp and came across the following: case PPP_VJC_COMP: if (is->debug & 0x20) printk(KERN_DEBUG "isdn_ppp: VJC_COMP\n"); { struct sk_buff *skb_old = skb; int pkt_len; skb = dev_alloc_skb(skb_old->len + 128); if (!skb) { printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name); skb = skb_old; goto drop_packet; } skb_put(skb, skb_old->len + 128); skb_copy_from_linear_data(skb_old, skb->data, skb_old->len); if (net_dev->local->ppp_slot < 0) { printk(KERN_ERR "%s: net_dev->local->ppp_slot(%d) out of range\n", __func__, net_dev->local->ppp_slot); goto drop_packet; } pkt_len = slhc_uncompress(ippp_table[net_dev->local->ppp_slot]->slcomp, skb->data, skb_old->len); kfree_skb(skb_old); if (pkt_len < 0) goto drop_packet; skb_trim(skb, pkt_len); skb->protocol = htons(ETH_P_IP); } break; Could you explain to me why there are braces AFTER the printk invocation? Was it perhaps intended that the printk was included in the braces? I'm sorry if I'm missing something completely obvious here, but it seems kind of strange to me. With kind regards, Bas
-----Original Message----- From: kernelnewbies-bounces@kernelnewbies.org [mailto:kernelnewbies- bounces@kernelnewbies.org] On Behalf Of Bas Peters Sent: Monday, February 02, 2015 11:26 AM To: kernelnewbies@kernelnewbies.org; isdn@linux-pingi.de Subject: Question regarding strange-looking code in drivers/isdn/i4l/isdn_ppp.c
Hi,
I was checking some code in drivers/isdn/isdn_pp and came across the following:
case PPP_VJC_COMP: if (is->debug & 0x20) printk(KERN_DEBUG "isdn_ppp: VJC_COMP\n"); { struct sk_buff *skb_old = skb; int pkt_len; skb = dev_alloc_skb(skb_old->len + 128);
if (!skb) { printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name); skb = skb_old; goto drop_packet; } skb_put(skb, skb_old->len + 128); skb_copy_from_linear_data(skb_old, skb->data, skb_old->len); if (net_dev->local->ppp_slot < 0) { printk(KERN_ERR "%s: net_dev->local-
ppp_slot(%d) out of range\n", __func__, net_dev->local->ppp_slot); goto drop_packet; } pkt_len = slhc_uncompress(ippp_table[net_dev->local- ppp_slot]->slcomp, skb->data, skb_old->len); kfree_skb(skb_old); if (pkt_len < 0) goto drop_packet;
skb_trim(skb, pkt_len); skb->protocol = htons(ETH_P_IP); } break;
Could you explain to me why there are braces AFTER the printk invocation? Was it perhaps intended that the printk was included in the braces?
I'm sorry if I'm missing something completely obvious here, but it seems kind of strange to me.
With kind regards,
Bas
I assume it's just to introduce a new name space scope inside the case statement without going to the trouble of writing a new function that would be called from it. Jeff Haran
Alright, that makes sense. Is it bad practice to do so? Would it make sense to change this to improve readability? 2015-02-02 20:34 GMT+01:00 Jeff Haran <Jeff.Haran@citrix.com>:
-----Original Message----- From: kernelnewbies-bounces@kernelnewbies.org [mailto:kernelnewbies- bounces@kernelnewbies.org] On Behalf Of Bas Peters Sent: Monday, February 02, 2015 11:26 AM To: kernelnewbies@kernelnewbies.org; isdn@linux-pingi.de Subject: Question regarding strange-looking code in drivers/isdn/i4l/isdn_ppp.c
Hi,
I was checking some code in drivers/isdn/isdn_pp and came across the following:
case PPP_VJC_COMP: if (is->debug & 0x20) printk(KERN_DEBUG "isdn_ppp: VJC_COMP\n"); { struct sk_buff *skb_old = skb; int pkt_len; skb = dev_alloc_skb(skb_old->len + 128);
if (!skb) { printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name); skb = skb_old; goto drop_packet; } skb_put(skb, skb_old->len + 128); skb_copy_from_linear_data(skb_old, skb->data, skb_old->len); if (net_dev->local->ppp_slot < 0) { printk(KERN_ERR "%s: net_dev->local-
ppp_slot(%d) out of range\n", __func__, net_dev->local->ppp_slot); goto drop_packet; } pkt_len = slhc_uncompress(ippp_table[net_dev->local- ppp_slot]->slcomp, skb->data, skb_old->len); kfree_skb(skb_old); if (pkt_len < 0) goto drop_packet;
skb_trim(skb, pkt_len); skb->protocol = htons(ETH_P_IP); } break;
Could you explain to me why there are braces AFTER the printk invocation? Was it perhaps intended that the printk was included in the braces?
I'm sorry if I'm missing something completely obvious here, but it seems kind of strange to me.
With kind regards,
Bas
I assume it's just to introduce a new name space scope inside the case statement without going to the trouble of writing a new function that would be called from it.
Jeff Haran
On Mon, Feb 02, 2015 at 08:26:26PM +0100, Bas Peters wrote:
Hi,
I was checking some code in drivers/isdn/isdn_pp and came across the following:
case PPP_VJC_COMP: if (is->debug & 0x20) printk(KERN_DEBUG "isdn_ppp: VJC_COMP\n"); { struct sk_buff *skb_old = skb; int pkt_len; skb = dev_alloc_skb(skb_old->len + 128);
if (!skb) { printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name); skb = skb_old; goto drop_packet; } skb_put(skb, skb_old->len + 128); skb_copy_from_linear_data(skb_old, skb->data, skb_old->len); if (net_dev->local->ppp_slot < 0) { printk(KERN_ERR "%s: net_dev->local->ppp_slot(%d) out of range\n", __func__, net_dev->local->ppp_slot); goto drop_packet; } pkt_len = slhc_uncompress(ippp_table[net_dev->local->ppp_slot]->slcomp, skb->data, skb_old->len); kfree_skb(skb_old); if (pkt_len < 0) goto drop_packet;
skb_trim(skb, pkt_len); skb->protocol = htons(ETH_P_IP); } break;
Could you explain to me why there are braces AFTER the printk invocation? Was it perhaps intended that the printk was included in the braces?
Nope, the printk is for a debugging flag. The braces afterward is for the new variable scope, it's odd looking yes, but correct code and formatting. Hope this helps, greg k-h
On Mon, Feb 2, 2015 at 11:35 AM, Greg KH <greg@kroah.com> wrote:
The braces afterward is for the new variable scope, it's odd looking yes, but correct code and formatting.
Specifically, without the braces there'd be a compile error at the declaration of the pkt_len and skb_old variables. Henry
On Mon, Feb 2, 2015 at 11:26 AM, Bas Peters <baspeters93@gmail.com> wrote:
Hi,
I was checking some code in drivers/isdn/isdn_pp and came across the following:
case PPP_VJC_COMP: if (is->debug & 0x20) printk(KERN_DEBUG "isdn_ppp: VJC_COMP\n"); { struct sk_buff *skb_old = skb; int pkt_len; skb = dev_alloc_skb(skb_old->len + 128);
if (!skb) { printk(KERN_WARNING "%s: Memory squeeze, dropping packet.\n", dev->name); skb = skb_old; goto drop_packet; } skb_put(skb, skb_old->len + 128); skb_copy_from_linear_data(skb_old, skb->data, skb_old->len); if (net_dev->local->ppp_slot < 0) { printk(KERN_ERR "%s: net_dev->local->ppp_slot(%d) out of range\n", __func__, net_dev->local->ppp_slot); goto drop_packet; } pkt_len = slhc_uncompress(ippp_table[net_dev->local->ppp_slot]->slcomp, skb->data, skb_old->len); kfree_skb(skb_old); if (pkt_len < 0) goto drop_packet;
skb_trim(skb, pkt_len); skb->protocol = htons(ETH_P_IP); } break;
Could you explain to me why there are braces AFTER the printk invocation? Was it perhaps intended that the printk was included in the braces?
I think it is intended and in my opinion it is because he didn't want to declare the local variables at the beginning of the function. He probably wanted that piece of code which is inside the braces as standalone.
I'm sorry if I'm missing something completely obvious here, but it seems kind of strange to me.
With kind regards,
Bas
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
participants (5)
-
anish singh -
Bas Peters -
Greg KH -
Henry Hallam -
Jeff Haran