From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3256 invoked by alias); 13 May 2013 21:11:27 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 3243 invoked by uid 89); 13 May 2013 21:11:27 -0000 X-Spam-SWARE-Status: No, score=-7.3 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.1 Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Mon, 13 May 2013 21:11:26 +0000 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r4DLBIWe013461 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 13 May 2013 17:11:18 -0400 Received: from valrhona.uglyboxes.com (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r4DLBHmS016094 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 13 May 2013 17:11:18 -0400 Message-ID: <519156F5.5090000@redhat.com> Date: Mon, 13 May 2013 21:11:00 -0000 From: Keith Seitz User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130402 Thunderbird/17.0.5 MIME-Version: 1.0 To: Doug Evans CC: "gdb-patches@sourceware.org ml" Subject: Re: [RFC] Cleanup for make_source_files_completion_list References: <51895A2F.8000504@redhat.com> <5191340B.60100@redhat.com> In-Reply-To: <5191340B.60100@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2013-05/txt/msg00456.txt.bz2 On 05/13/2013 11:42 AM, Keith Seitz wrote: > However, I think that the comment quoted above (and the surrounding > block of code which does the copying) should be removed and the callers > of make_source_files_completion list should pass text AND word instead > of text and text. add_filename_to_list (in symtab.c) does this text - > word adjustment already, so it is not necessary to repeat it here. WDYT? Something like this? [This causes no regressions in the test suite or by manually hacking at it.] Keith ChangeLog 2013-05-13 Keith Seitz * completer.c (location_completer): Pass 'word' to make_source_files_completion_list. Do not adjust filenames -- add_filename_to_list, called from make_source_files_completion_list, will do it. diff --git a/gdb/completer.c b/gdb/completer.c index e132651..28d27f8 100644 --- a/gdb/completer.c +++ b/gdb/completer.c @@ -270,7 +270,7 @@ location_completer (struct cmd_list_element *ignore, name, they cannot be asking for completion on files. */ if (strcspn (text, gdb_completer_file_name_break_characters) == text_len) - fn_list = make_source_files_completion_list (text, text); + fn_list = make_source_files_completion_list (text, word); } n_syms = VEC_length (char_ptr, list); @@ -296,32 +296,7 @@ location_completer (struct cmd_list_element *ignore, { /* Nothing. */ } - else if (n_files) - { - char *fn; - - /* If we only have file names as possible completion, we should - bring them in sync with what rl_complete expects. The - problem is that if the user types "break /foo/b TAB", and the - possible completions are "/foo/bar" and "/foo/baz" - rl_complete expects us to return "bar" and "baz", without the - leading directories, as possible completions, because `word' - starts at the "b". But we ignore the value of `word' when we - call make_source_files_completion_list above (because that - would not DTRT when the completion results in both symbols - and file names), so make_source_files_completion_list returns - the full "/foo/bar" and "/foo/baz" strings. This produces - wrong results when, e.g., there's only one possible - completion, because rl_complete will prepend "/foo/" to each - candidate completion. The loop below removes that leading - part. */ - for (ix = 0; VEC_iterate (char_ptr, list, ix, fn); ++ix) - { - memmove (fn, fn + (word - text), - strlen (fn) + 1 - (word - text)); - } - } - else if (!n_syms) + else if (!n_syms && !n_files) { /* No completions at all. As the final resort, try completing on the entire text as a symbol. */