mirror of the now-defunct rocklinux.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

157 lines
4.3 KiB

# --- ROCK-COPYRIGHT-NOTE-BEGIN ---
#
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
# Please add additional copyright information _after_ the line containing
# the ROCK-COPYRIGHT-NOTE-END tag. Otherwise it might get removed by
# the ./scripts/Create-CopyPatch script. Do not edit this copyright text!
#
# ROCK Linux: rock-src/package/tsa/slrn/mem_leak.patch
# ROCK Linux is Copyright (C) 1998 - 2003 Clifford Wolf
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version. A copy of the GNU General Public
# License can be found at Documentation/COPYING.
#
# Many people helped and are helping developing ROCK Linux. Please
# have a look at http://www.rocklinux.org/ and the Documentation/TEAM
# file for details.
#
# --- ROCK-COPYRIGHT-NOTE-END ---
--- ./src/score.c Wed Mar 13 13:52:00 2002
+++ ./src/score.c Fri Apr 5 23:20:20 2002
@@ -550,6 +550,19 @@
char *Slrn_Scorefile_Open = NULL;
+static void free_srt (Score_Regexp_Type *srt)
+{
+ while (srt != NULL)
+ {
+ Score_Regexp_Type *srt_next = srt->next;
+ if ((srt->header_type == SCORE_SUB_AND) ||
+ (srt->header_type == SCORE_SUB_OR))
+ free_srt (srt->search.srt);
+ SLFREE (srt);
+ srt = srt_next;
+ }
+}
+
static void free_group_chain (void)
{
Score_Regexp_Type *srt;
@@ -558,13 +571,11 @@
{
Score_Type *next = Score_Root->next;
srt = &Score_Root->regexp_list;
- srt = srt->next; /* first not malloced */
- while (srt != NULL)
- {
- Score_Regexp_Type *srt_next = srt->next;
- SLFREE (srt);
- srt = srt_next;
- }
+ /* first not malloced; free subscores only: */
+ if ((srt->header_type == SCORE_SUB_AND) ||
+ (srt->header_type == SCORE_SUB_OR))
+ free_srt (srt->search.srt);
+ free_srt (srt->next);
SLFREE (Score_Root);
Score_Root = next;
}
@@ -837,6 +848,21 @@
}
+static void free_psrt (PScore_Regexp_Type *r)
+{
+ while (r != NULL)
+ {
+ PScore_Regexp_Type *rnext = r->next;
+
+ if ((r->header_type == SCORE_SUB_AND) ||
+ (r->header_type == SCORE_SUB_OR))
+ free_psrt (r->ireg.psrt);
+ else if ((r->flags & USE_INTEGER) == 0)
+ slrn_free ((char *) r->ireg.regexp_str);
+ SLFREE (r);
+ r = rnext;
+ }
+}
static void free_group_scores (void)
{
@@ -857,30 +883,14 @@
while (pst != NULL)
{
PScore_Type *pnext = pst->next;
- PScore_Regexp_Type *r = pst->pregexp_list;
- while (r != NULL)
- {
- PScore_Regexp_Type *rnext = r->next;
-
- if ((r->flags & USE_INTEGER) == 0)
- slrn_free ((char *) r->ireg.regexp_str);
- SLFREE (r);
- r = rnext;
- }
+ free_psrt (pst->pregexp_list);
slrn_free ((char *) pst->description);
SLFREE (pst);
+
pst = pnext;
}
- while (Scorefile_Names != NULL)
- {
- Scorefile_Name_Type *next = Scorefile_Names->next;
- slrn_free ((char *) Scorefile_Names->filename);
- slrn_free ((char *) Scorefile_Names);
- Scorefile_Names = next;
- }
-
SLFREE (Group_Score_Root);
Group_Score_Root = gnext;
}
@@ -1177,7 +1187,7 @@
ret = add_group_regexp (psrt, lp + 5, lp, SCORE_BYTES, not_flag);
else if (!slrn_case_strncmp (lp, (unsigned char *)"Message-Id:", 11))
ret = add_group_regexp (psrt, lp + 10, lp, SCORE_MESSAGE_ID, not_flag);
- else if (!slrn_case_strncmp (lp, (unsigned char *)"{:", 1))
+ else if (!slrn_case_strncmp (lp, (unsigned char *)"{:", 2))
{
if (lp[2] ==':')
{
@@ -1191,6 +1201,7 @@
}
else if (!slrn_case_strncmp (lp, (unsigned char *)"}", 1))
{
+ SLFREE (psrt);
if (sub_psrt != NULL)
return 0;
else
@@ -1205,6 +1216,7 @@
while (*lpp && (*lpp != ':')) lpp++;
if (*lpp != ':')
{
+ SLFREE (psrt);
score_error (_("Missing COLON."), line, *linenum, file);
return -1;
}
@@ -1298,6 +1310,13 @@
free_group_scores ();
}
free_group_chain ();
+ while (Scorefile_Names != NULL)
+ {
+ Scorefile_Name_Type *next = Scorefile_Names->next;
+ slrn_free ((char *) Scorefile_Names->filename);
+ slrn_free ((char *) Scorefile_Names);
+ Scorefile_Names = next;
+ }
sc.today = get_today ();
sc.score = 0;