From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27750 invoked by alias); 13 Feb 2006 17:46:25 -0000 Received: (qmail 27713 invoked by uid 22791); 13 Feb 2006 17:46:19 -0000 X-Spam-Check-By: sourceware.org Received: from zen.org (HELO mail.zen.org) (69.55.232.50) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 13 Feb 2006 17:46:11 +0000 Received: from localhost (zen.org [127.0.0.1]) by mail.zen.org (Postfix) with ESMTP id 5C91926C14F; Mon, 13 Feb 2006 09:46:07 -0800 (PST) Received: from mail.zen.org ([127.0.0.1]) by localhost (zen.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 10387-09; Mon, 13 Feb 2006 09:45:55 -0800 (PST) Received: from [192.168.20.4] (83-70-29-228.b-ras1.prp.dublin.eircom.net [83.70.29.228]) by mail.zen.org (Postfix) with ESMTP id AD9C426C1B9; Mon, 13 Feb 2006 09:45:49 -0800 (PST) Message-ID: <43F0C5C9.5010906@zen.org> Date: Mon, 13 Feb 2006 17:46:00 -0000 From: Brendan Kehoe User-Agent: Mozilla Thunderbird 1.0.6 (X11/20050715) MIME-Version: 1.0 To: gdb-gnats@sources.redhat.com, nobody@sources.redhat.com, harada@esd.spr.epson.co.jp, gdb-prs@sources.redhat.com, gdb-patches@sources.redhat.com Subject: Re: remote/1832: spaces in directory names Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2006-02/txt/msg00282.txt.bz2 This change makes GDB a little more willing to debug an application on a remote target when the file or its path happens to have one or more spaces in it. Among other things, this makes paths like C:/Documents and Settings/Joe Smith/My Documents/hack/mytest usable when you want to debug mytest on a remote target via 'load'. Two bits I'll try to bring up elsewhere but want to write down here: - I think it'd be better to pass the ARGS part of the on_load callback function as an array of pointers similar to ARGV, so you don't have to try to tokenize in places it might matter; and - I'm curious about the mystical second argument to the LOAD command in GDB; it's only mentioned in the docs related to the Sparlet, and even then only in passing. Hope this helps, B 2006-02-13 Brendan Kehoe * symfile.c (generic_load): Adjust the handling of finding any second/offset argument so we can properly use filenames and paths that use spaces, like "/home/foo/my hacks/code". Since the LOAD_OFFSET is already initialized to 0 at the beginning, we don't need an else stmt. --- gdb/symfile.c.~1~ 2005-08-31 22:07:33.000000000 +0100 +++ gdb/symfile.c 2006-02-13 17:21:16.000000000 +0000 @@ -1626,6 +1626,23 @@ generic_load (char *args, int from_tty) old_cleanups = make_cleanup (xfree, filename); strcpy (filename, args); - offptr = strchr (filename, ' '); + offptr = strrchr (filename, ' '); /* find the last space char */ if (offptr != NULL) + { + /* Note where the space was, since that's effectively the end + of the filename if we have to insert the null char. + This implies we won't grok filenames that end in a space. :) */ + char* end_of_filename = offptr++; + + /* As per ISO 9899 (C99) $7.20.1.4/3 and POSIX 1003.1-2001, + strtoul expects a string meeting this sort of expression + for an integer-constant: + [\s]*[+\-]?(0[xX][0-9a-fA-F]*|[0-9]*) + This will be true when its third argument, BASE, is zero. + So having skipped the whitespace, we either have to have + a '+' or '-', or a valid digit character. Anything else + has to be considered part of the filename. + */ + if ((offptr[0] == '+' || offptr[0] == '-') + || (isdigit (offptr[0]))) { char *endptr; @@ -1634,8 +1651,7 @@ generic_load (char *args, int from_tty) if (offptr == endptr) error (_("Invalid download offset:%s."), offptr); - *offptr = '\0'; + *end_of_filename = '\0'; } - else - cbdata.load_offset = 0; + } /* Open the file for loading. */