X-MimeOLE: Produced By Microsoft Exchange V6.5
Received: by onstor-exch02.onstor.net 
	id <01C7722E.EB6F2D8D@onstor-exch02.onstor.net>; Thu, 29 Mar 2007 11:20:24 -0700
MIME-Version: 1.0
Content-Type: multipart/alternative;
	boundary="----_=_NextPart_001_01C7722E.EB6F2D8D"
Content-class: urn:content-classes:message
Subject: printf style functions
Date: Thu, 29 Mar 2007 11:20:24 -0700
Message-ID: <BB375AF679D4A34E9CA8DFA650E2B04E03112217@onstor-exch02.onstor.net>
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
Thread-Topic: printf style functions
Thread-Index: AcddJuOs7+K8VX3kR6a2GRxifcZCpQVB/W6w
From: "Tim Gardner" <tim.gardner@onstor.com>
To: "dl-Software" <dl-software@onstor.com>

This is a multi-part message in MIME format.

------_=_NextPart_001_01C7722E.EB6F2D8D
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable



_____________________________________________
From: Jonathan Goldick=20
Sent: Friday, March 02, 2007 4:00 PM
To: Brian DeForest; Tim Gardner; Jay Michlin
Subject: Delorean task

We should do this ASAP as it's easy and a cheap way to find bugs.

On every function in the system that takes a printf-style set of
arguments we should add the directive=20

See the example:

#ifdef __GNUC__
char *e_log_var_pa (char *format, ...) __attribute__ ((format (printf,
1, 2)));
#else
char *e_log_var_pa (char *format, ...);
#endif


This will cause the compiler to very that our logging and tracing
statements are legal so we don't crash as much in the field on code
paths we have never reached before.  This is a simple task and yields
rapid fruit, as seen by Jobi when I made him do this for his tracing.


------_=_NextPart_001_01C7722E.EB6F2D8D
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Dus-ascii">
<META NAME=3D"Generator" CONTENT=3D"MS Exchange Server version =
6.5.7652.24">
<TITLE>printf style functions</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->
<BR>
<BR>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT =
SIZE=3D2>_____________________________________________<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B></B></SPAN><B><SPAN LANG=3D"en-us"><FONT =
SIZE=3D2>From:</FONT></SPAN></B><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT SIZE=3D2> Jonathan =
Goldick<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B></B></SPAN><B><SPAN LANG=3D"en-us"><FONT =
SIZE=3D2>Sent:</FONT></SPAN></B><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT SIZE=3D2> Friday, March =
02, 2007 4:00 PM<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B></B></SPAN><B><SPAN LANG=3D"en-us"><FONT =
SIZE=3D2>To:</FONT></SPAN></B><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT SIZE=3D2> Brian =
DeForest; Tim Gardner; Jay Michlin<BR>
</FONT></SPAN><SPAN LANG=3D"en-us"><B></B></SPAN><SPAN =
LANG=3D"en-us"><B></B></SPAN><B><SPAN LANG=3D"en-us"><FONT =
SIZE=3D2>Subject:</FONT></SPAN></B><SPAN LANG=3D"en-us"></SPAN><SPAN =
LANG=3D"en-us"></SPAN><SPAN LANG=3D"en-us"><FONT SIZE=3D2> Delorean =
task</FONT></SPAN><SPAN LANG=3D"en-us"></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Arial">We =
should do this ASAP as it</FONT><FONT SIZE=3D2 =
FACE=3D"Arial">&#8217;</FONT><FONT SIZE=3D2 FACE=3D"Arial">s easy and a =
cheap way to find bugs.</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Arial">On =
every function in the system that takes a p</FONT><FONT SIZE=3D2 =
FACE=3D"Arial">rintf-style set of arguments we should add the directive =
</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Arial">See =
the example:</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"fr"><FONT SIZE=3D2 FACE=3D"Arial">#ifdef =
__GNUC__</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"fr"><FONT SIZE=3D2 FACE=3D"Arial">char =
*e_log_var_pa (char *format, ...) __attribute__ ((format (printf, 1, =
2)));</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Arial">#else</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Arial">char =
*e_log_var_pa (char *format, ...);</FONT></SPAN></P>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 =
FACE=3D"Arial">#endif</FONT></SPAN></P>
<BR>

<P ALIGN=3DLEFT><SPAN LANG=3D"en-us"><FONT SIZE=3D2 FACE=3D"Arial">This =
will cause the compiler to very that our logging and tracing statements =
are legal so we don</FONT><FONT SIZE=3D2 =
FACE=3D"Arial">&#8217;</FONT><FONT SIZE=3D2 FACE=3D"Arial">t crash as =
much in the field on code paths we have never reached before.&nbsp; This =
is a simple task and yields rapid fruit, as seen by Jobi when I made him =
do thi</FONT><FONT SIZE=3D2 FACE=3D"Arial">s</FONT><FONT SIZE=3D2 =
FACE=3D"Arial"> for his tracing.</FONT></SPAN></P>

</BODY>
</HTML>
------_=_NextPart_001_01C7722E.EB6F2D8D--
