This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1/2] use zuinteger_unlimited for some remote commands


On 03/05/2013 12:20 AM, Pedro Alves wrote:
> But I ask, what's either:
> 
>   - the point of making it internally signed
>     with things like:
> 
>     if (*(int *) c->var != val)
> 
>     and forbidding INT_MAX..UINT_MAX-1.  (Not that I'm
>     arguing it should).  The care to only accept -1
>     and not any other negative number made me think
>     numbers in that range should be accepted.

Internally, we use -1 for unlimited, so it is signed.  Externally, it 
is unsigned, so we have to forbid the range (INT_MAX, UINT_MAX - 1].

> 
>   - the point of making it externally unsigned if
>     it only accepts [0, INT_MAX].  If the variable

because we need -1 for unlimited internally.  I don't see anything 
wrong to define unsigned type whose range is [0, INT_MAX].

>     assigned to the command was signed too, then this
>     range would be both implicit and explicit, meaning, one
>     weird detail less the user of the API needs to know.

If I understand you correctly, this is what you want,

extern void
  add_setshow_zuinteger_unlimited_cmd (char *name,
				       enum command_class class,
				       int *var,
                                       ^^^^^^^^
then, IMO, the API is weird, in which the type of parameter VAR 
(singed) is not consistent with the function (zuinteger_unlimited).
Since these CLI stuff provide APIs to other components, it is better to 
review them externally first.

However, I don't insist on that if you believe changing the type of VAR 
from "unsigned int" to "int" is better, I am OK  to change it to:

    /* ZeroableUnsignedInteger with unlimited value.  *VAR is an
       int, but its range is [0, INT_MAX].  -1 stands for
       unlimited and other negative numbers are not allowed.  */

The patch below is regression tested on x86_64-linux.

-- 
Yao (éå)

gdb:

2013-03-05  Yao Qi  <yao@codesourcery.com>

	* cli/cli-decode.c (add_setshow_zuinteger_unlimited_cmd): Change
	parameter VAR's type from "unsigned int" to "int".
	* command.h (var_zuinteger_unlimited): Update its comments.
	(add_setshow_zuinteger_unlimited_cmd): Update the declaration.
---
 gdb/cli/cli-decode.c |    2 +-
 gdb/command.h        |    7 ++++---
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c
index 49ccef3..a8f7747 100644
--- a/gdb/cli/cli-decode.c
+++ b/gdb/cli/cli-decode.c
@@ -708,7 +708,7 @@ add_setshow_zinteger_cmd (char *name, enum command_class class,
 void
 add_setshow_zuinteger_unlimited_cmd (char *name,
 				     enum command_class class,
-				     unsigned int *var,
+				     int *var,
 				     const char *set_doc,
 				     const char *show_doc,
 				     const char *help_doc,
diff --git a/gdb/command.h b/gdb/command.h
index 17662b4..a25fe04 100644
--- a/gdb/command.h
+++ b/gdb/command.h
@@ -99,8 +99,9 @@ typedef enum var_types
     /* ZeroableUnsignedInteger.  *VAR is an unsigned int.  Zero really
        means zero.  */
     var_zuinteger,
-    /* ZeroableUnsignedInteger with unlimited value.  *VAR is an unsigned
-       int, but its range is [0, INT_MAX].  -1 stands for unlimited.  */
+    /* ZeroableUnsignedInteger with unlimited value.  *VAR is an int,
+       but its range is [0, INT_MAX].  -1 stands for unlimited and
+       other negative numbers are not allowed.  */
     var_zuinteger_unlimited,
     /* Enumerated type.  Can only have one of the specified values.
        *VAR is a char pointer to the name of the element that we
@@ -361,7 +362,7 @@ extern void add_setshow_zuinteger_cmd (char *name,
 extern void
   add_setshow_zuinteger_unlimited_cmd (char *name,
 				       enum command_class class,
-				       unsigned int *var,
+				       int *var,
 				       const char *set_doc,
 				       const char *show_doc,
 				       const char *help_doc,
-- 
1.7.7.6


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]