From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4775 invoked by alias); 24 Feb 2010 22:49:05 -0000 Received: (qmail 4734 invoked by uid 22791); 24 Feb 2010 22:49:01 -0000 X-SWARE-Spam-Status: No, hits=-6.6 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,SPF_HELO_PASS X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 24 Feb 2010 22:48:55 +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.13.8/8.13.8) with ESMTP id o1OMmruS012310 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 24 Feb 2010 17:48:54 -0500 Received: from [IPv6:::1] (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 o1OMmoPd007695 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Wed, 24 Feb 2010 17:48:52 -0500 Message-ID: <4B85ACD2.2030002@redhat.com> Date: Wed, 24 Feb 2010 22:49:00 -0000 From: Keith Seitz User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.7) Gecko/20100120 Fedora/3.0.1-1.fc11 Lightning/1.0b1 Thunderbird/3.0.1 MIME-Version: 1.0 To: gdb-patches@sourceware.org Subject: Re: [RFA] More linespec quoting "fixes" References: <4B85A3BF.8010001@redhat.com> In-Reply-To: <4B85A3BF.8010001@redhat.com> Content-Type: multipart/mixed; boundary="------------020403040403060201060308" X-IsSubscribed: yes 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 X-SW-Source: 2010-02/txt/msg00611.txt.bz2 This is a multi-part message in MIME format. --------------020403040403060201060308 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 751 On 02/24/2010 02:10 PM, Keith Seitz wrote: > * linespec.c (decode_line_1): Update comments for is_quote_enclosed. > If the filename portion of the linespec was quoted, recheck the > remainder for additional quoting. > (locate_first_half): Skip over completer chars, too. And, of course, there is a small typo in the patch... locate_first_half should be: @@ -1056,7 +1066,14 @@ locate_first_half (char **argptr, int *i p++; } else - *is_quote_enclosed = 0; + { + *is_quote_enclosed = 0; + if (strchr (get_gdb_completer_quote_characters (), *p)) + { + ++(*argptr); + ++p; + } + } for (; *p; p++) { if (p[0] == '<') Sorry about that. FWIW, I've attached the corrected patch as well. Keith --------------020403040403060201060308 Content-Type: text/plain; name="more-linespec-quoting.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="more-linespec-quoting.patch" Content-length: 3639 Index: linespec.c =================================================================== RCS file: /cvs/src/src/gdb/linespec.c,v retrieving revision 1.96 diff -u -p -r1.96 linespec.c --- linespec.c 16 Feb 2010 20:51:49 -0000 1.96 +++ linespec.c 24 Feb 2010 22:44:11 -0000 @@ -694,12 +694,14 @@ decode_line_1 (char **argptr, int funfir /* This says whether or not something in *ARGPTR is quoted with completer_quotes (i.e. with single quotes). */ int is_quoted; - /* Is part of *ARGPTR is enclosed in double quotes? */ + /* Is *ARGPTR is enclosed in double quotes? */ int is_quote_enclosed; int is_objc_method = 0; char *saved_arg = *argptr; /* If IS_QUOTED, the end of the quoted bit. */ char *end_quote = NULL; + /* The "first half" of the linespec. */ + char *first_half; if (not_found_ptr) *not_found_ptr = 0; @@ -731,7 +733,7 @@ decode_line_1 (char **argptr, int funfir will point to "". If this is a C++ name, like "A::B::foo", p will point to "::B::foo". Argptr is not changed by this call. */ - p = locate_first_half (argptr, &is_quote_enclosed); + first_half = p = locate_first_half (argptr, &is_quote_enclosed); /* Check if this is an Objective-C method (anything that starts with a '+' or '-' and a '['). */ @@ -751,9 +753,6 @@ decode_line_1 (char **argptr, int funfir return values; } - if (is_quoted) - *argptr = *argptr + 1; - /* Does it look like there actually were two parts? */ if (p[0] == ':' || p[0] == '.') @@ -828,6 +827,17 @@ decode_line_1 (char **argptr, int funfir /* file_symtab is specified file's symtab, or 0 if no file specified. arg no longer contains the file name. */ + /* If the filename was quoted, we must re-check the quotation. */ + + if (end_quote == first_half && *end_quote!= '\0') + { + is_quoted = (**argptr + && strchr (get_gdb_completer_quote_characters (), + **argptr) != NULL); + if (is_quoted) + end_quote = skip_quoted (*argptr); + } + /* Check whether arg is all digits (and sign). */ q = *argptr; @@ -1056,7 +1066,14 @@ locate_first_half (char **argptr, int *i p++; } else - *is_quote_enclosed = 0; + { + *is_quote_enclosed = 0; + if (strchr (get_gdb_completer_quote_characters (), *p)) + { + ++(*argptr); + ++p; + } + } for (; *p; p++) { if (p[0] == '<') @@ -1574,7 +1591,8 @@ symtab_from_filename (char **argptr, cha copy = (char *) alloca (p - *argptr + 1); memcpy (copy, *argptr, p - *argptr); /* It may have the ending quote right after the file name. */ - if (is_quote_enclosed && copy[p - *argptr - 1] == '"') + if ((is_quote_enclosed && copy[p - *argptr - 1] == '"') + || copy[p - *argptr - 1] == '\'') copy[p - *argptr - 1] = 0; else copy[p - *argptr] = 0; Index: testsuite/gdb.cp/overload.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.cp/overload.exp,v retrieving revision 1.16 diff -u -p -r1.16 overload.exp --- testsuite/gdb.cp/overload.exp 16 Feb 2010 21:09:32 -0000 1.16 +++ testsuite/gdb.cp/overload.exp 24 Feb 2010 22:44:11 -0000 @@ -299,6 +299,8 @@ gdb_test "list ${srcfile}:intToChar" "in gdb_test "list ${srcfile}:intToChar(char)" "int intToChar.*" gdb_test "list ${srcfile}:'intToChar(char)'" "int intToChar.*" gdb_test "list '${srcfile}:intToChar(char)'" "int intToChar.*" +gdb_test "list '${srcfile}':intToChar(char)" "int intToChar.*" +gdb_test "list '${srcfile}':'intToChar(char)'" "int intToChar.*" # And with filename and namespace... which does not work. --------------020403040403060201060308--