X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=loaders.c;h=e7dbbe42228826675dd5a59af493e859cfbc9585;hb=029f27038bef2c80e99dde3359c0ad86cab29594;hp=f2d8d5f8ee618987f5bbd4d3b93f11ac03c54ce1;hpb=cf9f517a263476946c02425c48dcf9118314454a;p=privoxy.git diff --git a/loaders.c b/loaders.c index f2d8d5f8..e7dbbe42 100644 --- a/loaders.c +++ b/loaders.c @@ -1,4 +1,4 @@ -const char loaders_rcs[] = "$Id: loaders.c,v 1.67 2008/03/30 14:52:08 fabiankeil Exp $"; +const char loaders_rcs[] = "$Id: loaders.c,v 1.71 2009/03/04 18:24:47 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/loaders.c,v $ @@ -8,7 +8,7 @@ const char loaders_rcs[] = "$Id: loaders.c,v 1.67 2008/03/30 14:52:08 fabiankeil * the list of active loaders, and to automatically * unload files that are no longer in use. * - * Copyright : Written by and Copyright (C) 2001-2007 the SourceForge + * Copyright : Written by and Copyright (C) 2001-2009 the * Privoxy team. http://www.privoxy.org/ * * Based on the Internet Junkbuster originally written @@ -35,6 +35,24 @@ const char loaders_rcs[] = "$Id: loaders.c,v 1.67 2008/03/30 14:52:08 fabiankeil * * Revisions : * $Log: loaders.c,v $ + * Revision 1.71 2009/03/04 18:24:47 fabiankeil + * No need to create empty strings manually, strdup("") FTW. + * + * Revision 1.70 2009/03/01 18:34:24 fabiankeil + * Help clang understand that we aren't dereferencing + * NULL pointers here. + * + * Revision 1.69 2008/09/21 13:36:52 fabiankeil + * If change-x-forwarded-for{add} is used and the client + * sends multiple X-Forwarded-For headers, append the client's + * IP address to each one of them. "Traditionally" we would + * lose all but the last one. + * + * Revision 1.68 2008/09/19 15:26:28 fabiankeil + * Add change-x-forwarded-for{} action to block or add + * X-Forwarded-For headers. Mostly based on code removed + * before 3.0.7. + * * Revision 1.67 2008/03/30 14:52:08 fabiankeil * Rename load_actions_file() and load_re_filterfile() * as they load multiple files "now". @@ -435,14 +453,15 @@ static struct file_list *current_re_filterfile[MAX_AF_FILES] = { * * Parameters : None * - * Returns : N/A + * Returns : The number of threads that are still active. * *********************************************************************/ -void sweep(void) +unsigned int sweep(void) { struct file_list *fl, *nfl; struct client_state *csp, *last_active; int i; + unsigned int active_threads = 0; /* clear all of the file's active flags */ for ( fl = files->next; NULL != fl; fl = fl->next ) @@ -497,10 +516,11 @@ void sweep(void) csp->tlist->active = 1; } #endif /* def FEATURE_TRUST */ - + + active_threads++; + last_active = csp; csp = csp->next; - } else /* @@ -511,7 +531,6 @@ void sweep(void) freez(csp->ip_addr_str); freez(csp->iob->buf); - freez(csp->x_forwarded_for); freez(csp->error_message); if (csp->action->flags & ACTION_FORWARD_OVERRIDE && @@ -563,6 +582,8 @@ void sweep(void) } } + return active_threads; + } @@ -863,30 +884,30 @@ jb_err edit_read_line(FILE *fp, if (raw_out) { - if ((raw = malloc(1)) == NULL) + raw = strdup(""); + if (NULL == raw) { return JB_ERR_MEMORY; } - *raw = '\0'; } if (prefix_out) { - if ((prefix = malloc(1)) == NULL) + prefix = strdup(""); + if (NULL == prefix) { freez(raw); return JB_ERR_MEMORY; } - *prefix = '\0'; } if (data_out) { - if ((data = malloc(1)) == NULL) + data = strdup(""); + if (NULL == data) { freez(raw); freez(prefix); return JB_ERR_MEMORY; } - *data = '\0'; } /* Main loop. Loop while we need more data & it's not EOF. */ @@ -920,6 +941,7 @@ jb_err edit_read_line(FILE *fp, /* Trim leading spaces if we're at the start of the line */ linestart = linebuf; + assert(NULL != data); if (*data == '\0') { /* Trim leading spaces */ @@ -1559,6 +1581,7 @@ int load_one_re_filterfile(struct client_state *csp, int fileid) } else { + assert(NULL != bl); bl->next = new_bl; } bl = new_bl; @@ -1622,7 +1645,7 @@ int load_one_re_filterfile(struct client_state *csp, int fileid) { bl->joblist = dummy; } - else + else if (NULL != lastjob) { lastjob->next = dummy; }