Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Yao Qi <yao@codesourcery.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH] Fix PR remote/15974
Date: Sat, 30 Nov 2013 10:11:00 -0000	[thread overview]
Message-ID: <5299A894.70100@redhat.com> (raw)
In-Reply-To: <1385782688-375-1-git-send-email-yao@codesourcery.com>

On 11/30/2013 03:38 AM, Yao Qi wrote:
> In remote-notif.c:handle_notification, we have a loop,
> 
>   for (i = 0; i < ARRAY_SIZE (notifs); i++)
>     {
>       nc = notifs[i];
>       if (strncmp (buf, nc->name, strlen (nc->name)) == 0
> 	  && buf[strlen (nc->name)] == ':')
> 	break;
>     }
> 
>   /* We ignore notifications we don't recognize, for compatibility
>      with newer stubs.  */
>   if (nc == NULL)
>     return;
> 
> If the notification is not in the list 'notifs', the last entry is
> used, which is wrong.  It should be NULL.  This patch sets 'nc' to
> NULL in the loop.
> 
> gdb:
> 
> 2013-11-30  Yao Qi  <yao@codesourcery.com>
> 
> 	PR remote/15974
> 	* remote-notif.c (handle_notification): Set variable 'nc' to
> 	NULL in loop.
> ---
>  gdb/remote-notif.c |    1 +
>  1 files changed, 1 insertions(+), 0 deletions(-)
> 
> diff --git a/gdb/remote-notif.c b/gdb/remote-notif.c
> index 0d59279..598e888 100644
> --- a/gdb/remote-notif.c
> +++ b/gdb/remote-notif.c
> @@ -136,6 +136,7 @@ handle_notification (struct remote_notif_state *state, char *buf)
>        if (strncmp (buf, nc->name, strlen (nc->name)) == 0
>  	  && buf[strlen (nc->name)] == ':')
>  	break;
> +      nc = NULL;
>      }
>  
>    /* We ignore notifications we don't recognize, for compatibility
> 

Instead of setting and unsetting NC at each iteration, the "canonical" way
for this sort of thing is to check whether the loop ended:

-  if (nc == NULL)
+  for (i == ARRAY_SIZE (notifs))

And then again, we don't really need NC in the loop.  I think
this would look cleaner and clearer:

diff --git c/gdb/remote-notif.c w/gdb/remote-notif.c
index 0d59279..efd1509 100644
--- c/gdb/remote-notif.c
+++ w/gdb/remote-notif.c
@@ -127,22 +127,25 @@ remote_async_get_pending_events_handler (gdb_client_data data)
 void
 handle_notification (struct remote_notif_state *state, char *buf)
 {
-  struct notif_client *nc = NULL;
-  int i;
+  struct notif_client *nc;
+  size_t i;

   for (i = 0; i < ARRAY_SIZE (notifs); i++)
     {
-      nc = notifs[i];
-      if (strncmp (buf, nc->name, strlen (nc->name)) == 0
-	  && buf[strlen (nc->name)] == ':')
+      const char *name = notifs[i]->name;
+
+      if (strncmp (buf, name, strlen (name)) == 0
+	  && buf[strlen (name)] == ':')
 	break;
     }

   /* We ignore notifications we don't recognize, for compatibility
      with newer stubs.  */
-  if (nc == NULL)
+  if (i == ARRAY_SIZE (notifs))
     return;

+  nc = notifs[i];
+
   if (state->pending_event[nc->id] != NULL)
     {
       /* We've already parsed the in-flight reply, but the stub for some


  reply	other threads:[~2013-11-30  8:58 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-30  5:47 Yao Qi
2013-11-30 10:11 ` Pedro Alves [this message]
2013-12-02  6:41   ` Yao Qi
2013-12-02 10:02     ` Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5299A894.70100@redhat.com \
    --to=palves@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=yao@codesourcery.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox