2008-02-20 James Youngman <[EMAIL PROTECTED]> * src/join.c (prevline): Make prevline module-level static, so that the allocated items can be freed at exit. (free_prevline): new atexit function; frees items in prevline[]. Use ARRAY_CARDINALITY, so include "argmatch.h" to get that. (main): Arrange for free_prevline to be called during exit. (get_line): Free prevline[which - 1] also, as that will have been allocated by dup_line.
Signed-off-by: James Youngman <[EMAIL PROTECTED]> --- src/join.c | 24 ++++++++++++++++++++++-- 1 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/join.c b/src/join.c index 71b11da..f7920e0 100644 --- a/src/join.c +++ b/src/join.c @@ -31,6 +31,7 @@ #include "stdio--.h" #include "xmemcoll.h" #include "xstrtol.h" +#include "argmatch.h" /* The official name of this program (e.g., no `g' prefix). */ #define PROGRAM_NAME "join" @@ -78,6 +79,11 @@ struct seq struct line *lines; }; +/* The previous line read from each file. */ +static struct line *prevline[2]; + + + /* The name this program was run with. */ char *program_name; @@ -300,8 +306,6 @@ freeline (struct line *line) static bool get_line (FILE *fp, struct line *line, int which) { - static struct line *prevline[2]; - initbuffer (&line->buf); if (! readlinebuffer (&line->buf, fp)) @@ -322,12 +326,27 @@ get_line (FILE *fp, struct line *line, int which) { checkorder (prevline[which - 1], line, which); freeline (prevline[which - 1]); + free (prevline[which - 1]); } prevline[which - 1] = dup_line (line); return true; } static void +free_prevline (void) +{ + size_t i; + + for (i=0; i<ARRAY_CARDINALITY (prevline); i++) + { + if (prevline[i]) + freeline (prevline[i]); + free (prevline[i]); + prevline[i] = NULL; + } +} + +static void initseq (struct seq *seq) { seq->count = 0; @@ -925,6 +944,7 @@ main (int argc, char **argv) hard_LC_COLLATE = hard_locale (LC_COLLATE); atexit (close_stdout); + atexit (free_prevline); print_pairables = true; seen_unpairable = false; -- 1.5.3.8 _______________________________________________ Bug-coreutils mailing list Bug-coreutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-coreutils