Fix dir command for duplicated paths and add a new testcase.
gdb/ChangeLog: 2014-01-07 Edjunior Barbosa Machado <emachado@linux.vnet.ibm.com> * source.c (add_path): Fix check for duplicated paths in the previously included paths. gdb/testsuite/ChangeLog: 2014-01-07 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.base/source-dir.exp: New file.
This commit is contained in:
parent
6104cb7ae7
commit
5e3f4fab9a
@ -1,3 +1,8 @@
|
||||
2014-01-07 Edjunior Barbosa Machado <emachado@linux.vnet.ibm.com>
|
||||
|
||||
* source.c (add_path): Fix check for duplicated paths in the previously
|
||||
included paths.
|
||||
|
||||
2014-01-07 Honggyu Kim <hong.gyu.kim@lge.com>
|
||||
|
||||
* ada-lang.c: Remove duplicated include statements.
|
||||
|
36
gdb/source.c
36
gdb/source.c
@ -574,17 +574,33 @@ add_path (char *dirname, char **which_path, int parse_separators)
|
||||
char tinybuf[2];
|
||||
|
||||
p = *which_path;
|
||||
/* FIXME: we should use realpath() or its work-alike
|
||||
before comparing. Then all the code above which
|
||||
removes excess slashes and dots could simply go away. */
|
||||
if (!filename_cmp (p, name))
|
||||
while (1)
|
||||
{
|
||||
/* Found it in the search path, remove old copy. */
|
||||
if (p > *which_path)
|
||||
p--; /* Back over leading separator. */
|
||||
if (prefix > p - *which_path)
|
||||
goto skip_dup; /* Same dir twice in one cmd. */
|
||||
memmove (p, &p[len + 1], strlen (&p[len + 1]) + 1); /* Copy from next \0 or : */
|
||||
/* FIXME: we should use realpath() or its work-alike
|
||||
before comparing. Then all the code above which
|
||||
removes excess slashes and dots could simply go away. */
|
||||
if (!filename_ncmp (p, name, len)
|
||||
&& (p[len] == '\0' || p[len] == DIRNAME_SEPARATOR))
|
||||
{
|
||||
/* Found it in the search path, remove old copy. */
|
||||
if (p > *which_path)
|
||||
{
|
||||
/* Back over leading separator. */
|
||||
p--;
|
||||
}
|
||||
if (prefix > p - *which_path)
|
||||
{
|
||||
/* Same dir twice in one cmd. */
|
||||
goto skip_dup;
|
||||
}
|
||||
/* Copy from next '\0' or ':'. */
|
||||
memmove (p, &p[len + 1], strlen (&p[len + 1]) + 1);
|
||||
}
|
||||
p = strchr (p, DIRNAME_SEPARATOR);
|
||||
if (p != 0)
|
||||
++p;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
tinybuf[0] = DIRNAME_SEPARATOR;
|
||||
|
@ -1,3 +1,7 @@
|
||||
2014-01-07 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.base/source-dir.exp: New file.
|
||||
|
||||
2014-01-07 Joel Brobecker <brobecker@adacore.com>
|
||||
|
||||
* gdb.ada/pp-rec-component.exp, gdb.ada/pp-rec-component.py,
|
||||
|
23
gdb/testsuite/gdb.base/source-dir.exp
Normal file
23
gdb/testsuite/gdb.base/source-dir.exp
Normal file
@ -0,0 +1,23 @@
|
||||
# Copyright 2014 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
standard_testfile
|
||||
|
||||
gdb_start
|
||||
|
||||
set foo "/nOtExStInG"
|
||||
|
||||
gdb_test "directory $foo/a $foo/b $foo/c" "\r\nSource directories searched: $foo/a:$foo/b:$foo/c:\\\$cdir:\\\$cwd"
|
||||
gdb_test "directory $foo/b $foo/d $foo/c" "\r\nSource directories searched: $foo/b:$foo/d:$foo/c:$foo/a:\\\$cdir:\\\$cwd"
|
Loading…
Reference in New Issue
Block a user