From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23457 invoked by alias); 8 Dec 2013 21:29:52 -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 23444 invoked by uid 89); 8 Dec 2013 21:29:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-la0-f42.google.com Received: from Unknown (HELO mail-la0-f42.google.com) (209.85.215.42) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Sun, 08 Dec 2013 21:29:50 +0000 Received: by mail-la0-f42.google.com with SMTP id ec20so1067895lab.1 for ; Sun, 08 Dec 2013 13:29:40 -0800 (PST) X-Received: by 10.152.234.170 with SMTP id uf10mr927151lac.43.1386538180341; Sun, 08 Dec 2013 13:29:40 -0800 (PST) Received: from localhost ([188.134.22.24]) by mx.google.com with ESMTPSA id mv9sm6846581lbc.0.2013.12.08.13.29.39 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Sun, 08 Dec 2013 13:29:39 -0800 (PST) From: Azat Khuzhin To: gdb-patches@sourceware.org Cc: Azat Khuzhin Subject: [PATCH] gdb: set filename-display shortpath support Date: Sun, 08 Dec 2013 21:29:00 -0000 Message-Id: <1386538152-13461-1-git-send-email-a3at.mail@gmail.com> X-SW-Source: 2013-12/txt/msg00311.txt.bz2 Display only non-common part of filename and compilation directory This will be useful for projects that use separate build directory inside project (like build/cmake and others). --- gdb/ChangeLog | 6 ++++++ gdb/source.c | 44 +++++++++++++++++++++++++++++++++++++++++--- gdb/source.h | 3 +++ 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 788eaab..b098e04 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2013-12-00 Azat Khuzhin + + * source.h (symtab_to_shortpath): Add it. + * source.c (filename-display): Add shortpath display. + * source.c (symtab_to_filename_for_display): Use symtab_to_shortpath. + 2013-12-08 Joel Brobecker GDB 7.6.2 released. diff --git a/gdb/source.c b/gdb/source.c index 6234bfc..505ee7d 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -111,11 +111,13 @@ show_lines_to_list (struct ui_file *file, int from_tty, static const char filename_display_basename[] = "basename"; static const char filename_display_relative[] = "relative"; static const char filename_display_absolute[] = "absolute"; +static const char filename_display_shortpath[] = "shortpath"; static const char *const filename_display_kind_names[] = { filename_display_basename, filename_display_relative, filename_display_absolute, + filename_display_shortpath, NULL }; @@ -1134,6 +1136,39 @@ symtab_to_fullname (struct symtab *s) return s->fullname; } +#undef MIN +#define MIN(A, B) (((A) <= (B)) ? (A) : (B)) + +const char * +symtab_to_shortpath (struct symtab *symtab) +{ + char *prev_slash_name = (char *)symtab->filename; + char *prev_slash_dir = (char *)symtab->dirname; + char *slash_name = (char *)symtab->filename; + char *slash_dir = (char *)symtab->dirname; + const char *shortpath = slash_name; + + if (!slash_dir) + return shortpath; + + while ((slash_name = strstr(slash_name, SLASH_STRING)) && + (slash_dir = strstr(slash_dir, SLASH_STRING))) + { + slash_name++; + slash_dir++; + + if (strncmp(slash_name, slash_dir, MIN(slash_name - prev_slash_name, slash_dir - prev_slash_dir))) + break; + + shortpath = slash_name; + + prev_slash_name = slash_name; + prev_slash_dir = slash_dir; + } + + return shortpath; +} + /* See commentary in source.h. */ const char * @@ -1145,6 +1180,8 @@ symtab_to_filename_for_display (struct symtab *symtab) return symtab_to_fullname (symtab); else if (filename_display_string == filename_display_relative) return symtab->filename; + else if (filename_display_string == filename_display_shortpath) + return symtab_to_shortpath (symtab); else internal_error (__FILE__, __LINE__, _("invalid filename_display_string")); } @@ -2093,9 +2130,10 @@ is not specified, print all substitution rules."), Set how to display filenames."), _("\ Show how to display filenames."), _("\ filename-display can be:\n\ - basename - display only basename of a filename\n\ - relative - display a filename relative to the compilation directory\n\ - absolute - display an absolute filename\n\ + basename - display only basename of a filename\n\ + relative - display a filename relative to the compilation directory\n\ + absolute - display an absolute filename\n\ + shortpath - display only non-common part of filename and compilation directory\n\ By default, relative filenames are displayed."), NULL, show_filename_display_string, diff --git a/gdb/source.h b/gdb/source.h index 33cad09..79e3565 100644 --- a/gdb/source.h +++ b/gdb/source.h @@ -52,6 +52,9 @@ extern char *rewrite_source_path (const char *path); extern const char *symtab_to_fullname (struct symtab *s); +/* Returns only non-common part of filename and compilation directory. */ +extern const char *symtab_to_shortpath(struct symtab *symtab); + /* Returns filename without the compile directory part, basename or absolute filename. It depends on 'set filename-display' value. */ extern const char *symtab_to_filename_for_display (struct symtab *symtab); -- 1.8.4.3