aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPascal Obry <obry@adacore.com>2018-05-29 09:39:11 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2018-05-29 09:39:11 +0000
commitce09c3c07f3bae669c0152ba4d72a708cfe27d0f (patch)
tree82b60ad3dc0f7f2b454e9e075f3c1cf99500dd92
parentae3d5f110d3c81637f619f2396cc4816d391bd29 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/ada/libgnat/s-os_lib.adb18
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/normalize_pathname.adb10
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;