diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-03-26 07:36:23 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-03-26 07:36:23 +0000 |
commit | 3d461f01ca329e6486e8a9aefbe10b626eecb567 (patch) | |
tree | 3173470e6e27e281b642f203e4f297feb2f09086 /gcc/ada/a-suteio.adb | |
parent | 2253aba6069113bf4d0356a00a1eb828be807d23 (diff) | |
download | ppe42-gcc-3d461f01ca329e6486e8a9aefbe10b626eecb567.tar.gz ppe42-gcc-3d461f01ca329e6486e8a9aefbe10b626eecb567.zip |
2008-03-26 Vincent Celier <celier@adacore.com>
* a-szuzti.adb, a-swuwti.adb, a-suteio.adb (functions Get_Line):
Improve memory usage to avoid use of stack.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@133550 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/a-suteio.adb')
-rw-r--r-- | gcc/ada/a-suteio.adb | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/ada/a-suteio.adb b/gcc/ada/a-suteio.adb index 98034e2b110..ef01398a815 100644 --- a/gcc/ada/a-suteio.adb +++ b/gcc/ada/a-suteio.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1997-2005, Free Software Foundation, Inc. -- +-- Copyright (C) 1997-2007, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -51,7 +51,9 @@ package body Ada.Strings.Unbounded.Text_IO is Str1 := new String'(Buffer (1 .. Last)); while Last = Buffer'Last loop Get_Line (Buffer, Last); - Str2 := new String'(Str1.all & Buffer (1 .. Last)); + Str2 := new String (1 .. Str1'Last + Last); + Str2 (Str1'Range) := Str1.all; + Str2 (Str1'Last + 1 .. Str2'Last) := Buffer (1 .. Last); Free (Str1); Str1 := Str2; end loop; @@ -73,7 +75,9 @@ package body Ada.Strings.Unbounded.Text_IO is Str1 := new String'(Buffer (1 .. Last)); while Last = Buffer'Last loop Get_Line (File, Buffer, Last); - Str2 := new String'(Str1.all & Buffer (1 .. Last)); + Str2 := new String (1 .. Str1'Last + Last); + Str2 (Str1'Range) := Str1.all; + Str2 (Str1'Last + 1 .. Str2'Last) := Buffer (1 .. Last); Free (Str1); Str1 := Str2; end loop; |