This is what I use (which works for me)
Use MemMove() when copying out of the packed buffer, to avoid memory
alignment issues:
instead of
unpackedStruct->aBool = (Boolean *)(*c);
use
MemMove(&unpackedStruct->aBool, c, sizeof(unpackedStruct->aBool);
where
unpackedStruct is a pointer to your unpacked record struct
c is a pointer to the packed record memory block
So for example, I have these pack/unpack functions:
// some example struct
typedef struct {
Boolean theBool;
Char theString;
} dbRec;
// pack a record into a preallocated database record
SavePackedRec(dbRec *rec, VoidPtr databaseMemory) {
DmWrite(databaseMemory, 0, &rec->theBool, sizeof(rec->theBool));
DmWrite(databaseMemory, sizeof(rec->theBool), &rec->theString,
StrLen(rec->theString)+1);
}
// allocate local storage and unpack record
// don't forget to free returned value when you're done with it!
dbRec *UnpackRecord(VoidPtr databaseMemory) {
// compute size of unpacked record
UInt recSize = sizeof(newRec->theBool);
recSize += StrLen(databaseMemory+recSize) + 1;
dbRec *newRec = MemPtrNew(recSize);
MemMove(&newRec->theBool, databaseMemory, sizeof(newRec->theBool));
databaseMemory += sizeof(newRec->theBool);
StrCopy(&newRec->theString, databaseMemory);
return newRec;
}
-- John Schettino,
Palm OS Programming for dummies: http://schettino.tripod.com
-----Original Message-----
From: Tim Astle [mailto:[EMAIL PROTECTED]]
Sent: Monday, April 17, 2000 11:08 AM
To: Palm Developer Forum
Subject: Re: Weird.....
My array was the last entry in the struct. It turns out that a Byte /
Boolean that I added to the first of the struct caused some problems with my
double types.
I believe I need to find out the correct procedure to pack a Byte type into
a structure.
--
Tim Astle
Luca <[EMAIL PROTECTED]> wrote in message news:8556@palm-dev-forum...
>
> When you're packing data such that your packed record contains an array of
> length 1 and you plan on writing beyond its limits, make sure the array is
> at the last entry in the struct. If not, you'll end up writing over part
of
> your array since all the data is continuous and space was only reserved
for
> the first entry of the array!
>
>
>
>
>
--
For information on using the Palm Developer Forums, or to unsubscribe,
please see http://www.palm.com/devzone/mailinglists.html
--
For information on using the Palm Developer Forums, or to unsubscribe, please see
http://www.palm.com/devzone/mailinglists.html