<!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 >