netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH] ppp: don't use 0 in pointer context
  2006-02-08 22:28 [PATCH] ppp: don't use 0 in pointer context Alexey Dobriyan
@ 2006-02-08 22:14 ` James Carlson
  2006-02-08 22:19   ` Herbert Xu
                     ` (2 more replies)
  0 siblings, 3 replies; 17+ messages in thread
From: James Carlson @ 2006-02-08 22:14 UTC (permalink / raw)
  To: Alexey Dobriyan; +Cc: Al Viro, netdev, linux-ppp

Alexey Dobriyan writes:
> -	if (ap == 0)
> +	if (!ap)

And the solution is to treat it as a boolean instead?!  I'm not sure
which is more ugly.

Why wouldn't explicit comparison against NULL be the preferred fix?

-- 
James Carlson         42.703N 71.076W         <carlsonj@workingcode.com>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ppp: don't use 0 in pointer context
  2006-02-08 22:14 ` James Carlson
@ 2006-02-08 22:19   ` Herbert Xu
  2006-02-08 22:45     ` David Stevens
  2006-02-08 22:23   ` Roland Dreier
  2006-02-08 22:44   ` Paul Mackerras
  2 siblings, 1 reply; 17+ messages in thread
From: Herbert Xu @ 2006-02-08 22:19 UTC (permalink / raw)
  To: James Carlson; +Cc: adobriyan, viro, netdev, linux-ppp

James Carlson <carlsonj@workingcode.com> wrote:
> Alexey Dobriyan writes:
>> -     if (ap == 0)
>> +     if (!ap)
> 
> And the solution is to treat it as a boolean instead?!  I'm not sure
> which is more ugly.

Treating it as a boolean looks good to me.  It's better than the existing
code because it shuts sparse up.
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ppp: don't use 0 in pointer context
  2006-02-08 22:14 ` James Carlson
  2006-02-08 22:19   ` Herbert Xu
@ 2006-02-08 22:23   ` Roland Dreier
  2006-02-08 22:44   ` Paul Mackerras
  2 siblings, 0 replies; 17+ messages in thread
From: Roland Dreier @ 2006-02-08 22:23 UTC (permalink / raw)
  To: James Carlson; +Cc: Alexey Dobriyan, Al Viro, netdev, linux-ppp

    James> And the solution is to treat it as a boolean instead?!  I'm
    James> not sure which is more ugly.

    James> Why wouldn't explicit comparison against NULL be the
    James> preferred fix?

"if (ptr)" and "if (!ptr)" are the preferred idiom for testing whether
a pointer is NULL.  What is gained by writing "if (ptr != NULL)" ?

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH] ppp: don't use 0 in pointer context
@ 2006-02-08 22:28 Alexey Dobriyan
  2006-02-08 22:14 ` James Carlson
  0 siblings, 1 reply; 17+ messages in thread
From: Alexey Dobriyan @ 2006-02-08 22:28 UTC (permalink / raw)
  To: Al Viro; +Cc: netdev, linux-ppp

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
---

 ppp is the biggest offender.

 drivers/net/ppp_async.c   |   34 ++++++------
 drivers/net/ppp_generic.c |  128 +++++++++++++++++++++++-----------------------
 drivers/net/ppp_synctty.c |   26 ++++-----
 drivers/net/pppoe.c       |    2
 4 files changed, 95 insertions(+), 95 deletions(-)

--- a/drivers/net/ppp_async.c
+++ b/drivers/net/ppp_async.c
@@ -159,7 +159,7 @@ ppp_asynctty_open(struct tty_struct *tty
 
 	err = -ENOMEM;
 	ap = kmalloc(sizeof(*ap), GFP_KERNEL);
-	if (ap == 0)
+	if (!ap)
 		goto out;
 
 	/* initialize the asyncppp structure */
@@ -215,7 +215,7 @@ ppp_asynctty_close(struct tty_struct *tt
 	ap = tty->disc_data;
 	tty->disc_data = NULL;
 	write_unlock_irq(&disc_data_lock);
-	if (ap == 0)
+	if (!ap)
 		return;
 
 	/*
@@ -230,10 +230,10 @@ ppp_asynctty_close(struct tty_struct *tt
 	tasklet_kill(&ap->tsk);
 
 	ppp_unregister_channel(&ap->chan);
-	if (ap->rpkt != 0)
+	if (ap->rpkt)
 		kfree_skb(ap->rpkt);
 	skb_queue_purge(&ap->rqueue);
-	if (ap->tpkt != 0)
+	if (ap->tpkt)
 		kfree_skb(ap->tpkt);
 	kfree(ap);
 }
@@ -285,13 +285,13 @@ ppp_asynctty_ioctl(struct tty_struct *tt
 	int err, val;
 	int __user *p = (int __user *)arg;
 
-	if (ap == 0)
+	if (!ap)
 		return -ENXIO;
 	err = -EFAULT;
 	switch (cmd) {
 	case PPPIOCGCHAN:
 		err = -ENXIO;
-		if (ap == 0)
+		if (!ap)
 			break;
 		err = -EFAULT;
 		if (put_user(ppp_channel_index(&ap->chan), p))
@@ -301,7 +301,7 @@ ppp_asynctty_ioctl(struct tty_struct *tt
 
 	case PPPIOCGUNIT:
 		err = -ENXIO;
-		if (ap == 0)
+		if (!ap)
 			break;
 		err = -EFAULT;
 		if (put_user(ppp_unit_number(&ap->chan), p))
@@ -354,7 +354,7 @@ ppp_asynctty_receive(struct tty_struct *
 	struct asyncppp *ap = ap_get(tty);
 	unsigned long flags;
 
-	if (ap == 0)
+	if (!ap)
 		return;
 	spin_lock_irqsave(&ap->recv_lock, flags);
 	ppp_async_input(ap, buf, cflags, count);
@@ -373,7 +373,7 @@ ppp_asynctty_wakeup(struct tty_struct *t
 	struct asyncppp *ap = ap_get(tty);
 
 	clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
-	if (ap == 0)
+	if (!ap)
 		return;
 	set_bit(XMIT_WAKEUP, &ap->xmit_flags);
 	tasklet_schedule(&ap->tsk);
@@ -688,7 +688,7 @@ ppp_async_push(struct asyncppp *ap)
 				tty_stuffed = 1;
 			continue;
 		}
-		if (ap->optr >= ap->olim && ap->tpkt != 0) {
+		if (ap->optr >= ap->olim && ap->tpkt) {
 			if (ppp_async_encode(ap)) {
 				/* finished processing ap->tpkt */
 				clear_bit(XMIT_FULL, &ap->xmit_flags);
@@ -708,7 +708,7 @@ ppp_async_push(struct asyncppp *ap)
 		clear_bit(XMIT_BUSY, &ap->xmit_flags);
 		/* any more work to do? if not, exit the loop */
 		if (!(test_bit(XMIT_WAKEUP, &ap->xmit_flags)
-		      || (!tty_stuffed && ap->tpkt != 0)))
+		      || (!tty_stuffed && ap->tpkt)))
 			break;
 		/* more work to do, see if we can do it now */
 		if (test_and_set_bit(XMIT_BUSY, &ap->xmit_flags))
@@ -719,7 +719,7 @@ ppp_async_push(struct asyncppp *ap)
 
 flush:
 	clear_bit(XMIT_BUSY, &ap->xmit_flags);
-	if (ap->tpkt != 0) {
+	if (ap->tpkt) {
 		kfree_skb(ap->tpkt);
 		ap->tpkt = NULL;
 		clear_bit(XMIT_FULL, &ap->xmit_flags);
@@ -852,7 +852,7 @@ ppp_async_input(struct asyncppp *ap, con
 		s = 0;
 		for (i = 0; i < count; ++i) {
 			c = buf[i];
-			if (flags != 0 && flags[i] != 0)
+			if (flags && flags[i] != 0)
 				continue;
 			s |= (c & 0x80)? SC_RCV_B7_1: SC_RCV_B7_0;
 			c = ((c >> 4) ^ c) & 0xf;
@@ -869,7 +869,7 @@ ppp_async_input(struct asyncppp *ap, con
 			n = scan_ordinary(ap, buf, count);
 
 		f = 0;
-		if (flags != 0 && (ap->state & SC_TOSS) == 0) {
+		if (flags && (ap->state & SC_TOSS) == 0) {
 			/* check the flags to see if any char had an error */
 			for (j = 0; j < n; ++j)
 				if ((f = flags[j]) != 0)
@@ -882,9 +882,9 @@ ppp_async_input(struct asyncppp *ap, con
 		} else if (n > 0 && (ap->state & SC_TOSS) == 0) {
 			/* stuff the chars in the skb */
 			skb = ap->rpkt;
-			if (skb == 0) {
+			if (!skb) {
 				skb = dev_alloc_skb(ap->mru + PPP_HDRLEN + 2);
-				if (skb == 0)
+				if (!skb)
 					goto nomem;
  				ap->rpkt = skb;
  			}
@@ -931,7 +931,7 @@ ppp_async_input(struct asyncppp *ap, con
 		++n;
 
 		buf += n;
-		if (flags != 0)
+		if (flags)
 			flags += n;
 		count -= n;
 	}
--- a/drivers/net/ppp_generic.c
+++ b/drivers/net/ppp_generic.c
@@ -371,7 +371,7 @@ static int ppp_release(struct inode *ino
 	struct ppp_file *pf = file->private_data;
 	struct ppp *ppp;
 
-	if (pf != 0) {
+	if (pf) {
 		file->private_data = NULL;
 		if (pf->kind == INTERFACE) {
 			ppp = PF_TO_PPP(pf);
@@ -402,7 +402,7 @@ static ssize_t ppp_read(struct file *fil
 
 	ret = count;
 
-	if (pf == 0)
+	if (!pf)
 		return -ENXIO;
 	add_wait_queue(&pf->rwait, &wait);
 	for (;;) {
@@ -435,7 +435,7 @@ static ssize_t ppp_read(struct file *fil
 	set_current_state(TASK_RUNNING);
 	remove_wait_queue(&pf->rwait, &wait);
 
-	if (skb == 0)
+	if (!skb)
 		goto out;
 
 	ret = -EOVERFLOW;
@@ -459,11 +459,11 @@ static ssize_t ppp_write(struct file *fi
 	struct sk_buff *skb;
 	ssize_t ret;
 
-	if (pf == 0)
+	if (!pf)
 		return -ENXIO;
 	ret = -ENOMEM;
 	skb = alloc_skb(count + pf->hdrlen, GFP_KERNEL);
-	if (skb == 0)
+	if (!skb)
 		goto out;
 	skb_reserve(skb, pf->hdrlen);
 	ret = -EFAULT;
@@ -495,11 +495,11 @@ static unsigned int ppp_poll(struct file
 	struct ppp_file *pf = file->private_data;
 	unsigned int mask;
 
-	if (pf == 0)
+	if (!pf)
 		return 0;
 	poll_wait(file, &pf->rwait, wait);
 	mask = POLLOUT | POLLWRNORM;
-	if (skb_peek(&pf->rq) != 0)
+	if (skb_peek(&pf->rq))
 		mask |= POLLIN | POLLRDNORM;
 	if (pf->dead)
 		mask |= POLLHUP;
@@ -563,7 +563,7 @@ static int ppp_ioctl(struct inode *inode
 	void __user *argp = (void __user *)arg;
 	int __user *p = argp;
 
-	if (pf == 0)
+	if (!pf)
 		return ppp_unattached_ioctl(pf, file, cmd, arg);
 
 	if (cmd == PPPIOCDETACH) {
@@ -693,13 +693,13 @@ static int ppp_ioctl(struct inode *inode
 			val &= 0xffff;
 		}
 		vj = slhc_init(val2+1, val+1);
-		if (vj == 0) {
+		if (!vj) {
 			printk(KERN_ERR "PPP: no memory (VJ compressor)\n");
 			err = -ENOMEM;
 			break;
 		}
 		ppp_lock(ppp);
-		if (ppp->vj != 0)
+		if (ppp->vj)
 			slhc_free(ppp->vj);
 		ppp->vj = vj;
 		ppp_unlock(ppp);
@@ -790,7 +790,7 @@ static int ppp_unattached_ioctl(struct p
 		if (get_user(unit, p))
 			break;
 		ppp = ppp_create_interface(unit, &err);
-		if (ppp == 0)
+		if (!ppp)
 			break;
 		file->private_data = &ppp->file;
 		ppp->owner = file;
@@ -807,7 +807,7 @@ static int ppp_unattached_ioctl(struct p
 		down(&all_ppp_sem);
 		err = -ENXIO;
 		ppp = ppp_find_unit(unit);
-		if (ppp != 0) {
+		if (ppp) {
 			atomic_inc(&ppp->file.refcnt);
 			file->private_data = &ppp->file;
 			err = 0;
@@ -821,7 +821,7 @@ static int ppp_unattached_ioctl(struct p
 		spin_lock_bh(&all_channels_lock);
 		err = -ENXIO;
 		chan = ppp_find_channel(unit);
-		if (chan != 0) {
+		if (chan) {
 			atomic_inc(&chan->file.refcnt);
 			file->private_data = &chan->file;
 			err = 0;
@@ -914,7 +914,7 @@ ppp_start_xmit(struct sk_buff *skb, stru
 		struct sk_buff *ns;
 
 		ns = alloc_skb(skb->len + dev->hard_header_len, GFP_ATOMIC);
-		if (ns == 0)
+		if (!ns)
 			goto outf;
 		skb_reserve(ns, dev->hard_header_len);
 		skb_copy_bits(skb, 0, skb_put(ns, skb->len), skb->len);
@@ -965,9 +965,9 @@ ppp_net_ioctl(struct net_device *dev, st
 
 	case SIOCGPPPCSTATS:
 		memset(&cstats, 0, sizeof(cstats));
-		if (ppp->xc_state != 0)
+		if (ppp->xc_state)
 			ppp->xcomp->comp_stat(ppp->xc_state, &cstats.c);
-		if (ppp->rc_state != 0)
+		if (ppp->rc_state)
 			ppp->rcomp->decomp_stat(ppp->rc_state, &cstats.d);
 		if (copy_to_user(addr, &cstats, sizeof(cstats)))
 			break;
@@ -1012,14 +1012,14 @@ ppp_xmit_process(struct ppp *ppp)
 	struct sk_buff *skb;
 
 	ppp_xmit_lock(ppp);
-	if (ppp->dev != 0) {
+	if (ppp->dev) {
 		ppp_push(ppp);
-		while (ppp->xmit_pending == 0
-		       && (skb = skb_dequeue(&ppp->file.xq)) != 0)
+		while (!ppp->xmit_pending
+		       && (skb = skb_dequeue(&ppp->file.xq)))
 			ppp_send_frame(ppp, skb);
 		/* If there's no work left to do, tell the core net
 		   code that we can accept some more. */
-		if (ppp->xmit_pending == 0 && skb_peek(&ppp->file.xq) == 0)
+		if (!ppp->xmit_pending && !skb_peek(&ppp->file.xq))
 			netif_wake_queue(ppp->dev);
 	}
 	ppp_xmit_unlock(ppp);
@@ -1119,12 +1119,12 @@ ppp_send_frame(struct ppp *ppp, struct s
 
 	switch (proto) {
 	case PPP_IP:
-		if (ppp->vj == 0 || (ppp->flags & SC_COMP_TCP) == 0)
+		if (!ppp->vj || (ppp->flags & SC_COMP_TCP) == 0)
 			break;
 		/* try to do VJ TCP header compression */
 		new_skb = alloc_skb(skb->len + ppp->dev->hard_header_len - 2,
 				    GFP_ATOMIC);
-		if (new_skb == 0) {
+		if (!new_skb) {
 			printk(KERN_ERR "PPP: no memory (VJ comp pkt)\n");
 			goto drop;
 		}
@@ -1159,7 +1159,7 @@ ppp_send_frame(struct ppp *ppp, struct s
 	}
 
 	/* try to do packet compression */
-	if ((ppp->xstate & SC_COMP_RUN) && ppp->xc_state != 0
+	if ((ppp->xstate & SC_COMP_RUN) && ppp->xc_state
 	    && proto != PPP_LCP && proto != PPP_CCP) {
 		if (!(ppp->flags & SC_CCP_UP) && (ppp->flags & SC_MUST_COMP)) {
 			if (net_ratelimit())
@@ -1204,7 +1204,7 @@ ppp_push(struct ppp *ppp)
 	struct channel *pch;
 	struct sk_buff *skb = ppp->xmit_pending;
 
-	if (skb == 0)
+	if (!skb)
 		return;
 
 	list = &ppp->channels;
@@ -1374,7 +1374,7 @@ static int ppp_mp_explode(struct ppp *pp
 		if (flen == len && nfree == 0)
 			bits |= E;
 		frag = alloc_skb(flen + hdrlen + (flen == 0), GFP_ATOMIC);
-		if (frag == 0)
+		if (!frag)
 			goto noskb;
 		q = skb_put(frag, flen + hdrlen);
 
@@ -1444,7 +1444,7 @@ ppp_channel_push(struct channel *pch)
 	struct ppp *ppp;
 
 	spin_lock_bh(&pch->downl);
-	if (pch->chan != 0) {
+	if (pch->chan) {
 		while (!skb_queue_empty(&pch->file.xq)) {
 			skb = skb_dequeue(&pch->file.xq);
 			if (!pch->chan->ops->start_xmit(pch->chan, skb)) {
@@ -1462,7 +1462,7 @@ ppp_channel_push(struct channel *pch)
 	if (skb_queue_empty(&pch->file.xq)) {
 		read_lock_bh(&pch->upl);
 		ppp = pch->ppp;
-		if (ppp != 0)
+		if (ppp)
 			ppp_xmit_process(ppp);
 		read_unlock_bh(&pch->upl);
 	}
@@ -1481,7 +1481,7 @@ ppp_do_recv(struct ppp *ppp, struct sk_b
 {
 	ppp_recv_lock(ppp);
 	/* ppp->dev == 0 means interface is closing down */
-	if (ppp->dev != 0)
+	if (ppp->dev)
 		ppp_receive_frame(ppp, skb, pch);
 	else
 		kfree_skb(skb);
@@ -1494,19 +1494,19 @@ ppp_input(struct ppp_channel *chan, stru
 	struct channel *pch = chan->ppp;
 	int proto;
 
-	if (pch == 0 || skb->len == 0) {
+	if (!pch || skb->len == 0) {
 		kfree_skb(skb);
 		return;
 	}
 
 	proto = PPP_PROTO(skb);
 	read_lock_bh(&pch->upl);
-	if (pch->ppp == 0 || proto >= 0xc000 || proto == PPP_CCPFRAG) {
+	if (!pch->ppp || proto >= 0xc000 || proto == PPP_CCPFRAG) {
 		/* put it on the channel queue */
 		skb_queue_tail(&pch->file.rq, skb);
 		/* drop old frames if queue too long */
 		while (pch->file.rq.qlen > PPP_MAX_RQLEN
-		       && (skb = skb_dequeue(&pch->file.rq)) != 0)
+		       && (skb = skb_dequeue(&pch->file.rq)))
 			kfree_skb(skb);
 		wake_up_interruptible(&pch->file.rwait);
 	} else {
@@ -1522,13 +1522,13 @@ ppp_input_error(struct ppp_channel *chan
 	struct channel *pch = chan->ppp;
 	struct sk_buff *skb;
 
-	if (pch == 0)
+	if (!pch)
 		return;
 
 	read_lock_bh(&pch->upl);
-	if (pch->ppp != 0) {
+	if (pch->ppp) {
 		skb = alloc_skb(0, GFP_ATOMIC);
-		if (skb != 0) {
+		if (skb) {
 			skb->len = 0;		/* probably unnecessary */
 			skb->cb[0] = code;
 			ppp_do_recv(pch->ppp, skb, pch);
@@ -1567,7 +1567,7 @@ static void
 ppp_receive_error(struct ppp *ppp)
 {
 	++ppp->stats.rx_errors;
-	if (ppp->vj != 0)
+	if (ppp->vj)
 		slhc_toss(ppp->vj);
 }
 
@@ -1582,7 +1582,7 @@ ppp_receive_nonmp_frame(struct ppp *ppp,
 	 * Note that some decompressors need to see uncompressed frames
 	 * that come in as well as compressed frames.
 	 */
-	if (ppp->rc_state != 0 && (ppp->rstate & SC_DECOMP_RUN)
+	if (ppp->rc_state && (ppp->rstate & SC_DECOMP_RUN)
 	    && (ppp->rstate & (SC_DC_FERROR | SC_DC_ERROR)) == 0)
 		skb = ppp_decompress_frame(ppp, skb);
 
@@ -1593,13 +1593,13 @@ ppp_receive_nonmp_frame(struct ppp *ppp,
 	switch (proto) {
 	case PPP_VJC_COMP:
 		/* decompress VJ compressed packets */
-		if (ppp->vj == 0 || (ppp->flags & SC_REJ_COMP_TCP))
+		if (!ppp->vj || (ppp->flags & SC_REJ_COMP_TCP))
 			goto err;
 
 		if (skb_tailroom(skb) < 124) {
 			/* copy to a new sk_buff with more tailroom */
 			ns = dev_alloc_skb(skb->len + 128);
-			if (ns == 0) {
+			if (!ns) {
 				printk(KERN_ERR"PPP: no memory (VJ decomp)\n");
 				goto err;
 			}
@@ -1627,7 +1627,7 @@ ppp_receive_nonmp_frame(struct ppp *ppp,
 		break;
 
 	case PPP_VJC_UNCOMP:
-		if (ppp->vj == 0 || (ppp->flags & SC_REJ_COMP_TCP))
+		if (!ppp->vj || (ppp->flags & SC_REJ_COMP_TCP))
 			goto err;
 		
 		/* Until we fix the decompressor need to make sure
@@ -1657,7 +1657,7 @@ ppp_receive_nonmp_frame(struct ppp *ppp,
 		skb_queue_tail(&ppp->file.rq, skb);
 		/* limit queue length by dropping old frames */
 		while (ppp->file.rq.qlen > PPP_MAX_RQLEN
-		       && (skb = skb_dequeue(&ppp->file.rq)) != 0)
+		       && (skb = skb_dequeue(&ppp->file.rq)))
 			kfree_skb(skb);
 		/* wake up any process polling or blocking on read */
 		wake_up_interruptible(&ppp->file.rwait);
@@ -1722,7 +1722,7 @@ ppp_decompress_frame(struct ppp *ppp, st
 
 	if (proto == PPP_COMP) {
 		ns = dev_alloc_skb(ppp->mru + PPP_HDRLEN);
-		if (ns == 0) {
+		if (!ns) {
 			printk(KERN_ERR "ppp_decompress_frame: no memory\n");
 			goto err;
 		}
@@ -1840,7 +1840,7 @@ ppp_receive_mp_frame(struct ppp *ppp, st
 		ppp->minseq = ppp->mrq.next->sequence;
 
 	/* Pull completed packets off the queue and receive them. */
-	while ((skb = ppp_mp_reconstruct(ppp)) != 0)
+	while ((skb = ppp_mp_reconstruct(ppp)))
 		ppp_receive_nonmp_frame(ppp, skb);
 
 	return;
@@ -2006,7 +2006,7 @@ ppp_register_channel(struct ppp_channel 
 	struct channel *pch;
 
 	pch = kmalloc(sizeof(struct channel), GFP_KERNEL);
-	if (pch == 0)
+	if (!pch)
 		return -ENOMEM;
 	memset(pch, 0, sizeof(struct channel));
 	pch->ppp = NULL;
@@ -2035,7 +2035,7 @@ int ppp_channel_index(struct ppp_channel
 {
 	struct channel *pch = chan->ppp;
 
-	if (pch != 0)
+	if (pch)
 		return pch->file.index;
 	return -1;
 }
@@ -2048,9 +2048,9 @@ int ppp_unit_number(struct ppp_channel *
 	struct channel *pch = chan->ppp;
 	int unit = -1;
 
-	if (pch != 0) {
+	if (pch) {
 		read_lock_bh(&pch->upl);
-		if (pch->ppp != 0)
+		if (pch->ppp)
 			unit = pch->ppp->file.index;
 		read_unlock_bh(&pch->upl);
 	}
@@ -2066,7 +2066,7 @@ ppp_unregister_channel(struct ppp_channe
 {
 	struct channel *pch = chan->ppp;
 
-	if (pch == 0)
+	if (!pch)
 		return;		/* should never happen */
 	chan->ppp = NULL;
 
@@ -2098,7 +2098,7 @@ ppp_output_wakeup(struct ppp_channel *ch
 {
 	struct channel *pch = chan->ppp;
 
-	if (pch == 0)
+	if (!pch)
 		return;
 	ppp_channel_push(pch);
 }
@@ -2129,18 +2129,18 @@ ppp_set_compress(struct ppp *ppp, unsign
 
 	cp = find_compressor(ccp_option[0]);
 #ifdef CONFIG_KMOD
-	if (cp == 0) {
+	if (!cp) {
 		request_module("ppp-compress-%d", ccp_option[0]);
 		cp = find_compressor(ccp_option[0]);
 	}
 #endif /* CONFIG_KMOD */
-	if (cp == 0)
+	if (!cp)
 		goto out;
 
 	err = -ENOBUFS;
 	if (data.transmit) {
 		state = cp->comp_alloc(ccp_option, data.length);
-		if (state != 0) {
+		if (state) {
 			ppp_xmit_lock(ppp);
 			ppp->xstate &= ~SC_COMP_RUN;
 			ocomp = ppp->xcomp;
@@ -2148,7 +2148,7 @@ ppp_set_compress(struct ppp *ppp, unsign
 			ppp->xcomp = cp;
 			ppp->xc_state = state;
 			ppp_xmit_unlock(ppp);
-			if (ostate != 0) {
+			if (ostate) {
 				ocomp->comp_free(ostate);
 				module_put(ocomp->owner);
 			}
@@ -2158,7 +2158,7 @@ ppp_set_compress(struct ppp *ppp, unsign
 
 	} else {
 		state = cp->decomp_alloc(ccp_option, data.length);
-		if (state != 0) {
+		if (state) {
 			ppp_recv_lock(ppp);
 			ppp->rstate &= ~SC_DECOMP_RUN;
 			ocomp = ppp->rcomp;
@@ -2166,7 +2166,7 @@ ppp_set_compress(struct ppp *ppp, unsign
 			ppp->rcomp = cp;
 			ppp->rc_state = state;
 			ppp_recv_unlock(ppp);
-			if (ostate != 0) {
+			if (ostate) {
 				ocomp->decomp_free(ostate);
 				module_put(ocomp->owner);
 			}
@@ -2233,7 +2233,7 @@ ppp_ccp_peek(struct ppp *ppp, struct sk_
 			break;
 		if (inbound) {
 			/* we will start receiving compressed packets */
-			if (ppp->rc_state == 0)
+			if (!ppp->rc_state)
 				break;
 			if (ppp->rcomp->decomp_init(ppp->rc_state, dp, len,
 					ppp->file.index, 0, ppp->mru, ppp->debug)) {
@@ -2242,7 +2242,7 @@ ppp_ccp_peek(struct ppp *ppp, struct sk_
 			}
 		} else {
 			/* we will soon start sending compressed packets */
-			if (ppp->xc_state == 0)
+			if (!ppp->xc_state)
 				break;
 			if (ppp->xcomp->comp_init(ppp->xc_state, dp, len,
 					ppp->file.index, 0, ppp->debug))
@@ -2325,11 +2325,11 @@ ppp_register_compressor(struct compresso
 	int ret;
 	spin_lock(&compressor_list_lock);
 	ret = -EEXIST;
-	if (find_comp_entry(cp->compress_proto) != 0)
+	if (find_comp_entry(cp->compress_proto))
 		goto out;
 	ret = -ENOMEM;
 	ce = kmalloc(sizeof(struct compressor_entry), GFP_ATOMIC);
-	if (ce == 0)
+	if (!ce)
 		goto out;
 	ret = 0;
 	ce->comp = cp;
@@ -2347,7 +2347,7 @@ ppp_unregister_compressor(struct compres
 
 	spin_lock(&compressor_list_lock);
 	ce = find_comp_entry(cp->compress_proto);
-	if (ce != 0 && ce->comp == cp) {
+	if (ce && ce->comp == cp) {
 		list_del(&ce->list);
 		kfree(ce);
 	}
@@ -2363,7 +2363,7 @@ find_compressor(int type)
 
 	spin_lock(&compressor_list_lock);
 	ce = find_comp_entry(type);
-	if (ce != 0) {
+	if (ce) {
 		cp = ce->comp;
 		if (!try_module_get(cp->owner))
 			cp = NULL;
@@ -2388,7 +2388,7 @@ ppp_get_stats(struct ppp *ppp, struct pp
 	st->p.ppp_opackets = ppp->stats.tx_packets;
 	st->p.ppp_oerrors = ppp->stats.tx_errors;
 	st->p.ppp_obytes = ppp->stats.tx_bytes;
-	if (vj == 0)
+	if (!vj)
 		return;
 	st->vj.vjs_packets = vj->sls_o_compressed + vj->sls_o_uncompressed;
 	st->vj.vjs_compressed = vj->sls_o_compressed;
@@ -2603,11 +2603,11 @@ ppp_connect_channel(struct channel *pch,
 
 	down(&all_ppp_sem);
 	ppp = ppp_find_unit(unit);
-	if (ppp == 0)
+	if (!ppp)
 		goto out;
 	write_lock_bh(&pch->upl);
 	ret = -EINVAL;
-	if (pch->ppp != 0)
+	if (pch->ppp)
 		goto outl;
 
 	ppp_lock(ppp);
@@ -2643,7 +2643,7 @@ ppp_disconnect_channel(struct channel *p
 	ppp = pch->ppp;
 	pch->ppp = NULL;
 	write_unlock_bh(&pch->upl);
-	if (ppp != 0) {
+	if (ppp) {
 		/* remove it from the ppp unit's list */
 		ppp_lock(ppp);
 		list_del(&pch->clist);
--- a/drivers/net/ppp_synctty.c
+++ b/drivers/net/ppp_synctty.c
@@ -209,7 +209,7 @@ ppp_sync_open(struct tty_struct *tty)
 
 	ap = kmalloc(sizeof(*ap), GFP_KERNEL);
 	err = -ENOMEM;
-	if (ap == 0)
+	if (!ap)
 		goto out;
 
 	/* initialize the syncppp structure */
@@ -263,7 +263,7 @@ ppp_sync_close(struct tty_struct *tty)
 	ap = tty->disc_data;
 	tty->disc_data = NULL;
 	write_unlock_irq(&disc_data_lock);
-	if (ap == 0)
+	if (!ap)
 		return;
 
 	/*
@@ -279,7 +279,7 @@ ppp_sync_close(struct tty_struct *tty)
 
 	ppp_unregister_channel(&ap->chan);
 	skb_queue_purge(&ap->rqueue);
-	if (ap->tpkt != 0)
+	if (ap->tpkt)
 		kfree_skb(ap->tpkt);
 	kfree(ap);
 }
@@ -326,13 +326,13 @@ ppp_synctty_ioctl(struct tty_struct *tty
 	int __user *p = (int __user *)arg;
 	int err, val;
 
-	if (ap == 0)
+	if (!ap)
 		return -ENXIO;
 	err = -EFAULT;
 	switch (cmd) {
 	case PPPIOCGCHAN:
 		err = -ENXIO;
-		if (ap == 0)
+		if (!ap)
 			break;
 		err = -EFAULT;
 		if (put_user(ppp_channel_index(&ap->chan), p))
@@ -342,7 +342,7 @@ ppp_synctty_ioctl(struct tty_struct *tty
 
 	case PPPIOCGUNIT:
 		err = -ENXIO;
-		if (ap == 0)
+		if (!ap)
 			break;
 		err = -EFAULT;
 		if (put_user(ppp_unit_number(&ap->chan), p))
@@ -395,7 +395,7 @@ ppp_sync_receive(struct tty_struct *tty,
 	struct syncppp *ap = sp_get(tty);
 	unsigned long flags;
 
-	if (ap == 0)
+	if (!ap)
 		return;
 	spin_lock_irqsave(&ap->recv_lock, flags);
 	ppp_sync_input(ap, buf, cflags, count);
@@ -414,7 +414,7 @@ ppp_sync_wakeup(struct tty_struct *tty)
 	struct syncppp *ap = sp_get(tty);
 
 	clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
-	if (ap == 0)
+	if (!ap)
 		return;
 	set_bit(XMIT_WAKEUP, &ap->xmit_flags);
 	tasklet_schedule(&ap->tsk);
@@ -655,7 +655,7 @@ ppp_sync_push(struct syncppp *ap)
 	for (;;) {
 		if (test_and_clear_bit(XMIT_WAKEUP, &ap->xmit_flags))
 			tty_stuffed = 0;
-		if (!tty_stuffed && ap->tpkt != 0) {
+		if (!tty_stuffed && ap->tpkt) {
 			set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
 			sent = tty->driver->write(tty, ap->tpkt->data, ap->tpkt->len);
 			if (sent < 0)
@@ -673,7 +673,7 @@ ppp_sync_push(struct syncppp *ap)
 		/* haven't made any progress */
 		spin_unlock_bh(&ap->xmit_lock);
 		if (!(test_bit(XMIT_WAKEUP, &ap->xmit_flags)
-		      || (!tty_stuffed && ap->tpkt != 0)))
+		      || (!tty_stuffed && ap->tpkt)))
 			break;
 		if (!spin_trylock_bh(&ap->xmit_lock))
 			break;
@@ -681,7 +681,7 @@ ppp_sync_push(struct syncppp *ap)
 	return done;
 
 flush:
-	if (ap->tpkt != 0) {
+	if (ap->tpkt) {
 		kfree_skb(ap->tpkt);
 		ap->tpkt = NULL;
 		clear_bit(XMIT_FULL, &ap->xmit_flags);
@@ -736,7 +736,7 @@ ppp_sync_input(struct syncppp *ap, const
 		ppp_print_buffer ("receive buffer", buf, count);
 
 	/* stuff the chars in the skb */
-	if ((skb = dev_alloc_skb(ap->mru + PPP_HDRLEN + 2)) == 0) {
+	if (!(skb = dev_alloc_skb(ap->mru + PPP_HDRLEN + 2))) {
 		printk(KERN_ERR "PPPsync: no memory (input pkt)\n");
 		goto err;
 	}
@@ -744,7 +744,7 @@ ppp_sync_input(struct syncppp *ap, const
 	if (buf[0] != PPP_ALLSTATIONS)
 		skb_reserve(skb, 2 + (buf[0] & 1));
 
-	if (flags != 0 && *flags) {
+	if (flags && *flags) {
 		/* error flag set, ignore frame */
 		goto err;
 	} else if (count > skb_tailroom(skb)) {
--- a/drivers/net/pppoe.c
+++ b/drivers/net/pppoe.c
@@ -437,7 +437,7 @@ static int pppoe_disc_rcv(struct sk_buff
 		 * one socket family type, we cannot (easily) distinguish
 		 * what kind of SKB it is during backlog rcv.
 		 */
-		if (sock_owned_by_user(sk) == 0) {
+		if (!sock_owned_by_user(sk)) {
 			/* We're no longer connect at the PPPOE layer,
 			 * and must wait for ppp channel to disconnect us.
 			 */


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ppp: don't use 0 in pointer context
  2006-02-08 22:14 ` James Carlson
  2006-02-08 22:19   ` Herbert Xu
  2006-02-08 22:23   ` Roland Dreier
@ 2006-02-08 22:44   ` Paul Mackerras
  2006-02-09 13:15     ` James Carlson
  2 siblings, 1 reply; 17+ messages in thread
From: Paul Mackerras @ 2006-02-08 22:44 UTC (permalink / raw)
  To: James Carlson; +Cc: Alexey Dobriyan, Al Viro, netdev, linux-ppp

James Carlson writes:

> Alexey Dobriyan writes:
> > -	if (ap == 0)
> > +	if (!ap)
> 
> And the solution is to treat it as a boolean instead?!  I'm not sure
> which is more ugly.
> 
> Why wouldn't explicit comparison against NULL be the preferred fix?

I just think this whole "you shouldn't compare a pointer to 0" thing
is completely silly, and patches like this have about the same level
of usefulness as patches that change "color" to "colour" or vice
versa.

However, the head penguin seems to have some bee in his bonnet about 0
not being a pointer value (despite what the C standard says), so
whatever.  *shrug*

Paul.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ppp: don't use 0 in pointer context
  2006-02-08 22:19   ` Herbert Xu
@ 2006-02-08 22:45     ` David Stevens
  2006-02-08 22:47       ` David S. Miller
  2006-02-08 23:22       ` Alexey Dobriyan
  0 siblings, 2 replies; 17+ messages in thread
From: David Stevens @ 2006-02-08 22:45 UTC (permalink / raw)
  To: Herbert Xu
  Cc: adobriyan, James Carlson, linux-ppp, netdev, netdev-owner, viro

netdev-owner@vger.kernel.org wrote on 02/08/2006 02:19:20 PM:

> James Carlson <carlsonj@workingcode.com> wrote:
> > Alexey Dobriyan writes:
> >> -     if (ap == 0)
> >> +     if (!ap)
> > 
> > And the solution is to treat it as a boolean instead?!  I'm not sure
> > which is more ugly.
> 
> Treating it as a boolean looks good to me.  It's better than the 
existing
> code because it shuts sparse up.

        Why would sparse complain about this? 0 is a well-defined
pointer value (the only value guaranteed to be by the language).
        From K&R ANSI C edition, section 5.4:

        "Pointers and integers are not interchangeable. Zero is the sole
exception: the constant zero may be assigned to a pointer, and a pointer
may be compared with the constant zero."

                                                        +-DLS


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ppp: don't use 0 in pointer context
  2006-02-08 22:45     ` David Stevens
@ 2006-02-08 22:47       ` David S. Miller
  2006-02-08 22:51         ` Paul Mackerras
                           ` (2 more replies)
  2006-02-08 23:22       ` Alexey Dobriyan
  1 sibling, 3 replies; 17+ messages in thread
From: David S. Miller @ 2006-02-08 22:47 UTC (permalink / raw)
  To: dlstevens
  Cc: herbert, adobriyan, carlsonj, linux-ppp, netdev, netdev-owner,
	viro

From: David Stevens <dlstevens@us.ibm.com>
Date: Wed, 8 Feb 2006 14:45:08 -0800

>         Why would sparse complain about this? 0 is a well-defined
> pointer value (the only value guaranteed to be by the language).

Because sparse goes beyond the standards and tries to
catch cases that usually end up being bugs.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ppp: don't use 0 in pointer context
  2006-02-08 22:47       ` David S. Miller
@ 2006-02-08 22:51         ` Paul Mackerras
  2006-02-08 23:00         ` Rick Jones
  2006-02-08 23:08         ` Herbert Xu
  2 siblings, 0 replies; 17+ messages in thread
From: Paul Mackerras @ 2006-02-08 22:51 UTC (permalink / raw)
  To: David S. Miller
  Cc: dlstevens, herbert, adobriyan, carlsonj, linux-ppp, netdev,
	netdev-owner, viro

David S. Miller writes:

> Because sparse goes beyond the standards and tries to
> catch cases that usually end up being bugs.

When has a pointer comparison with an explicit "0" ever caused a bug?

Paul.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ppp: don't use 0 in pointer context
  2006-02-08 22:47       ` David S. Miller
  2006-02-08 22:51         ` Paul Mackerras
@ 2006-02-08 23:00         ` Rick Jones
  2006-02-08 23:08         ` Herbert Xu
  2 siblings, 0 replies; 17+ messages in thread
From: Rick Jones @ 2006-02-08 23:00 UTC (permalink / raw)
  Cc: linux-ppp, netdev, netdev-owner, viro

David S. Miller wrote:
> From: David Stevens <dlstevens@us.ibm.com>
> Date: Wed, 8 Feb 2006 14:45:08 -0800
> 
> 
>>        Why would sparse complain about this? 0 is a well-defined
>>pointer value (the only value guaranteed to be by the language).
> 
> 
> Because sparse goes beyond the standards and tries to
> catch cases that usually end up being bugs.

So, how might it tell when someone is mistakenly using a pointer as a boolean if 
it takes a pass on if(foo) or if(!foo)  instead of looking for if(foo == NULL) 
or if(foo != NULL)?    (or I suppose if (NULL == foo) and if (NULL != foo))

it would seem that the compars with NULL, when read by pseudorandom folks would 
be more likely to reinforce that foo is a pointer rather than a boolean/flag.

rick jones

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ppp: don't use 0 in pointer context
  2006-02-08 22:47       ` David S. Miller
  2006-02-08 22:51         ` Paul Mackerras
  2006-02-08 23:00         ` Rick Jones
@ 2006-02-08 23:08         ` Herbert Xu
  2 siblings, 0 replies; 17+ messages in thread
From: Herbert Xu @ 2006-02-08 23:08 UTC (permalink / raw)
  To: David S. Miller
  Cc: dlstevens, adobriyan, carlsonj, linux-ppp, netdev, netdev-owner,
	viro

On Wed, Feb 08, 2006 at 02:47:12PM -0800, David S. Miller wrote:
> From: David Stevens <dlstevens@us.ibm.com>
> Date: Wed, 8 Feb 2006 14:45:08 -0800
> 
> >         Why would sparse complain about this? 0 is a well-defined
> > pointer value (the only value guaranteed to be by the language).
> 
> Because sparse goes beyond the standards and tries to
> catch cases that usually end up being bugs.

Well to be frank the only significant NULL/0 bug that I know can't
be caught by converting 0 to NULL anyway.  The bug only exists on
architectures where the representations of null-pointers of types
are different.  On those architectures, if you have something like

int func(char *fmt, ...);

...

	func("foo", NULL);

Then this may break if func actually expected a int * while NULL
could be something different altogether.  The only safe way to
write this is to have

	func("foo", (int *)NULL);

or

	func("foo", (int *)0);

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ppp: don't use 0 in pointer context
  2006-02-08 22:45     ` David Stevens
  2006-02-08 22:47       ` David S. Miller
@ 2006-02-08 23:22       ` Alexey Dobriyan
  2006-02-08 23:26         ` Paul Mackerras
  2006-02-08 23:49         ` Herbert Xu
  1 sibling, 2 replies; 17+ messages in thread
From: Alexey Dobriyan @ 2006-02-08 23:22 UTC (permalink / raw)
  To: David Stevens
  Cc: Herbert Xu, James Carlson, linux-ppp, netdev, netdev-owner, viro

On Wed, Feb 08, 2006 at 02:45:08PM -0800, David Stevens wrote:
> netdev-owner@vger.kernel.org wrote on 02/08/2006 02:19:20 PM:
> 
> > James Carlson <carlsonj@workingcode.com> wrote:
> > > Alexey Dobriyan writes:
> > >> -     if (ap == 0)
> > >> +     if (!ap)
> > >
> > > And the solution is to treat it as a boolean instead?!  I'm not sure
> > > which is more ugly.
> >
> > Treating it as a boolean looks good to me.  It's better than the
> existing
> > code because it shuts sparse up.
>
>         Why would sparse complain about this? 0 is a well-defined
> pointer value (the only value guaranteed to be by the language).
>         From K&R ANSI C edition, section 5.4:
>
>         "Pointers and integers are not interchangeable. Zero is the sole
> exception: the constant zero may be assigned to a pointer, and a pointer
> may be compared with the constant zero."

O is an integer, NULL is a pointer. You compare integers with integers
and pointers with pointers. You don't compare integers with pointers
because they are fundamentally different objects. The former counts
things, the latter points to them.

The fact that they can be represented by the same bit patterns is
irrelevant. The fact that K&R, C89, C99 make

	p = malloc();
	if (p == NULL)

legal C is irrelevant.

Because

	p = malloc();
	if (!p)
		err;

is idiomatic C, I've used this form.

<full-disclosure>
Oh, and for the record: current sparse from Linus doesn't warn about
this. Slightly modified sparse warns. Bugs which were uncovered by
more or less trivial and slightly broken sparse patch [1] are:

	[PATCH] dscc4: fix dscc4_init_dummy_skb check
	[PATCH] opl3sa2: fix adding second dma channel
	[PATCH] gusclassic: fix adding second dma channel
	[PATCH] ipw2200: fix ->eeprom[EEPROM_VERSION] check
	[PATCH] ixj: fix writing silence check

ppp-NULL.patch is the biggest part of
	187 files changed, 494 insertions(+), 499 deletions(-)
so I've flushed it first.

[1]:

--- a/evaluate.c
+++ b/evaluate.c
@@ -934,6 +934,10 @@ static struct symbol *evaluate_compare(s
 	/* Pointer types? */
 	if (is_ptr_type(ltype) || is_ptr_type(rtype)) {
 		// FIXME! Check the types for compatibility
+		if (is_ptr_type(ltype) && !is_ptr_type(rtype))
+			bad_expr_type(expr);
+		if (!is_ptr_type(ltype) && is_ptr_type(rtype))
+			bad_expr_type(expr);
 		expr->op = modify_for_unsigned(expr->op);
 		goto OK;
 	}

</full-disclosure>


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ppp: don't use 0 in pointer context
  2006-02-08 23:22       ` Alexey Dobriyan
@ 2006-02-08 23:26         ` Paul Mackerras
  2006-02-08 23:49         ` Herbert Xu
  1 sibling, 0 replies; 17+ messages in thread
From: Paul Mackerras @ 2006-02-08 23:26 UTC (permalink / raw)
  To: Alexey Dobriyan
  Cc: David Stevens, Herbert Xu, James Carlson, linux-ppp, netdev,
	netdev-owner, viro

Alexey Dobriyan writes:

> The fact that they can be represented by the same bit patterns is
> irrelevant.

Indeed it is.  The fact that the C standard says that "0" is a valid
representation for a null pointer in C source code *is* relevant,
though.  That is in fact something that *wasn't* in K&R C but was
introduced in ISO Standard C, and I think it makes sense.

Anyway, this whole discussion is silly.  Can we move on to discussing
whether "disc" or "disk" is the correct spelling, or something else
equally productive? :)

Paul.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ppp: don't use 0 in pointer context
  2006-02-08 23:22       ` Alexey Dobriyan
  2006-02-08 23:26         ` Paul Mackerras
@ 2006-02-08 23:49         ` Herbert Xu
  2006-02-08 23:58           ` David S. Miller
  1 sibling, 1 reply; 17+ messages in thread
From: Herbert Xu @ 2006-02-08 23:49 UTC (permalink / raw)
  To: Alexey Dobriyan
  Cc: dlstevens, herbert, carlsonj, linux-ppp, netdev, netdev-owner,
	viro

Alexey Dobriyan <adobriyan@gmail.com> wrote:
> 
> Oh, and for the record: current sparse from Linus doesn't warn about
> this. Slightly modified sparse warns. Bugs which were uncovered by
> more or less trivial and slightly broken sparse patch [1] are:
> 
>        [PATCH] dscc4: fix dscc4_init_dummy_skb check
>        [PATCH] opl3sa2: fix adding second dma channel
>        [PATCH] gusclassic: fix adding second dma channel
>        [PATCH] ipw2200: fix ->eeprom[EEPROM_VERSION] check
>        [PATCH] ixj: fix writing silence check

The first two can also be caught with gcc -pedantic.  In fact, catching
the last two should be doable there as well.  The difference between
gcc -pedantic and sparse is that it doesn't warn about obviously correct
cases like p != 0 or p = 0.

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ppp: don't use 0 in pointer context
  2006-02-08 23:49         ` Herbert Xu
@ 2006-02-08 23:58           ` David S. Miller
  2006-02-09  0:05             ` Randy.Dunlap
  2006-02-09  0:06             ` Herbert Xu
  0 siblings, 2 replies; 17+ messages in thread
From: David S. Miller @ 2006-02-08 23:58 UTC (permalink / raw)
  To: herbert
  Cc: adobriyan, dlstevens, carlsonj, linux-ppp, netdev, netdev-owner,
	viro

From: Herbert Xu <herbert@gondor.apana.org.au>
Date: Thu, 09 Feb 2006 10:49:37 +1100

> The difference between gcc -pedantic and sparse is that it doesn't
> warn about obviously correct cases like p != 0 or p = 0.

So obviously correct that you left out an equals sign in the
second case :-)

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ppp: don't use 0 in pointer context
  2006-02-08 23:58           ` David S. Miller
@ 2006-02-09  0:05             ` Randy.Dunlap
  2006-02-09  0:06             ` Herbert Xu
  1 sibling, 0 replies; 17+ messages in thread
From: Randy.Dunlap @ 2006-02-09  0:05 UTC (permalink / raw)
  To: David S. Miller
  Cc: herbert, adobriyan, dlstevens, carlsonj, linux-ppp, netdev,
	netdev-owner, viro

On Wed, 8 Feb 2006, David S. Miller wrote:

> From: Herbert Xu <herbert@gondor.apana.org.au>
> Date: Thu, 09 Feb 2006 10:49:37 +1100
>
> > The difference between gcc -pedantic and sparse is that it doesn't
> > warn about obviously correct cases like p != 0 or p = 0.
>
> So obviously correct that you left out an equals sign in the
> second case :-)

You should thank him.  8;)

-- 
~Randy

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ppp: don't use 0 in pointer context
  2006-02-08 23:58           ` David S. Miller
  2006-02-09  0:05             ` Randy.Dunlap
@ 2006-02-09  0:06             ` Herbert Xu
  1 sibling, 0 replies; 17+ messages in thread
From: Herbert Xu @ 2006-02-09  0:06 UTC (permalink / raw)
  To: David S. Miller
  Cc: adobriyan, dlstevens, carlsonj, linux-ppp, netdev, netdev-owner,
	viro

On Wed, Feb 08, 2006 at 03:58:59PM -0800, David S. Miller wrote:
> From: Herbert Xu <herbert@gondor.apana.org.au>
> Date: Thu, 09 Feb 2006 10:49:37 +1100
> 
> > The difference between gcc -pedantic and sparse is that it doesn't
> > warn about obviously correct cases like p != 0 or p = 0.
> 
> So obviously correct that you left out an equals sign in the
> second case :-)

Actually I intended that to be an assignment as this is something that
has generated many sparse patches.  Now if this was a comparison
mistakenly written as an assignment, gcc would pick it up anyway:

a.c:3: warning: suggest parentheses around assignment used as truth value

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH] ppp: don't use 0 in pointer context
  2006-02-08 22:44   ` Paul Mackerras
@ 2006-02-09 13:15     ` James Carlson
  0 siblings, 0 replies; 17+ messages in thread
From: James Carlson @ 2006-02-09 13:15 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: Alexey Dobriyan, Al Viro, netdev, linux-ppp

Paul Mackerras writes:
> > And the solution is to treat it as a boolean instead?!  I'm not sure
> > which is more ugly.
> > 
> > Why wouldn't explicit comparison against NULL be the preferred fix?
> 
> I just think this whole "you shouldn't compare a pointer to 0" thing
> is completely silly,

Indeed.

> However, the head penguin seems to have some bee in his bonnet about 0
> not being a pointer value (despite what the C standard says), so
> whatever.  *shrug*

Yeesh.

My point was that if you're going to get bent over something silly
like this, you might as well change it to something explicit, such as
a comparison of two pointers, rather than pretending that either
pointers or integers are in fact booleans.

I realize that it's entirely legal (per the standards) to write:

	if (p)

as it is to write:

	if (p != 0)

and also:

	if (p != NULL)

But if we're actually interested in clarity, rather than passing some
woe-begotten lint-like purity test, only that third form actually says
what the code does.  The other two may well be idiomatic in certain
circles, but they're nowhere near as lucid for those maintaining the
code.

I think that if this patch is "important," then something other than
just clarity is valued.  In that case, just ignore me, and do what you
will.

-- 
James Carlson         42.703N 71.076W         <carlsonj@workingcode.com>

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2006-02-09 13:15 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-02-08 22:28 [PATCH] ppp: don't use 0 in pointer context Alexey Dobriyan
2006-02-08 22:14 ` James Carlson
2006-02-08 22:19   ` Herbert Xu
2006-02-08 22:45     ` David Stevens
2006-02-08 22:47       ` David S. Miller
2006-02-08 22:51         ` Paul Mackerras
2006-02-08 23:00         ` Rick Jones
2006-02-08 23:08         ` Herbert Xu
2006-02-08 23:22       ` Alexey Dobriyan
2006-02-08 23:26         ` Paul Mackerras
2006-02-08 23:49         ` Herbert Xu
2006-02-08 23:58           ` David S. Miller
2006-02-09  0:05             ` Randy.Dunlap
2006-02-09  0:06             ` Herbert Xu
2006-02-08 22:23   ` Roland Dreier
2006-02-08 22:44   ` Paul Mackerras
2006-02-09 13:15     ` James Carlson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).