Fix qRcmd error code parsing
authorLuis Machado <luis.machado@arm.com>
Thu, 31 Mar 2022 15:45:53 +0000 (16:45 +0100)
committerLuis Machado <luis.machado@arm.com>
Tue, 5 Apr 2022 07:44:19 +0000 (08:44 +0100)
Someone at IRC spotted a bug in qRcmd handling. This looks like an oversight
or it is that way for historical reasons.

The code in gdb/remote.c:remote_target::rcmd uses isdigit instead of
isxdigit. One could argue that we are expecting decimal numbers, but further
below we use fromhex ().

Update the function to use isxdigit instead and also update the documentation.

I see there are lots of other cases of undocumented number format for error
messages, mostly described as NN instead of nn. For now I'll just update
this particular function.

gdb/doc/gdb.texinfo
gdb/remote.c

index b7da5e1173ba3fc0a9d66d037a851d373dca65cf..e50618fe9ab0d43d838184f8d5980652c3d807df 100644 (file)
@@ -42157,7 +42157,8 @@ A command response with no output.
 @item @var{OUTPUT}
 A command response with the hex encoded output string @var{OUTPUT}.
 @item E @var{NN}
-Indicate a badly formed request.
+Indicate a badly formed request.  The error number @var{NN} is given as
+hex digits.
 @item @w{}
 An empty reply indicates that @samp{qRcmd} is not recognized.
 @end table
index 122f204fe12b4c6c3f24a74e8108fdfb3930988b..b002f041734ce37fa8911282e69645defdd9633d 100644 (file)
@@ -11565,7 +11565,7 @@ remote_target::rcmd (const char *command, struct ui_file *outbuf)
       if (strcmp (buf, "OK") == 0)
        break;
       if (strlen (buf) == 3 && buf[0] == 'E'
-         && isdigit (buf[1]) && isdigit (buf[2]))
+         && isxdigit (buf[1]) && isxdigit (buf[2]))
        {
          error (_("Protocol error with Rcmd"));
        }