AWARE [SYSTEMS] Imaging expertise for the Delphi developer
AWare Systems, Imaging expertise for the Delphi developer, Home TIFF and LibTiff Mailing List Archive

LibTiff Mailing List

TIFF and LibTiff Mailing List Archive
November 2000

Previous Thread
Next Thread

Previous by Thread
Next by Thread

Previous by Date
Next by Date

Contact

The TIFF Mailing List Homepage
This list is run by Frank Warmerdam
Archive maintained by AWare Systems



Valid HTML 4.01!



Thread

2000.11.23 20:06 "Using libtiff without reading from a file", by Wolfram Bettermann
2000.11.23 21:06 "Re: Using libtiff without reading from a file", by Joris Van Damme
2000.11.23 22:00 "Re: Using libtiff without reading from a file", by Alex Cherepanov
2000.11.23 22:16 "Re: Using libtiff without reading from a file", by Joris Van Damme
2000.11.23 23:39 "Re: Using libtiff without reading from a file", by Alex Cherepanov
2000.11.24 04:17 "Re: Using libtiff without reading from a file", by Joris Van Damme
2000.11.24 13:32 "Re: Using libtiff without reading from a file", by Wolfram Bettermann
2000.11.24 13:52 "Re: Using libtiff without reading from a file", by Bjorn Brox
2000.11.24 00:30 "Re: Using libtiff without reading from a file", by Leonard Rosenthol
2000.11.24 16:48 "Re: Using libtiff without reading from a file", by Bob Friesenhahn

2000.11.24 04:17 "Re: Using libtiff without reading from a file", by Joris Van Damme

Alex wrote:
> 
> Joris wrote:
> > Alex wrote:
> > > TIFFClientOpen() is not perfect.
> > > By some reason it takes pointers to all file access functions
> > > except Open, i.e a function that takes a file spec and returns
> > > a handle. I wish somebody fix this bug in LibTiff interface.
> >
> > Why is that such a bad thing? In fact, what would be the 'file spec'
> > if you want to read from memory? The one and only complete spec that is
> > always suitable is a 32bit 'handle', which you can supply. If you
> > want to work with open files, just open them first. You can assume they
> > need to be opened anyway if LibTiff is to do something on their data, can
> > you not?
> 
> TIFFClientOpen() is bad because it is incomplete. It suffices for TIFF
> data in core but fails for TIFF files embedded in archives, databases,
> resource forks, EPS files and OLE objects. We cannot assume that Open
> is trivial in all cases.

I do tend to believe that a 32bit client 'handle' is sufficient to
identify just about everything in just about every possible environment.
I myself use it to identify a reading wrapper object that can be
inherited from to wrap anything that can be read, be it a file, a memory
block, linked list of memory block, a segment of a file, or whatever.
OK, that means you'll have to code up some reading wrapper logic, but
LibTiff is a TIFF library, not an IO library, that part is up to you.
And whether this 'Open' is trivial or not, doing it before calling
TIFFClientOpen or per LibTiff request is not going to change that, is
it?

> There are computers with segmented memory or separate address spaces
> for every process. The memory spec may need the process handle besides
> the address. Even in the single flat address space one can use ROT13
> to convert address to a handle. MS Windows does it all the time to
> ensure the separation between the client and system code.

Talking about windows... isn't it custom in windows to supply things
like eg enumeration functions with a single 32bit cookie? Segmented
memory? Was addressed with two 16bit values, making a 32bit address, if
I remember correctly. Seperate address spaces for processes? Are you
saying your single call to TIFFClientOpen is done simultaniously from
within multiple processes or something? Please do explain.

> It is possible to open the file outside but it will be closed inside
> the library. This design obscures the program workflow and requires
> separate error handling for Open and other LibTiff functionws.

It's up to you to close it whenever you feel like it. If you choose to
ignore the LibTiff call to your close routine, and handle 'closing' in
the wrapper afterwards, where the stuff was 'opened' in the first place,
that's up to you, in my opinion.

Seperate error handling? Is it that hard to use your error handler from
withing your opening/closing routines if it is useable per LibTiff
request?

> BTW, the use of a static variable for the error handler is another
> interface problem. The error handler function must be another parameter
> of TIFFClientOpen(). It cannot be set later because the error can happen
> during the call to TIFFClientOpen().

I agree that does need some work. I have rewritten the error and warning
functions to include... the single 32bit client cookie. In my case,
that's enough to know what exactly shows errors or warnings (sorry,
really). And I simply dumped the static variables and hard-wired my own
error handlers. It's easy enough to do that. Just about all calls to the
error or warning functions are withing functions that have access to a
tiff structure with the client cookie. 

The few cases where you might get calls to the error functions without a
complete TIFF structure available in the caller is when you run out of
memory. But if that ever happens, I guess you're in a total and
unrecoverable mess anyway - I can even hardly see windows surviving such
a situation - so I chose to just ignore it - though it probably would
have been very feasable to handle it properly.


Joris