aboutsummaryrefslogtreecommitdiff
path: root/gcc/java
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2005-01-09 13:54:34 +0000
committerMark Wielaard <mark@gcc.gnu.org>2005-01-09 13:54:34 +0000
commitb927d3a45120ee708b6579bd482bb75d627ebd9d (patch)
tree36c506c4a7e19915d85364c6a0dde34fd15d7d22 /gcc/java
parente1a5510b3d36fe1b0dfa1cb2c81cd6fdb1dd1c3d (diff)
downloadgcc-b927d3a45120ee708b6579bd482bb75d627ebd9d.zip
gcc-b927d3a45120ee708b6579bd482bb75d627ebd9d.tar.gz
gcc-b927d3a45120ee708b6579bd482bb75d627ebd9d.tar.bz2
parse.y (process_imports): Allocate (and free) original_name only when not already defined.
* parse.y (process_imports): Allocate (and free) original_name only when not already defined. * jcf-parse.c (read_class): Free results of find_class() and lrealpath(). (java_parse_file): Keep pointer to head of file_list and free when done. Free result of lrealpath(). From-SVN: r93109
Diffstat (limited to 'gcc/java')
-rw-r--r--gcc/java/ChangeLog9
-rw-r--r--gcc/java/jcf-parse.c26
-rw-r--r--gcc/java/parse.y8
3 files changed, 34 insertions, 9 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index 06af406..af1736d 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,12 @@
+2005-01-08 Mark Wielaard <mark@klomp.org>
+
+ * parse.y (process_imports): Allocate (and free) original_name only
+ when not already defined.
+ * jcf-parse.c (read_class): Free results of find_class() and
+ lrealpath().
+ (java_parse_file): Keep pointer to head of file_list and free when
+ done. Free result of lrealpath().
+
2005-01-05 Tom Tromey <tromey@redhat.com>
* gcj.texi (Standard Properties): java.ext.dirs is now used.
diff --git a/gcc/java/jcf-parse.c b/gcc/java/jcf-parse.c
index b6732a1..50a7505 100644
--- a/gcc/java/jcf-parse.c
+++ b/gcc/java/jcf-parse.c
@@ -530,11 +530,17 @@ read_class (tree name)
if (jcf == NULL)
{
+ const char* path_name;
this_jcf.zipd = NULL;
jcf = &this_jcf;
- if (find_class (IDENTIFIER_POINTER (name), IDENTIFIER_LENGTH (name),
- &this_jcf, 1) == 0)
+
+ path_name = find_class (IDENTIFIER_POINTER (name),
+ IDENTIFIER_LENGTH (name),
+ &this_jcf, 1);
+ if (path_name == 0)
return 0;
+ else
+ free((char *) path_name);
}
current_jcf = jcf;
@@ -542,6 +548,7 @@ read_class (tree name)
if (current_jcf->java_source)
{
const char *filename = current_jcf->filename;
+ char *real_path;
tree given_file, real_file;
FILE *finput;
int generate;
@@ -551,7 +558,9 @@ read_class (tree name)
given_file = get_identifier (filename);
filename = IDENTIFIER_POINTER (given_file);
- real_file = get_identifier (lrealpath (filename));
+ real_path = lrealpath (filename);
+ real_file = get_identifier (real_path);
+ free (real_path);
generate = IS_A_COMMAND_LINE_FILENAME_P (given_file);
output_class = current_class = NULL_TREE;
@@ -1025,7 +1034,7 @@ java_parse_file (int set_yydebug ATTRIBUTE_UNUSED)
{
int filename_count = 0;
location_t save_location = input_location;
- char *list, *next;
+ char *file_list = NULL, *list, *next;
tree node;
FILE *finput = NULL;
int in_quotes = 0;
@@ -1063,6 +1072,7 @@ java_parse_file (int set_yydebug ATTRIBUTE_UNUSED)
}
fclose (finput);
finput = NULL;
+ file_list = list;
}
else
list = (char *) main_input_filename;
@@ -1138,6 +1148,9 @@ java_parse_file (int set_yydebug ATTRIBUTE_UNUSED)
list = next;
}
+ if (file_list != NULL)
+ free (file_list);
+
if (filename_count == 0)
warning ("no input file specified");
@@ -1159,13 +1172,16 @@ java_parse_file (int set_yydebug ATTRIBUTE_UNUSED)
for (node = current_file_list; node; node = TREE_CHAIN (node))
{
unsigned char magic_string[4];
+ char *real_path;
uint32 magic = 0;
tree name = DECL_NAME (node);
tree real_file;
const char *filename = IDENTIFIER_POINTER (name);
/* Skip already parsed files */
- real_file = get_identifier (lrealpath (filename));
+ real_path = lrealpath (filename);
+ real_file = get_identifier (real_path);
+ free (real_path);
if (HAS_BEEN_ALREADY_PARSED_P (real_file))
continue;
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index 815b51e..b09bb87 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -6955,14 +6955,14 @@ process_imports (void)
tree to_be_found = EXPR_WFL_NODE (TREE_PURPOSE (import));
char *original_name;
- original_name = xmemdup (IDENTIFIER_POINTER (to_be_found),
- IDENTIFIER_LENGTH (to_be_found),
- IDENTIFIER_LENGTH (to_be_found) + 1);
-
/* Don't load twice something already defined. */
if (IDENTIFIER_CLASS_VALUE (to_be_found))
continue;
+ original_name = xmemdup (IDENTIFIER_POINTER (to_be_found),
+ IDENTIFIER_LENGTH (to_be_found),
+ IDENTIFIER_LENGTH (to_be_found) + 1);
+
while (1)
{
tree left;