From: Bruno Haible Date: Wed, 30 Jan 2002 11:09:05 +0000 (+0000) Subject: Fix a memory leak. X-Git-Tag: v0.11~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8165e1d297ec247f2d7fc0d51b6b06a5ca56d379;p=thirdparty%2Fgettext.git Fix a memory leak. --- diff --git a/src/ChangeLog b/src/ChangeLog index b743c045d..7897368c7 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2002-01-27 Bruno Haible + + * 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 * x-c.c (ALERT_CHAR): New macro. diff --git a/src/x-elisp.c b/src/x-elisp.c index 46ef3e3e5..9a0cf3b45 100644 --- a/src/x-elisp.c +++ b/src/x-elisp.c @@ -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)); diff --git a/src/x-librep.c b/src/x-librep.c index 05d8f6e7c..8cf9d1357 100644 --- a/src/x-librep.c +++ b/src/x-librep.c @@ -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)); diff --git a/src/x-lisp.c b/src/x-lisp.c index 43ecbf064..8ea35efa4 100644 --- a/src/x-lisp.c +++ b/src/x-lisp.c @@ -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));