X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=loaders.c;h=577a653130de77d7d56cc1c5e8b75b6d86bd9efb;hp=fb22579089b8c49e0a56422d009b423d0ed5ca3d;hb=53a7b1252f28700bcac181b241bcc6f64601013d;hpb=a8d4541795d53ea373c69c479b3bf07161373613 diff --git a/loaders.c b/loaders.c index fb225790..577a6531 100644 --- a/loaders.c +++ b/loaders.c @@ -1,4 +1,4 @@ -const char loaders_rcs[] = "$Id: loaders.c,v 1.16 2001/06/09 10:55:28 jongfoster Exp $"; +const char loaders_rcs[] = "$Id: loaders.c,v 1.22 2001/07/20 15:16:17 haroon Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/loaders.c,v $ @@ -35,6 +35,27 @@ const char loaders_rcs[] = "$Id: loaders.c,v 1.16 2001/06/09 10:55:28 jongfoster * * Revisions : * $Log: loaders.c,v $ + * Revision 1.22 2001/07/20 15:16:17 haroon + * - per Guy's suggestion, added a while loop in sweep() to catch not just + * the last inactive CSP but all other consecutive inactive CSPs after that + * as well + * + * Revision 1.21 2001/07/18 17:26:24 oes + * Changed to conform to new pcrs interface + * + * Revision 1.20 2001/07/17 13:07:01 oes + * Fixed segv when last line in config files + * lacked a terminating (\r)\n + * + * Revision 1.19 2001/07/13 14:01:54 oes + * Removed all #ifdef PCRS + * + * Revision 1.18 2001/06/29 21:45:41 oes + * Indentation, CRLF->LF, Tab-> Space + * + * Revision 1.17 2001/06/29 13:31:51 oes + * Various adaptions + * * Revision 1.16 2001/06/09 10:55:28 jongfoster * Changing BUFSIZ ==> BUFFER_SIZE * @@ -161,11 +182,6 @@ const char loaders_rcs[] = "$Id: loaders.c,v 1.16 2001/06/09 10:55:28 jongfoster #include "gateway.h" #include "actions.h" -#ifndef SPLIT_PROXY_ARGS -/* For strsav */ -#include "showargs.h" -#endif /* ndef SPLIT_PROXY_ARGS */ - const char loaders_h_rcs[] = LOADERS_H_VERSION; /* Fix a problem with Solaris. There should be no effect on other @@ -187,9 +203,8 @@ const char loaders_h_rcs[] = LOADERS_H_VERSION; static struct file_list *current_trustfile = NULL; #endif /* def TRUST_FILES */ -#ifdef PCRS static struct file_list *current_re_filterfile = NULL; -#endif /* def PCRS */ + /********************************************************************* @@ -245,12 +260,10 @@ void sweep(void) ncsp->actions_list->active = 1; } -#ifdef PCRS - if (ncsp->rlist) /* perl re files */ + if (ncsp->rlist) /* pcrsjob files */ { ncsp->rlist->active = 1; } -#endif /* def PCRS */ #ifdef TRUST_FILES if (ncsp->tlist) /* trust files */ @@ -261,36 +274,47 @@ void sweep(void) } else + /* + * this client is not active, release its resources + * and the ones of all inactive clients that might + * follow it + */ { - /* this client one is not active, release its resources */ - csp->next = ncsp->next; - - freez(ncsp->ip_addr_str); - freez(ncsp->my_ip_addr_str); - freez(ncsp->my_hostname); - + while( !ncsp->active ) + { + csp->next = ncsp->next; + + freez(ncsp->ip_addr_str); + freez(ncsp->my_ip_addr_str); + freez(ncsp->my_hostname); + #ifdef TRUST_FILES - freez(ncsp->referrer); + freez(ncsp->referrer); #endif /* def TRUST_FILES */ - freez(ncsp->x_forwarded); - freez(ncsp->iob->buf); - - free_http_request(ncsp->http); - - destroy_list(ncsp->headers); - destroy_list(ncsp->cookie_list); - - free_current_action(ncsp->action); - + freez(ncsp->x_forwarded); + freez(ncsp->iob->buf); + + free_http_request(ncsp->http); + + destroy_list(ncsp->headers); + destroy_list(ncsp->cookie_list); + + free_current_action(ncsp->action); + #ifdef STATISTICS - urls_read++; - if (ncsp->rejected) - { - urls_rejected++; - } + urls_read++; + if (ncsp->rejected) + { + urls_rejected++; + } #endif /* def STATISTICS */ - - freez(ncsp); + + freez(ncsp); + + /* are there any more in sequence after it? */ + if( !(ncsp = csp->next) ) + break; + } } } @@ -386,14 +410,13 @@ int create_url_spec(struct url_spec * url, char * buf) (REG_EXTENDED|REG_NOSUB|REG_ICASE)); if (errcode) { - size_t errlen = - regerror(errcode, - url->preg, buf, sizeof(buf)); + size_t errlen = regerror(errcode, + url->preg, buf, sizeof(buf)); buf[errlen] = '\0'; log_error(LOG_LEVEL_ERROR, "error compiling %s: %s", - url->spec, buf); + url->spec, buf); freez(url->spec); freez(url->path); @@ -432,6 +455,7 @@ int create_url_spec(struct url_spec * url, char * buf) url->unanchored = tmp_url->unanchored; return 0; /* OK */ + } @@ -555,6 +579,7 @@ int check_file_changed(const struct file_list * current, *newfl = fs; return 1; + } @@ -606,6 +631,10 @@ char *read_config_line(char *buf, int buflen, FILE *fp, struct file_list *fs) { *p = '\0'; } + else + { + p = linebuf + strlen(linebuf); + } /* Line continuation? Trim escape and set flag. */ if ((p != linebuf) && (*--p == '\\')) @@ -640,7 +669,7 @@ char *read_config_line(char *buf, int buflen, FILE *fp, struct file_list *fs) if (contflag) { contflag = 0; - continue; + continue; } /* Remove leading and trailing whitespace */ @@ -676,7 +705,7 @@ static void unload_trustfile(void *f) struct block_spec *b = (struct block_spec *)f; if (b == NULL) return; - unload_trustfile(b->next); + unload_trustfile(b->next); /* Stack is cheap, isn't it? */ free_url(b->url); @@ -829,7 +858,6 @@ load_trustfile_error: #endif /* def TRUST_FILES */ -#ifdef PCRS /********************************************************************* * * Function : unload_re_filterfile @@ -849,11 +877,10 @@ static void unload_re_filterfile(void *f) if (b == NULL) return; destroy_list(b->patterns); - pcrs_free_joblist(b->joblist); - freez(b); + return; } /********************************************************************* @@ -913,7 +940,7 @@ int load_re_filterfile(struct client_state *csp) enlist( bl->patterns, buf ); /* We have a meaningful line -> make it a job */ - if ((dummy = pcrs_compile(buf, &error)) == NULL) + if ((dummy = pcrs_compile_command(buf, &error)) == NULL) { log_error(LOG_LEVEL_RE_FILTER, "Adding re_filter job %s failed with error %d.", buf, error); @@ -959,7 +986,6 @@ load_re_filterfile_error: return(-1); } -#endif /* def PCRS */ /*********************************************************************