> I'm curious, how does DmCDFI know where the end of the db is?
> I transfer the pdb to memory I allocated using MemPtrNew(),
> so does it assume the pdb is of length MemPtrSize()?
Good question. As you guessed, DmCDFI uses the size of the chunk. The
pointer you pass to it must be the start of a chunk. If this chunk was too
big, it'd try to allocate a larger than desired final record. If the pointer
you pass isn't the beginning of a chunk, I'm not sure what would happen. A
debug ROM would probably complain about the chunk header being invalid
(because it's looking the wrong place for it).
Lemme look at your code again...
It looks like you're starting at the beginning of a chunk, but I should have
noticed this in your original post:
> dbSize = weber->getContentLength(); // slightly larger than db
Try doing a MemPtrResize to the exact size, once you know what it is. (It
looks like you track it using totalBytes.) If it really is only slightly
larger, then this shouldn't cause the error you're seeing. It should just
cause the last record to be larger than desired.
Some other minor issues...
> dbMemP = MemPtrNew(dbSize);
Check that this doesn't return NULL.
> while (totalBytes < dbSize) {
> int reqBytes = min(1024, dbSize - totalBytes);
Check that aren't running out of room prematurely. This condition should
never cause the loop to exit. If it does, the pdb will be truncated and
attempts to create a database from it could fail or produce a corrupt
database.
If you want to use ExgDBRead, you should be able to do it without buffering
the received data. Just have your readProc callback function call
weber->getDecryptedChunk().
-
Danny
--
For information on using the Palm Developer Forums, or to unsubscribe, please see
http://www.palmos.com/dev/support/forums/