I am writing a conduit that creates a file on an expansion card.  I am
running into a strange problem where it seems like the function
VFSFileWrite behaves strangely depending on the number of bytes that
you attempt to write.  It appears to be a word boundary issue, but I
cannot determine which boundaries are "good" or "bad" in order to
figure out a work-around.  Below is a structure that represents a
single record to be written to the expansion card file:

typedef struct
{
        char            sku[20];
        UINT32          price;
        UINT32          descriptionLength;
        UINT32          descriptionOffset;
} SkuInfoExpansionCardRecordType;

Here is a code excerpt that shows a single record being written to the
card:

UINT32 numBytesWritten;
SkuInfoExpansionCardRecordType skuInfoRec;
UINT32 recordSize = sizeof(SkuInfoExpansionCardRecordType);

// populate skuInfoRec with appropriate data

result = VFSFileWrite(skuInfoFileRef, recordSize, &skuInfoRec,
&numBytesWritten);

This results in 32 bytes of garbage being written to the expansion
file.  After this garbage, the record is correctly written.

If I change the structure to the following:

typedef struct
{
        char            sku[kSkuLength];
        UINT32          price;
        UINT32          descriptionLength;
        UINT32          descriptionOffset;
        UINT32          unused;
} SkuInfoExpansionCardRecordType;

then everything works fine.  So, for writing single records, this is
an adequate work-around.

The problem is that I have to create very large expansion card files
and it is not efficient to write each record individually.  I write
some number of records to a buffer and then write the buffer to the
card.  However, this buffering makes it much harder to predict when
word-boundary issues are going to cause problems.

Has anyone seen this problem before and what was your solution.  Thank
you in advance.

Gabe Black
Forall Systems, Inc.
Chicago, IL


-- 
For information on using the Palm Developer Forums, or to unsubscribe, please see 
http://www.palmos.com/dev/support/forums/

Reply via email to