diff options
author | Pascal Obry <obry@adacore.com> | 2018-05-29 09:39:11 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2018-05-29 09:39:11 +0000 |
commit | ce09c3c07f3bae669c0152ba4d72a708cfe27d0f (patch) | |
tree | 82b60ad3dc0f7f2b454e9e075f3c1cf99500dd92 | |
parent | ae3d5f110d3c81637f619f2396cc4816d391bd29 (diff) | |
download | gcc-ce09c3c07f3bae669c0152ba4d72a708cfe27d0f.zip gcc-ce09c3c07f3bae669c0152ba4d72a708cfe27d0f.tar.gz gcc-ce09c3c07f3bae669c0152ba4d72a708cfe27d0f.tar.bz2 |
[Ada] Fix constraint error in Normalize_Pathname
Fix Normalize_Pathname to avoid a constraint error.
2018-05-29 Pascal Obry <obry@adacore.com>
gcc/ada/
* libgnat/s-os_lib.adb (Normalize_Pathname): Fix handling of ".." in
the root directory.
gcc/testsuite/
* gnat.dg/normalize_pathname.adb: New testcase.
From-SVN: r260872
-rw-r--r-- | gcc/ada/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ada/libgnat/s-os_lib.adb | 18 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/normalize_pathname.adb | 10 |
4 files changed, 31 insertions, 6 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 18a37db..6aea3c0 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,10 @@ 2018-05-29 Pascal Obry <obry@adacore.com> + * libgnat/s-os_lib.adb (Normalize_Pathname): Fix handling of ".." in + the root directory. + +2018-05-29 Pascal Obry <obry@adacore.com> + * libgnat/s-os_lib.adb: Minor reformatting. 2018-05-29 Doug Rupp <rupp@adacore.com> diff --git a/gcc/ada/libgnat/s-os_lib.adb b/gcc/ada/libgnat/s-os_lib.adb index 7e839cc..ca6eea1 100644 --- a/gcc/ada/libgnat/s-os_lib.adb +++ b/gcc/ada/libgnat/s-os_lib.adb @@ -2389,12 +2389,18 @@ package body System.OS_Lib is elsif Finish = Start + 1 and then Path_Buffer (Start .. Finish) = ".." then - Start := Last; - loop - Start := Start - 1; - exit when Start = 1 - or else Path_Buffer (Start) = Directory_Separator; - end loop; + if Last > 1 then + Start := Last - 1; + + while Start > 1 + and then Path_Buffer (Start) /= Directory_Separator + loop + Start := Start - 1; + end loop; + + else + Start := Last; + end if; if Start = 1 then if Finish = End_Path then diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b5f0e1f..947dfc2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2018-05-29 Pascal Obry <obry@adacore.com> + + * gnat.dg/normalize_pathname.adb: New testcase. + 2018-05-29 Tom de Vries <tom@codesourcery.com> * lib/scanasm.exp (scan-assembler-times): Use proc name in error diff --git a/gcc/testsuite/gnat.dg/normalize_pathname.adb b/gcc/testsuite/gnat.dg/normalize_pathname.adb new file mode 100644 index 0000000..7d0bcb1 --- /dev/null +++ b/gcc/testsuite/gnat.dg/normalize_pathname.adb @@ -0,0 +1,10 @@ +-- { dg-do run } + +with GNAT.OS_Lib; + +procedure Normalize_Pathname is + S : constant String := GNAT.OS_Lib.Normalize_Pathname + ("/../tmp", Directory => "", Resolve_Links => True); +begin + null; +end Normalize_Pathname; |