From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11797 invoked by alias); 3 Jan 2003 23:28:20 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 11789 invoked from network); 3 Jan 2003 23:28:19 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by 209.249.29.67 with SMTP; 3 Jan 2003 23:28:20 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id h03N0lB30204 for ; Fri, 3 Jan 2003 18:00:47 -0500 Received: from pobox.corp.redhat.com (pobox.corp.redhat.com [172.16.52.156]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h03NS8a31930 for ; Fri, 3 Jan 2003 18:28:08 -0500 Received: from localhost.redhat.com (romulus-int.sfbay.redhat.com [172.16.27.46]) by pobox.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h03NS7l27066 for ; Fri, 3 Jan 2003 18:28:07 -0500 Received: by localhost.redhat.com (Postfix, from userid 469) id 3FDEEFF79; Fri, 3 Jan 2003 18:32:29 -0500 (EST) From: Elena Zannoni MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15894.7565.226547.559496@localhost.redhat.com> Date: Fri, 03 Jan 2003 23:28:00 -0000 To: Klee Dienes Cc: gdb-patches@sources.redhat.com Subject: Re: [RFA] New variable, 'max-completion-results'. In-Reply-To: References: X-SW-Source: 2003-01/txt/msg00118.txt.bz2 Klee Dienes writes: > The following patch adds a new user-visible variable to GDB, > 'max-completion-results'. > > It is used by the completion functions in symtab.c to limit the maximum > number of results returned by the completion function, and defaults to > 'unlimited'. I find it particuarly useful when using GDB under emacs, > to prevent situations where hitting at the wrong time can lead to > hundreds of thousands of results having to be sorted by > complete_command. > Needs a testcase (added to completion.exp) and documentation. Also, is there any check that the new value makes sense? I.e. what if one enters a negative number? Maybe that's a limitation of the set/show command, though. I get: (gdb) set max-completion-results -2 (gdb) show max-completion-results The maximum number of entries to be returned from a completion operation is 4294967294. > Index: symtab.c > =================================================================== > RCS file: /cvs/src/src/gdb/symtab.c,v > retrieving revision 1.75 > diff -u -r1.75 symtab.c > --- symtab.c 28 Oct 2002 17:05:56 -0000 1.75 > +++ symtab.c 4 Nov 2002 07:24:59 -0000 > @@ -50,6 +50,8 @@ > #include > #include "cp-abi.h" > > +static unsigned int max_completion_results = UINT_MAX; > + > /* Prototypes for local functions */ > > static void completion_list_add_name (char *, char *, int, char *, char *); > @@ -3090,6 +3092,7 @@ > > /* Helper routine for make_symbol_completion_list. */ > > +static unsigned int return_val_max; > static int return_val_size; > static int return_val_index; > static char **return_val; > @@ -3120,10 +3123,11 @@ > > /* clip symbols that cannot match */ > > + if (return_val_index == return_val_max) should be return_val_max - 1 (gdb) set max-completion-results 2 (gdb) p f factorial features.h float > + return; > + > if (strncmp (symname, sym_text, sym_text_len) != 0) > - { > - return; > - } > + return; > > /* We have a match for a completion, so add SYMNAME to the current list > of matches. Note that the name is moved to freshly malloc'd space. */ > @@ -3238,6 +3242,7 @@ > > sym_text_len = strlen (sym_text); > > + return_val_max = max_completion_results; > return_val_size = 100; > return_val_index = 0; > return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *)); > @@ -3419,6 +3424,7 @@ > > sym_text_len = strlen (sym_text); > > + return_val_max = max_completion_results; > return_val_size = 10; > return_val_index = 0; > return_val = (char **) xmalloc ((return_val_size + 1) * sizeof (char *)); > @@ -3739,6 +3745,7 @@ > > /* Helper routine for make_symbol_completion_list. */ > > +static unsigned int sym_return_val_max; > static int sym_return_val_size; > static int sym_return_val_index; > static struct symbol **sym_return_val; > @@ -3754,6 +3761,9 @@ > int i; > char *sym_name; > > + if (sym_return_val_index >= sym_return_val_max) > + return; > + I haven't tried this one, but should it be sym_return_val_max-1? because the index starts form 0. Elena > /* If there is no type information, we can't do anything, so skip */ > if (SYMBOL_TYPE (sym) == NULL) > return; > @@ -3822,6 +3832,7 @@ > } > oload_name_len = strlen (oload_name); > > + sym_return_val_max = max_completion_results; > sym_return_val_size = 100; > sym_return_val_index = 0; > sym_return_val = (struct symbol **) xmalloc ((sym_return_val_size + 1) * sizeof (struct symbol *)); > @@ -3965,6 +3976,8 @@ > void > _initialize_symtab (void) > { > + struct cmd_list_element *cmd; > + > add_info ("variables", variables_info, > "All global and static variable names, or those matching REGEXP."); > if (dbx_commands) > @@ -3998,6 +4011,13 @@ > > add_com ("rbreak", class_breakpoint, rbreak_command, > "Set a breakpoint for all functions matching REGEXP."); > + > + cmd = add_set_cmd ("max-completion-results", class_obscure, var_uinteger, > + (char *) &max_completion_results, > + "Set the maximum number of entries to be returned from a completion o\ > +peration.", > + &setlist); > + add_show_from_set (cmd, &showlist); > > if (xdb_commands) > { >