OSDN Git Service

* parse.y (process_imports): Allocate (and free) original_name only
authormark <mark@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 9 Jan 2005 13:54:34 +0000 (13:54 +0000)
committermark <mark@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 9 Jan 2005 13:54:34 +0000 (13:54 +0000)
       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().

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@93109 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/java/ChangeLog
gcc/java/jcf-parse.c
gcc/java/parse.y

index 06af406..af1736d 100644 (file)
@@ -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.
index b6732a1..50a7505 100644 (file)
@@ -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;
 
index 815b51e..b09bb87 100644 (file)
@@ -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;