AWARE SYSTEMS
TIFF and LibTiff Mail List Archive

Thread

2007.05.04 11:51 "[Tiff] TIFFSetField and float values", by mikk
2007.05.04 12:18 "Re: [Tiff] TIFFSetField and float values", by Andrey Kiselev
2007.05.04 12:46 "Re: [Tiff] TIFFSetField and float values", by mikk
2007.05.04 13:02 "Re: [Tiff] TIFFSetField and float values", by Joris Van Damme
2007.05.04 13:13 "Re: [Tiff] TIFFSetField and float values", by Toby Thain
2007.05.04 13:20 "Re: [Tiff] TIFFSetField and float values", by Joris Van Damme
2007.05.04 21:06 "[Tiff] TIFFSetField and float values", by mahmoudi wafa

2007.05.04 13:13 "Re: [Tiff] TIFFSetField and float values", by Toby Thain

On 4-May-07, at 10:02 AM, Joris wrote:

Oh, my, I've found the reason. Digging into the source code I realized that TIFFSetField

gets the parameter from va_arg as double:
(From tif_dir.c,v 1.72 2006/03/15 12:49:35, line 234:)
//...
case TIFFTAG_XRESOLUTION:
        td->td_xresolution = (float) va_arg(ap, double);
        break;
//...

When I pass argument of type double, the tag saves the value properly. Looks like an error in documentation (TIFFSetField.3tiff.html)?

I would agree... but I suspect other compilers may behave differently. I suspect that passing a float, as per documentation, would work for most, but passing a double will work for all.

In standard C, floats are always promoted to double in function arguments.

--Toby

> I've also tried changing the code you quote from tif_dir.c to va_arg > (ap,float), but that doesn't work on our Borland compilers at all

(and likely it will not work on most other compilers either, I think). So I'm about to propose to change the documention to specify a double parameter as part of the next update.

> _______________________________________________
> Tiff mailing list: Tiff@lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/tiff
> http://www.remotesensing.org/libtiff/