]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
Fix a memory leak.
authorBruno Haible <bruno@clisp.org>
Wed, 30 Jan 2002 11:09:05 +0000 (11:09 +0000)
committerBruno Haible <bruno@clisp.org>
Sun, 21 Jun 2009 23:10:00 +0000 (01:10 +0200)
src/ChangeLog
src/x-elisp.c
src/x-librep.c
src/x-lisp.c

index b743c045d4438831a377c567a4d12dcf0f78e4f2..7897368c7f05c1eb627b83d759bf11b94c8cf7dd 100644 (file)
@@ -1,3 +1,11 @@
+2002-01-27  Bruno Haible  <bruno@clisp.org>
+
+       * x-lisp.c (extract_lisp): Free memory allocated in toplevel_object.
+       * x-elisp.c (string_of_object): Use memcpy.
+       (extract_elisp): Free memory allocated in toplevel_object.
+       * x-librep.c (string_of_object): Use memcpy.
+       (extract_librep): Free memory allocated in toplevel_object.
+
 2002-01-27  Bruno Haible  <bruno@clisp.org>
 
        * x-c.c (ALERT_CHAR): New macro.
index 46ef3e3e5501c87232b8ece9ea0e59152f4b2fc5..9a0cf3b45447fb2c1e8c4110554c8dfb4364e309 100644 (file)
@@ -449,24 +449,20 @@ free_object (op)
     }
 }
 
-/* Convert a t_string token to a char*.  */
+/* Convert a t_symbol/t_string token to a char*.  */
 static char *
 string_of_object (op)
      const struct object *op;
 {
   char *str;
-  const char *p;
-  char *q;
   int n;
 
   if (!(op->type == t_symbol || op->type == t_string))
     abort ();
   n = op->token->charcount;
   str = (char *) xmalloc (n + 1);
-  q = str;
-  for (p = op->token->chars; n > 0; n--)
-    *q++ = *p++;
-  *q = '\0';
+  memcpy (str, op->token->chars, n);
+  str[n] = '\0';
   return str;
 }
 
@@ -1279,6 +1275,8 @@ extract_elisp (f, real_filename, logical_filename, mdlp)
 
       if (toplevel_object.type == t_eof)
        break;
+
+      free_object (&toplevel_object);
     }
   while (!feof (fp));
 
index 05d8f6e7cf1e26c413ddea739332da4451ec4c01..8cf9d1357ad2647662d2b4a18cfff933dd52abe7 100644 (file)
@@ -524,24 +524,20 @@ free_object (op)
     }
 }
 
-/* Convert a t_string token to a char*.  */
+/* Convert a t_symbol/t_string token to a char*.  */
 static char *
 string_of_object (op)
      const struct object *op;
 {
   char *str;
-  const char *p;
-  char *q;
   int n;
 
   if (!(op->type == t_symbol || op->type == t_string))
     abort ();
   n = op->token->charcount;
   str = (char *) xmalloc (n + 1);
-  q = str;
-  for (p = op->token->chars; n > 0; n--)
-    *q++ = *p++;
-  *q = '\0';
+  memcpy (str, op->token->chars, n);
+  str[n] = '\0';
   return str;
 }
 
@@ -1154,6 +1150,8 @@ extract_librep (f, real_filename, logical_filename, mdlp)
 
       if (toplevel_object.type == t_eof)
        break;
+
+      free_object (&toplevel_object);
     }
   while (!feof (fp));
 
index 43ecbf06442d5c99f42d0a53e68d03a64d5c94ca..8ea35efa43bdee88ce4df59bf9a8a6982f5e6ba1 100644 (file)
@@ -970,7 +970,7 @@ free_object (op)
     }
 }
 
-/* Convert a t_string token to a char*.  */
+/* Convert a t_symbol/t_string token to a char*.  */
 static char *
 string_of_object (op)
      const struct object *op;
@@ -1471,6 +1471,8 @@ extract_lisp (f, real_filename, logical_filename, mdlp)
 
       if (toplevel_object.type == t_eof)
        break;
+
+      free_object (&toplevel_object);
     }
   while (!feof (fp));