688 lines
9.9 KiB
HTML
688 lines
9.9 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
|
|
<HTML
|
|
><HEAD
|
|
><TITLE
|
|
>Privoxy Developer Manual</TITLE
|
|
><META
|
|
NAME="GENERATOR"
|
|
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
|
|
REL="NEXT"
|
|
TITLE="Introduction"
|
|
HREF="introduction.html"><LINK
|
|
REL="STYLESHEET"
|
|
TYPE="text/css"
|
|
HREF="../p_doc.css"><META
|
|
HTTP-EQUIV="Content-Type"
|
|
CONTENT="text/html;
|
|
charset=ISO-8859-1"></HEAD
|
|
><BODY
|
|
CLASS="ARTICLE"
|
|
BGCOLOR="#EEEEEE"
|
|
TEXT="#000000"
|
|
LINK="#0000FF"
|
|
VLINK="#840084"
|
|
ALINK="#0000FF"
|
|
><DIV
|
|
CLASS="ARTICLE"
|
|
><DIV
|
|
CLASS="TITLEPAGE"
|
|
><H1
|
|
CLASS="TITLE"
|
|
><A
|
|
NAME="AEN2"
|
|
>Privoxy Developer Manual</A
|
|
></H1
|
|
><P
|
|
CLASS="PUBDATE"
|
|
> <SUB
|
|
>
|
|
|
|
<A
|
|
HREF="copyright.html"
|
|
>Copyright</A
|
|
> © 2001-2009 by
|
|
<A
|
|
HREF="http://www.privoxy.org/"
|
|
TARGET="_top"
|
|
>Privoxy Developers</A
|
|
>
|
|
</SUB
|
|
>
|
|
<BR></P
|
|
><P
|
|
CLASS="PUBDATE"
|
|
>$Id: index.html,v 1.42 2009/03/21 12:59:32 fabiankeil Exp $<BR></P
|
|
><DIV
|
|
><DIV
|
|
CLASS="ABSTRACT"
|
|
><P
|
|
></P
|
|
><A
|
|
NAME="AEN9"
|
|
></A
|
|
><P
|
|
> The developer manual provides guidance on coding, testing, packaging, documentation
|
|
and other issues of importance to those involved with
|
|
<SPAN
|
|
CLASS="APPLICATION"
|
|
>Privoxy</SPAN
|
|
> development. It is mandatory (and helpful!) reading
|
|
for anyone who wants to join the team. Note that it's currently out of date
|
|
and may not be entirely correct. As always, patches are welcome.</P
|
|
><P
|
|
> Please note that this document is constantly evolving. This copy represents
|
|
the state at the release of version 3.0.12.
|
|
You can find the latest version of the this manual at <A
|
|
HREF="http://www.privoxy.org/developer-manual/"
|
|
TARGET="_top"
|
|
>http://www.privoxy.org/developer-manual/</A
|
|
>.
|
|
Please see <A
|
|
HREF="contact.html"
|
|
>the Contact section</A
|
|
>
|
|
on how to contact the developers.</P
|
|
><P
|
|
></P
|
|
></DIV
|
|
></DIV
|
|
><HR></DIV
|
|
><DIV
|
|
CLASS="TOC"
|
|
><DL
|
|
><DT
|
|
><B
|
|
>Table of Contents</B
|
|
></DT
|
|
><DT
|
|
>1. <A
|
|
HREF="introduction.html"
|
|
>Introduction</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>1.1. <A
|
|
HREF="introduction.html#QUICKSTART"
|
|
>Quickstart to Privoxy Development</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>2. <A
|
|
HREF="cvs.html"
|
|
>The CVS Repository</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>2.1. <A
|
|
HREF="cvs.html#CVSACCESS"
|
|
>Access to CVS</A
|
|
></DT
|
|
><DT
|
|
>2.2. <A
|
|
HREF="cvs.html#CVSBRANCHES"
|
|
>Branches</A
|
|
></DT
|
|
><DT
|
|
>2.3. <A
|
|
HREF="cvs.html#CVSCOMMIT"
|
|
>CVS Commit Guidelines</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>3. <A
|
|
HREF="documentation.html"
|
|
>Documentation Guidelines</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>3.1. <A
|
|
HREF="documentation.html#SGML"
|
|
>Quickstart to Docbook and SGML</A
|
|
></DT
|
|
><DT
|
|
>3.2. <A
|
|
HREF="documentation.html#DOCSTYLE"
|
|
><SPAN
|
|
CLASS="APPLICATION"
|
|
>Privoxy</SPAN
|
|
> Documentation Style</A
|
|
></DT
|
|
><DT
|
|
>3.3. <A
|
|
HREF="documentation.html#AEN217"
|
|
>Privoxy Custom Entities</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>4. <A
|
|
HREF="coding.html"
|
|
>Coding Guidelines</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>4.1. <A
|
|
HREF="coding.html#S1"
|
|
>Introduction</A
|
|
></DT
|
|
><DT
|
|
>4.2. <A
|
|
HREF="coding.html#S2"
|
|
>Using Comments</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>4.2.1. <A
|
|
HREF="coding.html#S3"
|
|
>Comment, Comment, Comment</A
|
|
></DT
|
|
><DT
|
|
>4.2.2. <A
|
|
HREF="coding.html#S4"
|
|
>Use blocks for comments</A
|
|
></DT
|
|
><DT
|
|
>4.2.3. <A
|
|
HREF="coding.html#S5"
|
|
>Keep Comments on their own line</A
|
|
></DT
|
|
><DT
|
|
>4.2.4. <A
|
|
HREF="coding.html#S6"
|
|
>Comment each logical step</A
|
|
></DT
|
|
><DT
|
|
>4.2.5. <A
|
|
HREF="coding.html#S7"
|
|
>Comment All Functions Thoroughly</A
|
|
></DT
|
|
><DT
|
|
>4.2.6. <A
|
|
HREF="coding.html#S8"
|
|
>Comment at the end of braces if the
|
|
content is more than one screen length</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>4.3. <A
|
|
HREF="coding.html#S9"
|
|
>Naming Conventions</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>4.3.1. <A
|
|
HREF="coding.html#S10"
|
|
>Variable Names</A
|
|
></DT
|
|
><DT
|
|
>4.3.2. <A
|
|
HREF="coding.html#S11"
|
|
>Function Names</A
|
|
></DT
|
|
><DT
|
|
>4.3.3. <A
|
|
HREF="coding.html#S12"
|
|
>Header file prototypes</A
|
|
></DT
|
|
><DT
|
|
>4.3.4. <A
|
|
HREF="coding.html#S13"
|
|
>Enumerations, and #defines</A
|
|
></DT
|
|
><DT
|
|
>4.3.5. <A
|
|
HREF="coding.html#S14"
|
|
>Constants</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>4.4. <A
|
|
HREF="coding.html#S15"
|
|
>Using Space</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>4.4.1. <A
|
|
HREF="coding.html#S16"
|
|
>Put braces on a line by themselves.</A
|
|
></DT
|
|
><DT
|
|
>4.4.2. <A
|
|
HREF="coding.html#S17"
|
|
>ALL control statements should have a
|
|
block</A
|
|
></DT
|
|
><DT
|
|
>4.4.3. <A
|
|
HREF="coding.html#S18"
|
|
>Do not belabor/blow-up boolean
|
|
expressions</A
|
|
></DT
|
|
><DT
|
|
>4.4.4. <A
|
|
HREF="coding.html#S19"
|
|
>Use white space freely because it is
|
|
free</A
|
|
></DT
|
|
><DT
|
|
>4.4.5. <A
|
|
HREF="coding.html#S20"
|
|
>Don't use white space around structure
|
|
operators</A
|
|
></DT
|
|
><DT
|
|
>4.4.6. <A
|
|
HREF="coding.html#S21"
|
|
>Make the last brace of a function stand
|
|
out</A
|
|
></DT
|
|
><DT
|
|
>4.4.7. <A
|
|
HREF="coding.html#S22"
|
|
>Use 3 character indentions</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>4.5. <A
|
|
HREF="coding.html#S23"
|
|
>Initializing</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>4.5.1. <A
|
|
HREF="coding.html#S24"
|
|
>Initialize all variables</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>4.6. <A
|
|
HREF="coding.html#S25"
|
|
>Functions</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>4.6.1. <A
|
|
HREF="coding.html#S26"
|
|
>Name functions that return a boolean as a
|
|
question.</A
|
|
></DT
|
|
><DT
|
|
>4.6.2. <A
|
|
HREF="coding.html#S27"
|
|
>Always specify a return type for a
|
|
function.</A
|
|
></DT
|
|
><DT
|
|
>4.6.3. <A
|
|
HREF="coding.html#S28"
|
|
>Minimize function calls when iterating by
|
|
using variables</A
|
|
></DT
|
|
><DT
|
|
>4.6.4. <A
|
|
HREF="coding.html#S29"
|
|
>Pass and Return by Const Reference</A
|
|
></DT
|
|
><DT
|
|
>4.6.5. <A
|
|
HREF="coding.html#S30"
|
|
>Pass and Return by Value</A
|
|
></DT
|
|
><DT
|
|
>4.6.6. <A
|
|
HREF="coding.html#S31"
|
|
>Names of include files</A
|
|
></DT
|
|
><DT
|
|
>4.6.7. <A
|
|
HREF="coding.html#S32"
|
|
>Provide multiple inclusion
|
|
protection</A
|
|
></DT
|
|
><DT
|
|
>4.6.8. <A
|
|
HREF="coding.html#S33"
|
|
>Use `extern "C"` when appropriate</A
|
|
></DT
|
|
><DT
|
|
>4.6.9. <A
|
|
HREF="coding.html#S34"
|
|
>Where Possible, Use Forward Struct
|
|
Declaration Instead of Includes</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>4.7. <A
|
|
HREF="coding.html#S35"
|
|
>General Coding Practices</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>4.7.1. <A
|
|
HREF="coding.html#S36"
|
|
>Turn on warnings</A
|
|
></DT
|
|
><DT
|
|
>4.7.2. <A
|
|
HREF="coding.html#S37"
|
|
>Provide a default case for all switch
|
|
statements</A
|
|
></DT
|
|
><DT
|
|
>4.7.3. <A
|
|
HREF="coding.html#S38"
|
|
>Try to avoid falling through cases in a
|
|
switch statement.</A
|
|
></DT
|
|
><DT
|
|
>4.7.4. <A
|
|
HREF="coding.html#S39"
|
|
>Use 'long' or 'short' Instead of
|
|
'int'</A
|
|
></DT
|
|
><DT
|
|
>4.7.5. <A
|
|
HREF="coding.html#S40"
|
|
>Don't mix size_t and other types</A
|
|
></DT
|
|
><DT
|
|
>4.7.6. <A
|
|
HREF="coding.html#S41"
|
|
>Declare each variable and struct on its
|
|
own line.</A
|
|
></DT
|
|
><DT
|
|
>4.7.7. <A
|
|
HREF="coding.html#S42"
|
|
>Use malloc/zalloc sparingly</A
|
|
></DT
|
|
><DT
|
|
>4.7.8. <A
|
|
HREF="coding.html#S43"
|
|
>The Programmer Who Uses 'malloc' is
|
|
Responsible for Ensuring 'free'</A
|
|
></DT
|
|
><DT
|
|
>4.7.9. <A
|
|
HREF="coding.html#S44"
|
|
>Add loaders to the `file_list' structure
|
|
and in order</A
|
|
></DT
|
|
><DT
|
|
>4.7.10. <A
|
|
HREF="coding.html#S45"
|
|
>"Uncertain" new code and/or changes to
|
|
existing code, use FIXME or XXX</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>4.8. <A
|
|
HREF="coding.html#S46"
|
|
>Addendum: Template for files and function
|
|
comment blocks:</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>5. <A
|
|
HREF="testing.html"
|
|
>Testing Guidelines</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>5.1. <A
|
|
HREF="testing.html#TESTING-PLAN"
|
|
>Testplan for releases</A
|
|
></DT
|
|
><DT
|
|
>5.2. <A
|
|
HREF="testing.html#TESTING-REPORT"
|
|
>Test reports</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>6. <A
|
|
HREF="newrelease.html"
|
|
>Releasing a New Version</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>6.1. <A
|
|
HREF="newrelease.html#VERSIONNUMBERS"
|
|
>Version numbers</A
|
|
></DT
|
|
><DT
|
|
>6.2. <A
|
|
HREF="newrelease.html#BEFORERELEASE"
|
|
>Before the Release: Freeze</A
|
|
></DT
|
|
><DT
|
|
>6.3. <A
|
|
HREF="newrelease.html#THERELEASE"
|
|
>Building and Releasing the Packages</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>6.3.1. <A
|
|
HREF="newrelease.html#PACK-GUIDELINES"
|
|
>Note on Privoxy Packaging</A
|
|
></DT
|
|
><DT
|
|
>6.3.2. <A
|
|
HREF="newrelease.html#NEWRELEASE-TARBALL"
|
|
>Source Tarball</A
|
|
></DT
|
|
><DT
|
|
>6.3.3. <A
|
|
HREF="newrelease.html#NEWRELEASE-RPM"
|
|
>SuSE, Conectiva or Red Hat RPM</A
|
|
></DT
|
|
><DT
|
|
>6.3.4. <A
|
|
HREF="newrelease.html#NEWRELEASE-OS2"
|
|
>OS/2</A
|
|
></DT
|
|
><DT
|
|
>6.3.5. <A
|
|
HREF="newrelease.html#NEWRELEASE-SOLARIS"
|
|
>Solaris</A
|
|
></DT
|
|
><DT
|
|
>6.3.6. <A
|
|
HREF="newrelease.html#NEWRELEASE-WINDOWS"
|
|
>Windows</A
|
|
></DT
|
|
><DT
|
|
>6.3.7. <A
|
|
HREF="newrelease.html#NEWRELEASE-DEBIAN"
|
|
>Debian</A
|
|
></DT
|
|
><DT
|
|
>6.3.8. <A
|
|
HREF="newrelease.html#NEWRELEASE-MACOSX"
|
|
>Mac OS X</A
|
|
></DT
|
|
><DT
|
|
>6.3.9. <A
|
|
HREF="newrelease.html#NEWRELEASE-FREEBSD"
|
|
>FreeBSD</A
|
|
></DT
|
|
><DT
|
|
>6.3.10. <A
|
|
HREF="newrelease.html#NEWRELEASE-HPUX"
|
|
>HP-UX 11</A
|
|
></DT
|
|
><DT
|
|
>6.3.11. <A
|
|
HREF="newrelease.html#NEWRELEASE-AMIGA"
|
|
>Amiga OS</A
|
|
></DT
|
|
><DT
|
|
>6.3.12. <A
|
|
HREF="newrelease.html#NEWRELEASE-AIX"
|
|
>AIX</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>6.4. <A
|
|
HREF="newrelease.html#RELEASING"
|
|
>Uploading and Releasing Your Package</A
|
|
></DT
|
|
><DT
|
|
>6.5. <A
|
|
HREF="newrelease.html#AFTERRELEASE"
|
|
>After the Release</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>7. <A
|
|
HREF="webserver-update.html"
|
|
>Update the Webserver</A
|
|
></DT
|
|
><DT
|
|
>8. <A
|
|
HREF="contact.html"
|
|
>Contacting the developers, Bug Reporting and Feature Requests</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>8.1. <A
|
|
HREF="contact.html#CONTACT-SUPPORT"
|
|
>Get Support</A
|
|
></DT
|
|
><DT
|
|
>8.2. <A
|
|
HREF="contact.html#REPORTING"
|
|
>Reporting Problems</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>8.2.1. <A
|
|
HREF="contact.html#CONTACT-ADS"
|
|
>Reporting Ads or Other Configuration Problems</A
|
|
></DT
|
|
><DT
|
|
>8.2.2. <A
|
|
HREF="contact.html#CONTACT-BUGS"
|
|
>Reporting Bugs</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>8.3. <A
|
|
HREF="contact.html#CONTACT-FEATURE"
|
|
>Request New Features</A
|
|
></DT
|
|
><DT
|
|
>8.4. <A
|
|
HREF="contact.html#CONTACT-OTHER"
|
|
>Other</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>9. <A
|
|
HREF="copyright.html"
|
|
>Privoxy Copyright, License and History</A
|
|
></DT
|
|
><DD
|
|
><DL
|
|
><DT
|
|
>9.1. <A
|
|
HREF="copyright.html#AEN1223"
|
|
>License</A
|
|
></DT
|
|
><DT
|
|
>9.2. <A
|
|
HREF="copyright.html#AEN1239"
|
|
>History</A
|
|
></DT
|
|
></DL
|
|
></DD
|
|
><DT
|
|
>10. <A
|
|
HREF="seealso.html"
|
|
>See also</A
|
|
></DT
|
|
></DL
|
|
></DIV
|
|
></DIV
|
|
><DIV
|
|
CLASS="NAVFOOTER"
|
|
><HR
|
|
ALIGN="LEFT"
|
|
WIDTH="100%"><TABLE
|
|
SUMMARY="Footer navigation table"
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
CELLPADDING="0"
|
|
CELLSPACING="0"
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
> </TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
> </TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="introduction.html"
|
|
ACCESSKEY="N"
|
|
>Next</A
|
|
></TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
> </TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
> </TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
>Introduction</TD
|
|
></TR
|
|
></TABLE
|
|
></DIV
|
|
></BODY
|
|
></HTML
|
|
> |