Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
- <meta name="generator" content="HTML Tidy, see www.w3.org">
<title>
Coding Guidelines
</title>
<link rel="NEXT" title="Testing Guidelines" href="testing.html">
<link rel="STYLESHEET" type="text/css" href="../p_doc.css">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<style type="text/css">
- body {
- background-color: #EEEEEE;
- color: #000000;
- }
- :link { color: #0000FF }
- :visited { color: #840084 }
- :active { color: #0000FF }
- hr.c1 {text-align: left}
-</style>
</head>
- <body class="SECT1">
+ <body class="SECT1" bgcolor="#EEEEEE" text="#000000" link="#0000FF" vlink=
+ "#840084" alink="#0000FF">
<div class="NAVHEADER">
<table summary="Header navigation table" width="100%" border="0"
cellpadding="0" cellspacing="0">
</td>
</tr>
</table>
- <hr width="100%" class="c1">
+ <hr align="LEFT" width="100%">
</div>
<div class="SECT1">
<h1 class="SECT1">
understand why or what is being done. A reader may spend a lot
more time figuring out what is going on when a simple comment or
explanation would have prevented the extra research. Please help
- your brother IJB'ers out!
+ your fellow Privoxy developers out!
</p>
<p>
The comments will also help justify the intent of the code. If
<td>
<pre class="PROGRAMLISTING">
/* if page size greater than 1k ... */
-if ( page_length() > 1024 )
+if (page_length() > 1024)
{
... "block" the page up ...
}
/* if page size is small, send it in blocks */
-if ( page_length() > 1024 )
+if (page_length() > 1024)
{
... "block" the page up ...
}
/*********************************************************************
* This will stand out clearly in your code!
*********************************************************************/
-if ( this_variable == that_variable )
+if (this_variable == that_variable)
{
do_something_very_important();
}
/* unfortunately, this may not */
-if ( this_variable == that_variable )
+if (this_variable == that_variable)
{
do_something_very_important();
}
-if ( this_variable == that_variable ) /* this may not either */
+if (this_variable == that_variable) /* this may not either */
{
do_something_very_important();
}
* This will stand out clearly in your code,
* But the second example won't.
*********************************************************************/
-if ( this_variable == this_variable )
+if (this_variable == this_variable)
{
do_something_very_important();
}
-if ( this_variable == this_variable ) /*can you see me?*/
+if (this_variable == this_variable) /*can you see me?*/
{
do_something_very_important(); /*not easily*/
}
int urls_read = 0; /* # of urls read + rejected */
int urls_rejected = 0; /* # of urls rejected */
-if ( 1 == X )
+if (1 == X)
{
do_something_very_important();
}
<tr>
<td>
<pre class="PROGRAMLISTING">
-if ( 1 == X )
+if (1 == X)
{
do_something_very_important();
...some long list of commands...
or:
-if ( 1 == X )
+if (1 == X)
{
do_something_very_important();
...some long list of commands...
-} /* -END- if ( 1 == X ) */
+} /* -END- if (1 == X) */
</pre>
</td>
</tr>
<tr>
<td>
<pre class="PROGRAMLISTING">
-int load_some_file( struct client_state *csp )
+int load_some_file(struct client_state *csp)
</pre>
</td>
</tr>
<tr>
<td>
<pre class="PROGRAMLISTING">
-int loadsomefile( struct client_state *csp )
-int loadSomeFile( struct client_state *csp )
+int loadsomefile(struct client_state *csp)
+int loadSomeFile(struct client_state *csp)
</pre>
</td>
</tr>
<tr>
<td>
<pre class="PROGRAMLISTING">
-(.h) extern int load_aclfile( struct client_state *csp );
-(.c) int load_aclfile( struct client_state *csp )
+(.h) extern int load_aclfile(struct client_state *csp);
+(.c) int load_aclfile(struct client_state *csp)
</pre>
</td>
</tr>
<tr>
<td>
<pre class="PROGRAMLISTING">
-(.h) extern int load_aclfile( struct client_state * ); or
+(.h) extern int load_aclfile(struct client_state *); or
(.h) extern int load_aclfile();
-(.c) int load_aclfile( struct client_state *csp )
+(.c) int load_aclfile(struct client_state *csp)
</pre>
</td>
</tr>
<tr>
<td>
<pre class="PROGRAMLISTING">
-(enumeration) : enum Boolean { FALSE, TRUE };
+(enumeration) : enum Boolean {FALSE, TRUE};
(#define) : #define DEFAULT_SIZE 100;
</pre>
</td>
<tr>
<td>
<pre class="PROGRAMLISTING">
-if ( this == that )
+if (this == that)
{
...
}
<span class="emphasis"><i class="EMPHASIS">Instead of:</i></span>
</p>
<p>
- if ( this == that ) { ... }
+ if (this == that) { ... }
</p>
<p>
or
</p>
<p>
- if ( this == that ) { ... }
+ if (this == that) { ... }
</p>
<p>
<span class="emphasis"><i class="EMPHASIS">Note:</i></span> In
<tr>
<td>
<pre class="PROGRAMLISTING">
-while ( more lines are read )
+while (more lines are read)
{
/* Please document what is/is not a comment line here */
- if ( it's a comment ) continue;
+ if (it's a comment) continue;
- do_something( line );
+ do_something(line);
}
</pre>
</td>
<tr>
<td>
<pre class="PROGRAMLISTING">
-if ( this == that )
+if (this == that)
{
do_something();
do_something_else();
<span class="emphasis"><i class="EMPHASIS">Instead of:</i></span>
</p>
<p>
- if ( this == that ) do_something(); do_something_else();
+ if (this == that) do_something(); do_something_else();
</p>
<p>
or
</p>
<p>
- if ( this == that ) do_something();
+ if (this == that) do_something();
</p>
<p>
<span class="emphasis"><i class="EMPHASIS">Note:</i></span> The
<tr>
<td>
<pre class="PROGRAMLISTING">
-structure->flag = ( condition );
+structure->flag = (condition);
</pre>
</td>
</tr>
<span class="emphasis"><i class="EMPHASIS">Instead of:</i></span>
</p>
<p>
- if ( condition ) { structure->flag = 1; } else {
+ if (condition) { structure->flag = 1; } else {
structure->flag = 0; }
</p>
<p>
int some_value = 0;
int another_value = 0;
int this_variable = 0;
-
-if ( this_variable == this_variable )
-
-first_value = old_value + ( ( some_value - another_value ) - whatever )
</pre>
</td>
</tr>
int function1( ... )
{
...code...
- return( ret_code );
+ return(ret_code);
-} /* -END- function1 */
+} /* -END- function1 */
int function2( ... )
{
-} /* -END- function2 */
+} /* -END- function2 */
</pre>
</td>
</tr>
<span class="emphasis"><i class="EMPHASIS">Instead of:</i></span>
</p>
<p>
- int function1( ... ) { ...code... return( ret_code ); } int
+ int function1( ... ) { ...code... return(ret_code); } int
function2( ... ) { }
</p>
<p>
int function1( ... )
{
- if ( 1 )
+ if (1)
{
- return( ALWAYS_TRUE );
+ return ALWAYS_TRUE;
}
else
{
- return( HOW_DID_YOU_GET_HERE );
+ return HOW_DID_YOU_GET_HERE;
}
- return( NEVER_GETS_HERE );
+ return NEVER_GETS_HERE;
}
</pre>
<tr>
<td>
<pre class="PROGRAMLISTING">
-for ( size_t cnt = 0; cnt < block_list_length(); cnt++ )
+for (size_t cnt = 0; cnt < block_list_length(); cnt++)
{
....
}
<pre class="PROGRAMLISTING">
size_t len = block_list_length();
-for ( size_t cnt = 0; cnt < len; cnt++ )
+for (size_t cnt = 0; cnt < len; cnt++)
{
....
}
This allows a developer to define a const pointer and call your
function. If your function does not have the const keyword, we
may not be able to use your function. Consider strcmp, if it were
- defined as: extern int strcmp( char *s1, char *s2 );
+ defined as: extern int strcmp(char *s1, char *s2);
</p>
<p>
- I could then not use it to compare argv's in main: int main( int
- argc, const char *argv[] ) { strcmp( argv[0], "privoxy" ); }
+ I could then not use it to compare argv's in main: int main(int
+ argc, const char *argv[]) { strcmp(argv[0], "privoxy"); }
</p>
<p>
Both these pointers are *const*! If the c runtime library
<p>
Most structures cannot fit onto a normal stack entry (i.e. they
are not 4 bytes or less). Aka, a function declaration like: int
- load_aclfile( struct client_state csp )
+ load_aclfile(struct client_state csp)
</p>
<p>
would not work. So, to be consistent, we should declare all
- prototypes with "pass by value": int load_aclfile( struct
- client_state *csp )
+ prototypes with "pass by value": int load_aclfile(struct
+ client_state *csp)
</p>
</div>
<div class="SECT3">
<tr>
<td>
<pre class="PROGRAMLISTING">
-switch( hash_string( cmd ) )
+switch (hash_string(cmd))
{
- case hash_actions_file :
+ case hash_actions_file:
... code ...
break;
- case hash_confdir :
+ case hash_confdir:
... code ...
break;
- default :
+ default:
log_error( ... );
... anomaly code goes here ...
continue; / break; / exit( 1 ); / etc ...
-} /* end switch( hash_string( cmd ) ) */
+} /* end switch (hash_string(cmd)) */
</pre>
</td>
</tr>
</div>
<div class="SECT3">
<h3 class="SECT3">
- <a name="S39">4.7.4. Use 'long' or 'short' Instead of 'int'</a>
- </h3>
- <p>
- <span class="emphasis"><i class=
- "EMPHASIS">Explanation:</i></span>
- </p>
- <p>
- On 32-bit platforms, int usually has the range of long. On 16-bit
- platforms, int has the range of short.
- </p>
- <p>
- <span class="emphasis"><i class="EMPHASIS">Status:</i></span>
- open-to-debate. In the case of most FSF projects (including
- X/GNU-Emacs), there are typedefs to int4, int8, int16, (or
- equivalence ... I forget the exact typedefs now). Should we add
- these to IJB now that we have a "configure" script?
- </p>
- </div>
- <div class="SECT3">
- <h3 class="SECT3">
- <a name="S40">4.7.5. Don't mix size_t and other types</a>
+ <a name="S40">4.7.4. Don't mix size_t and other types</a>
</h3>
<p>
<span class="emphasis"><i class=
</div>
<div class="SECT3">
<h3 class="SECT3">
- <a name="S41">4.7.6. Declare each variable and struct on its own
+ <a name="S41">4.7.5. Declare each variable and struct on its own
line.</a>
</h3>
<p>
</div>
<div class="SECT3">
<h3 class="SECT3">
- <a name="S42">4.7.7. Use malloc/zalloc sparingly</a>
+ <a name="S42">4.7.6. Use malloc/zalloc sparingly</a>
</h3>
<p>
<span class="emphasis"><i class=
</div>
<div class="SECT3">
<h3 class="SECT3">
- <a name="S43">4.7.8. The Programmer Who Uses 'malloc' is
+ <a name="S43">4.7.7. The Programmer Who Uses 'malloc' is
Responsible for Ensuring 'free'</a>
</h3>
<p>
<tr>
<td>
<pre class="PROGRAMLISTING">
-int load_re_filterfile( struct client_state *csp ) { ... }
-static void unload_re_filterfile( void *f ) { ... }
+int load_re_filterfile(struct client_state *csp) { ... }
+static void unload_re_filterfile(void *f) { ... }
</pre>
</td>
</tr>
</div>
<div class="SECT3">
<h3 class="SECT3">
- <a name="S44">4.7.9. Add loaders to the `file_list' structure and
+ <a name="S44">4.7.8. Add loaders to the `file_list' structure and
in order</a>
</h3>
<p>
</div>
<div class="SECT3">
<h3 class="SECT3">
- <a name="S45">4.7.10. "Uncertain" new code and/or changes to
- existing code, use FIXME or XXX</a>
+ <a name="S45">4.7.9. "Uncertain" new code and/or changes to
+ existing code, use XXX</a>
</h3>
<p>
<span class="emphasis"><i class=
changes, but are not *quite* sure of the repercussions, add this:
</p>
<p>
- /* FIXME: this code has a logic error on platform XYZ, *
- attempting to fix */ #ifdef PLATFORM ...changed code here...
- #endif
+ /* XXX: this code has a logic error on platform XYZ, * attempting
+ to fix */ #ifdef PLATFORM ...changed code here... #endif
</p>
<p>
or:
</p>
<p>
- /* FIXME: I think the original author really meant this... */
+ /* XXX: I think the original author really meant this... */
...changed code here...
</p>
<p>
or:
</p>
<p>
- /* FIXME: new code that *may* break something else... */ ...new
+ /* XXX: new code that *may* break something else... */ ...new
code here...
</p>
<p>
<tr>
<td>
<pre class="PROGRAMLISTING">
-const char FILENAME_rcs[] = "$Id: coding.html,v 1.54 2010/11/13 12:50:18 fabiankeil Exp $";
+const char FILENAME_rcs[] = "$I<!-- Break CVS Substitution -->d$";
/*********************************************************************
*
- * File : $Source: /cvsroot/ijbswa/current/doc/webserver/developer-manual/coding.html,v $
+ * File : $S<!-- Break CVS Substitution -->ource$
*
* Purpose : (Fill me in with a good description!)
*
* Copyright : Written by and Copyright (C) 2001-2009
- * the Privoxy team. http://www.privoxy.org/
+ * the Privoxy team. https://www.privoxy.org/
*
* This program is free software; you can redistribute it
* and/or modify it under the terms of the GNU General
<pre class="PROGRAMLISTING">
#ifndef _FILENAME_H
#define _FILENAME_H
-#define FILENAME_H_VERSION "$Id: coding.html,v 1.54 2010/11/13 12:50:18 fabiankeil Exp $"
+#define FILENAME_H_VERSION "$I<!-- Break CVS Substitution -->d$"
/*********************************************************************
*
- * File : $Source: /cvsroot/ijbswa/current/doc/webserver/developer-manual/coding.html,v $
+ * File : $S<!-- Break CVS Substitution -->ource$
*
* Purpose : (Fill me in with a good description!)
*
* Copyright : Written by and Copyright (C) 2001-2009
- * the Privoxy team. http://www.privoxy.org/
+ * the Privoxy team. https://www.privoxy.org/
*
* This program is free software; you can redistribute it
* and/or modify it under the terms of the GNU General
* Returns : 0 => Ok, everything else is an error.
*
*********************************************************************/
-int FUNCTION_NAME( void *param1, const char *x )
+int FUNCTION_NAME(void *param1, const char *x)
{
...
- return( 0 );
+ return 0;
}
</pre>
</div>
</div>
<div class="NAVFOOTER">
- <hr width="100%" class="c1">
+ <hr align="LEFT" width="100%">
<table summary="Footer navigation table" width="100%" border="0"
cellpadding="0" cellspacing="0">
<tr>