Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals  

loaders.c File Reference

Functions to load and unload the various configuration files. More...


Defines

#define CHAR_CR   '\r'
#define CHAR_LF   '\n'

Functions

void sweep (void)
int check_file_changed (const struct file_list *current, const char *filename, struct file_list **newfl)
jb_err simple_read_line (FILE *fp, char **dest, int *newline)
jb_err edit_read_line (FILE *fp, char **raw_out, char **prefix_out, char **data_out, int *newline, unsigned long *line_number)
char * read_config_line (char *buf, size_t buflen, FILE *fp, unsigned long *linenum)
void unload_re_filterfile (void *f)
int load_re_filterfile (struct client_state *csp)
void add_loader (int(*loader)(struct client_state *), struct configuration_spec *config)
int run_loader (struct client_state *csp)

Variables

const char loaders_rcs [] = "$Id: loaders.c,v 2.1 2002/06/04 17:22:37 jongfoster Exp $"
const char loaders_h_rcs [] = LOADERS_H_VERSION
file_listcurrent_re_filterfile = NULL


Detailed Description

Functions to load and unload the various configuration files.

Also contains code to manage the list of active loaders, and to automatically unload files that are no longer in use.

Log:
loaders.c,v
Revision 2.1 2002/06/04 17:22:37 jongfoster Adding comments

Revision 2.0 2002/06/04 14:34:21 jongfoster Moving source files to src/

Revision 1.50 2002/04/24 02:12:16 oes Jon's multiple AF patch: Sweep now takes care of all AFs

Revision 1.49 2002/04/19 16:53:25 jongfoster Optimize away a function call by using an equivalent macro

Revision 1.48 2002/04/05 00:56:09 gliptak Correcting typo to clean up on realloc failure

Revision 1.47 2002/03/26 22:29:55 swa we have a new homepage!

Revision 1.46 2002/03/24 13:25:43 swa name change related issues

Revision 1.45 2002/03/16 23:54:06 jongfoster Adding graceful termination feature, to help look for memory leaks. If you enable this (which, by design, has to be done by hand editing config.h) and then go to http://i.j.b/die, then the program will exit cleanly after the *next* request. It should free all the memory that was used.

Revision 1.44 2002/03/16 21:51:00 jongfoster Fixing free(NULL).

Revision 1.43 2002/03/16 20:28:34 oes Added descriptions to the filters so users will know what they select in the cgi editor

Revision 1.42 2002/03/13 00:27:05 jongfoster Killing warnings

Revision 1.41 2002/03/12 01:42:50 oes Introduced modular filters

Revision 1.40 2002/03/08 17:46:04 jongfoster Fixing int/size_t warnings

Revision 1.39 2002/03/07 03:46:17 oes Fixed compiler warnings

Revision 1.38 2002/03/06 22:54:35 jongfoster Automated function-comment nitpicking.

Revision 1.37 2002/03/03 15:07:49 oes Re-enabled automatic config reloading

Revision 1.36 2002/01/22 23:46:18 jongfoster Moving edit_read_line() and simple_read_line() to loaders.c, and extending them to support reading MS-DOS, Mac and UNIX style files on all platforms.

Modifying read_config_line() (without changing it's prototype) to be a trivial wrapper for edit_read_line(). This means that we have one function to read a line and handle comments, which is common between the initialization code and the edit interface.

Revision 1.35 2002/01/17 21:03:08 jongfoster Moving all our URL and URL pattern parsing code to urlmatch.c.

Renaming free_url to free_url_spec, since it frees a struct url_spec.

Revision 1.34 2001/12/30 14:07:32 steudten

Revision 1.33 2001/11/13 00:16:38 jongfoster Replacing references to malloc.h with the standard stdlib.h (See ANSI or K&R 2nd Ed)

Revision 1.32 2001/11/07 00:02:13 steudten Add line number in error output for lineparsing for actionsfile and configfile. Special handling for CLF added.

Revision 1.31 2001/10/26 17:39:01 oes Removed csp->referrer Moved ijb_isspace and ijb_tolower to project.h

Revision 1.30 2001/10/25 03:40:48 david__schmidt Change in porting tactics: OS/2's EMX porting layer doesn't allow multiple threads to call select() simultaneously. So, it's time to do a real, live, native OS/2 port. See defines for __EMX__ (the porting layer) vs. __OS2__ (native). Both versions will work, but using __OS2__ offers multi-threading.

Revision 1.29 2001/10/23 21:38:53 jongfoster Adding error-checking to create_url_spec()

Revision 1.28 2001/10/07 15:40:39 oes Replaced 6 boolean members of csp with one bitmap (csp->flags)

Revision 1.27 2001/09/22 16:36:59 jongfoster Removing unused parameter fs from read_config_line()

Revision 1.26 2001/09/22 14:05:22 jongfoster Bugfix: Multiple escaped "#" characters in a configuration file are now permitted. Also removing 3 unused headers.

Revision 1.25 2001/09/13 22:44:03 jongfoster Adding {} to an if statement

Revision 1.24 2001/07/30 22:08:36 jongfoster Tidying up defines:

Revision 1.23 2001/07/20 15:51:54 oes Fixed indentation of prepocessor commands

Revision 1.22 2001/07/20 15:16:17 haroon

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)

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

Revision 1.15 2001/06/07 23:14:14 jongfoster Removing ACL and forward file loaders - these files have been merged into the config file. Cosmetic: Moving unloader funcs next to their respective loader funcs

Revision 1.14 2001/06/01 03:27:04 oes Fixed line continuation problem

Revision 1.13 2001/05/31 21:28:49 jongfoster Removed all permissionsfile code - it's now called the actions file, and (almost) all the code is in actions.c

Revision 1.12 2001/05/31 17:32:31 oes

Revision 1.11 2001/05/29 23:25:24 oes

Revision 1.10 2001/05/29 09:50:24 jongfoster Unified blocklist/imagelist/permissionslist. File format is still under discussion, but the internal changes are (mostly) done.

Also modified interceptor behaviour:

Revision 1.9 2001/05/26 17:12:07 jongfoster Fatal errors loading configuration files now give better error messages.

Revision 1.8 2001/05/26 00:55:20 jongfoster Removing duplicated code. load_forwardfile() now uses create_url_spec()

Revision 1.7 2001/05/26 00:28:36 jongfoster Automatic reloading of config file. Removed obsolete SIGHUP support (Unix) and Reload menu option (Win32). Most of the global variables have been moved to a new struct configuration_spec, accessed through csp->config->globalname Most of the globals remaining are used by the Win32 GUI.

Revision 1.6 2001/05/23 12:27:33 oes

Fixed ugly indentation of my last changes

Revision 1.5 2001/05/23 10:39:05 oes

Revision 1.4 2001/05/22 18:56:28 oes CRLF -> LF

Revision 1.3 2001/05/20 01:21:20 jongfoster Version 2.9.4 checkin.

Revision 1.2 2001/05/17 23:01:01 oes Revision 1.1.1.1 2001/05/15 13:58:59 oes Initial import of version 2.9.3 source tree


Define Documentation

#define CHAR_CR   '\r'
 

Character code for CR (ASCII 13).

If you have a wierd compiler and this definition is incorrect, you also need to fix NEWLINE() in loaders.h

#define CHAR_LF   '\n'
 

Character code for LF (ASCII 10).

If you have a wierd compiler and this definition is incorrect, you also need to fix NEWLINE() in loaders.h


Function Documentation

void add_loader int(*    loader)(struct client_state *),
struct configuration_spec   config
 

Called from `load_config'.

Called once for each input file found in config.

Parameters:
loader  pointer to a function that can parse and load the appropriate config file.
config  The configuration_spec to add the loader to.
Returns:
N/A

int check_file_changed const struct file_list   current,
const char *    filename,
struct file_list **    newfl
 

Helper function to check if a file needs reloading.

If "current" is still current, return it. Otherwise allocates a new (zeroed) "struct file_list", fills in the disk file name and timestamp, and returns it.

Parameters:
current  The file_list currently being used - will be checked to see if it is out of date. May be NULL (which is treated as out of date).
filename  Name of file to check.
newfl  New file list. [Output only] This will be set to NULL, OR a struct file_list newly allocated on the heap, with the filename and lastmodified fields filled, and all others zeroed.
Returns:
If file unchanged: 0 (and sets newfl == NULL) If file changed: 1 and sets newfl != NULL On error: 1 and sets newfl == NULL

jb_err edit_read_line FILE *    fp,
char **    raw_out,
char **    prefix_out,
char **    data_out,
int *    newline,
unsigned long *    line_number
 

Read a single non-empty line from a file and return it.

Trims comments, leading and trailing whitespace and respects escaping of newline and comment char. Provides the line in 2 alternative forms: raw and preprocessed.

  • raw is the raw data read from the file. If the line is not modified, then this should be written to the new file.
  • prefix is any comments and blank lines that were read from the file. If the line is modified, then this should be written out to the file followed by the modified data. (If this string is non-empty then it will have a newline at the end).
  • data is the actual data that will be parsed further by appropriate routines. On EOF, the 3 strings will all be set to NULL and 0 will be returned.
Parameters:
fp  File to read from
raw_out  destination for newly malloc'd pointer to raw line data. May be NULL if you don't want it.
prefix_out  destination for newly malloc'd pointer to comments. May be NULL if you don't want it.
data_out  destination for newly malloc'd pointer to line data with comments and leading/trailing spaces removed, and line continuation performed. May be NULL if you don't want it.
newline  Standard for newlines in the file. On input, set to value to use or NEWLINE_UNKNOWN. On output, may be changed from NEWLINE_UNKNOWN to actual convention in file. May be NULL if you don't want it.
line_number  Line number in file. In "lines" as reported by a text editor, not lines containing data.
Returns:
JB_ERR_OK on success JB_ERR_MEMORY on out-of-memory JB_ERR_FILE on EOF.

int load_re_filterfile struct client_state   csp
 

Load the re_filterfile.

Generate a chained list of re_filterfile_spec's from the "FILTER: " blocks, compiling all their substitutions into chained lists of pcrs_job structs.

Parameters:
csp  Current client state (buffers, headers, etc...)
Returns:
0 => Ok, everything else is an error.

char* read_config_line char *    buf,
size_t    buflen,
FILE *    fp,
unsigned long *    linenum
 

Read a single non-empty line from a file and return it.

Trims comments, leading and trailing whitespace and respects escaping of newline and comment char.

Parameters:
buf  Buffer to use.
buflen  Size of buffer in bytes.
fp  File to read from
linenum  linenumber in file
Returns:
NULL on EOF or error Otherwise, returns buf.

int run_loader struct client_state   csp
 

Called from `load_config' and `listen_loop'.

This function keeps the "csp" current with any file mods since the last loop. If a file is unchanged, the loader functions do NOT reload the file.

Parameters:
csp  Current client state (buffers, headers, etc...) Must be non-null. Reads: "csp->config"

Writes various data members.

Returns:
0 => Ok, everything else is an error.

jb_err simple_read_line FILE *    fp,
char **    dest,
int *    newline
 

Read a single line from a file and return it.

This is basically a version of fgets() that malloc()s it's own line buffer. Note that the buffer will always be a multiple of BUFFER_SIZE bytes long. Therefore if you are going to keep the string for an extended period of time, you should probably strdup() it and free() the original, to save memory.

Parameters:
dest  destination for newly malloc'd pointer to line data. Will be set to NULL on error.
fp  File to read from
newline  Standard for newlines in the file. Will be unchanged if it's value on input is not NEWLINE_UNKNOWN. On output, may be changed from NEWLINE_UNKNOWN to actual convention in file.
Returns:
JB_ERR_OK on success JB_ERR_MEMORY on out-of-memory JB_ERR_FILE on EOF.

void sweep void   
 

Basically a mark and sweep garbage collector, it is run (by the parent thread) every once in a while to reclaim memory.

It uses a mark and sweep strategy: 1) mark all files as inactive 2) check with each client: if it is active, mark its files as active if it is inactive, free its resources 3) free the resources of all of the files that are still marked as inactive (and are obsolete). N.B. files that are not obsolete don't have an unloader defined.

Returns:
N/A

void unload_re_filterfile void *    f [static]
 

Unload the re_filter list by freeing all chained re_filterfile specs and their data.

Parameters:
f  the data structure associated with the filterfile.
Returns:
N/A


Variable Documentation

struct file_list* current_re_filterfile = NULL [static]
 

Currently active re_filter file.

This is also entered in the main linked list of files.

const char loaders_h_rcs[] = LOADERS_H_VERSION
 

Version information about loaders.h.

const char loaders_rcs[] = "$Id: loaders.c,v 2.1 2002/06/04 17:22:37 jongfoster Exp $"
 

Version information about loaders.c.


Generated on Tue Jun 4 18:54:49 2002 for Privoxy 3.1.1 by doxygen1.2.15