On Thu, Apr 16, 2009 at 12:16:43AM -0700, Ira Weiny wrote:
> Ok, v2 has a couple of changes.
> 
>    1) implements the mad_vsnprintf with vsnprintf.
>    2) change formatting char to 'm' since "F" is floating point
>    3) add 'M' for printing the "name" of the field specified.
> 
> The reason I did not use vsnprintf before was because of this statement in the
> vsnprintf man page.
> 
>        The functions vprintf(), vfprintf(), vsprintf(), vsnprintf() are equiv-
>        alent  to  the  functions  printf(),  fprintf(), sprintf(), snprintf(),
>        respectively, except that they are called with a va_list instead  of  a
>        variable  number  of  arguments. These functions do not call the va_end
>        macro. Consequently, the value of ap is undefined after the  call.  The
>               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>        application should call va_end(ap) itself afterwards.
> 
> I have made a comment in the patch where I am unsure of the call.  This seems
> to work just fine on my Linux systems with gcc.  Will this work on other
> systems/compilers?

The rules for va's are funny, what the above is saying is that there
is no guarentee what va_arg(ap) will return after vsnprintf. So to do
what you are trying the proper use is something like:

   va_copy(tmpva,args);
   vsnprintf(tmp,256,tf,tmpva);
   va_end(tmpva);
   va_arg(args,??);

Where it is somewhat challenging to compute ??

Relying on vsnprintf to advance args by exactly one is not portable.

Jason
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to